最近在玩 PHP Base 的檔案管理系統 , AjaXplorer . 最主要是可以做目錄權線系統 . 也就是 Web 版的 NAS 嚕 ~..
系統中已經有一個檔案系統是之前透過 SAMBA 以 UTF-8 來最 filename encoding . 這是因應會有中文檔名而使用 UTF-8 編碼 . 改用 AjaXplorer 後 , 就要考量到 PHP 是否可以去讀 UTF-8 編碼的檔名 . 在 AjaXplorer 的 runTests.php 中有一個項目是在指 locale 這個參數 . 但不知道為什麼目標系統的這個參數竟然指到 zh_TW.Big5 去了 ! .. @@a .. 但該台主機的 user 只有 \”worren\” 這個帳號的 .cshrc 有指到這兒來呀 !.. 再跑一下 phpinfo(); 看看 .. 裡面的 Enviornment 中的 LOGON 還真的指到 user 去了 .
從系統方面試了許\多方法都無法解決這個問題 , AjaXplorer 讀到的中文檔名看起來就跟在 Terminal 中看到的一樣 ! 就是亂碼 … php 有一個指令是 setlocale 可以來指定 php 環境的 LOCALE 參數 , 但總不可能在 AjaXplorer 的每個檔案前加入這段描述吧 !?… 其實是有試過在 conf.php 中加入 , 但並不 work .
後來找到了一個方法 , 原來 php.ini 中有一個參數是auto_prepend_file = , 預設是空白 . 於是我就簡單地做了一個檔案命名為 php.locale, 並將auto_prepend_file 指到 php.locale , 內容為 …
<?php
setlocale(LC_ALL,\"en_US.UTF-8\");
?>
結果再跑一下AjaXplorer … ha ~… it\’s okay !已經可以正確存取 UTF-8 編碼的中文檔名了 !