kenjiuno / php-wfio

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

php-wfio

Unicode(UTF-8 only) filename support for PHP 5.4, 5.5, 5.6, and 7.0 (x86 and x64) on Windows

Note: now PHP 7.1 can handle UTF-8 filepath by setting internal_encoding to UTF-8.

Edit your php.ini:

; PHP's default character set is set to UTF-8.
; http://php.net/default-charset
default_charset = "UTF-8"

; PHP internal character encoding is set to empty.
; If empty, default_charset is used.
; http://php.net/internal-encoding
;internal_encoding =

Install

Get binary: https://github.com/kenjiuno/php-wfio/releases

Put php_wfio.dll into php\ext folder

Edit your php.ini

[PHP]
extension_dir = "ext"  ; Uncomment this line
extension=php_wfio.dll ; Add this line

Run php.exe -m

H:\php-5.4.25>php.exe -m
[PHP Modules]
...
wfio
...

[Zend Modules]

Code Samples

About file access:

$file = wfio_fopen8("多国語.txt", "rb"); // in UTF-8
....
fclose($file);

Or you can use stream wrapper:

$file = fopen("wfio://多国語.txt", "rb"); // in UTF-8
....
fclose($file);

dirstream is also supported:

$d = opendir("wfio://C:\\Windows");
....
closedir($d);

"wfio://" supports:

fopen("wfio://多国語.txt")
fwrite
fread
stat("wfio://filename")
fclose

is_file
is_dir
file_exists

opendir("wfio://C:\\Windows")
readdir
closedir

rename("wfio://oldname", "wfio://newname")
copy("wfio://source", "wfio://dest")
unlink("wfio://filename")
mkdir("wfio://pathname")
rmdir("wfio://dirname")

scandir("wfio://directory")
file_get_contents("wfio://filename")
file_put_contents("wfio://filename", "...")

No chdir support

  • Current directory is process's property.
  • So, keep your path to fullpath always like "wfio://C:\dir1\dir2\dir3\filename".
  • Use wfio_getcwd8 for getting current directory
  • Use wfio_path_combine to hold your subdir in fullpath format.

My build options

rem TS ThreadSafety "Release_TS" config.nice.bat

cscript /nologo configure.js  "--disable-all" "--enable-cli" "--disable-debug" "--enable-com-dotnet" "--with-wfio=shared" "--enable-cgi" "--enable-isapi" %*

rem NTS NonThreadSafety "Release" config.nts.bat

cscript /nologo configure.js  "--disable-all" "--disable-zts" "--enable-cli" "--disable-debug" "--enable-com-dotnet" "--with-wfio=shared" "--enable-cgi" "--enable-isapi" %*

twfio.bat

SET TEST_PHP_EXECUTABLE=H:\php-sdk\php54dev\vc9\x86\php5.4\Release_TS\php.exe
Release_TS\php.exe run-tests.php ext\wfio\tests

twfio-nts.bat

SET TEST_PHP_EXECUTABLE=H:\php-sdk\php54dev\vc9\x86\php5.4\Release\php.exe
Release\php.exe run-tests.php ext\wfio\tests

Thread Safety

Invoke "php.exe -i" to check it.

NTS(Non Thread Safety):

php.exe -i 2> NUL | find "Thread Safety"
Thread Safety => disabled

TS(Thread Safety):

php.exe -i 2> NUL | find "Thread Safety"
Thread Safety => enabled

About

License:BSD 3-Clause "New" or "Revised" License


Languages

Language:C 66.2%Language:PHP 33.5%Language:JavaScript 0.4%