登入
RSS Feed

[密技] 讓 Windows 上的 PHP 支援多國語言檔名 (php-wfio Extension — Let PHP in Windows Servers support UTF-8 filenames)

應該有蠻多人跟我一樣遇到這個問題
想要在 Windows 的機器上用 PHP 顯示多國語言
(Ex. 簡體中文、日語等等)
但是礙於微軟的檔案編碼不是使用 Unicode 來處理
所以不論怎麼用都沒有辦法來處理這個問題
甚至直到現在最新的 PHP 7.0 還是沒有修復這個問題

然後為了推廣,我在關鍵的部分會附上英文參考
I’ll write in English on some parts.

事情是這樣的
前陣子想用家裡的伺服器做一個網路硬碟
不過遇到了上面所講的問題,裡面很多簡體字和日文會直接跳錯誤無法顯示
不論是用 iconv 或是其他方法都試過了
也爬了很多國外的文章,仍舊無解

所以只好上 PTT 發問了

鄉民真的很萬能.. 注意到裡面有一段推文

rockmanalpha: 我查了一下當初預想PHP6是要解決Unicode的問題
rockmanalpha: 結果花了很多時間最substr($path, 0, -1)後還擱置 所以7好像也沒有解決的
rockmanalpha: 樣子 有一個叫php-wfio的php extension好像就是來
rockmanalpha: 解決Windows環境下PHP處理含有Unicode檔名的問題

這又讓我重新燃起了希望!!
於是開始研究

軟體名稱:php-wfio
官方網站:https://github.com/kenjiuno/php-wfio
軟體類型:PHP Extension 擴充元件
支援版本:PHP 5.4 / 5.5 / 5.6 / 7.0 on x64/x86 Windows
軟體下載:https://github.com/kenjiuno/php-wfio/releases (download link here)

當初由於家裡的伺服器已經更新到 PHP 7.0.0 了
不過 php-wfio 卻還沒更新支援
發了 issue 回報 bug,順便詢問新版更新
沒想到作者的動作很迅速,馬上就推出新版本了!
那當然迫不及待來用用看啦~

首先先下載需要的檔案,目前版本為 v0.4
First, you should download php-wfio extension. Current version is v0.4.

然後打開壓縮包,找到你用的 PHP 版本
Then, open the 7z file, find your PHP version.

一樣找到你用的版本,若不知道當初用哪個版本,可以用 phpinfo() 去看
Find the version that you’re using. If you forget what version you use, you can use phpinfo() function to find it.

裡面會有一個 php_wfio.dll,解壓縮出來並放到 php/ext 資料夾
Unzip “php_wfio.dll”, then put it to “php/ext” folder.

接著編輯 php.ini,在 Dynamic Extensions 部分加入這一行
Edit “php.ini” and add this line:

extension=php_wfio.dll

重開伺服器,應該就可以正常運作了
Restart your server, it will works.

怎麼使用呢?最快的方法就是在所有需要讀檔的路徑前加上 wfio:// 就好了,例如
How to use? The easiest way is add “wfio://” before all paths, like:

file_get_contents(‘wfio://../中文.txt’)
file_get_contents(‘wfio://C:/資料夾/中文.txt’)

其他用法不多做解釋,可以參考作者的說明

順便附上檢測有沒有安裝 php-wfio 的語法

if(!extension_loaded(‘wfio’)){
echo ‘請安裝 php-wfio’;
exit;
}

以上大概就是這樣,希望有幫到各位
這似乎是目前唯一解了~

沒有標籤。
  • Trackbacks
  • Comments
  • Mega Luo
    2016 年 08 月 09 日

    謝謝你把心得分享出來,解決了困擾我很久的問題,相信它一定可以幫到更多人

  • 暫時沒有引用。

發表迴響

*