php5.5×windows10
windowsでファイルを作成してローカルに保存してchmodするとき、1つのファイルだけ毎回
PHP Warning: chmod(): No such file or directory
になって困ってました。
結論から言うと、日本語ファイル名(sjis-win)で、ダメ文字「ソ」が入っているファイルだけ失敗していて、うまい回避方が見つけられなかったのでファイル名を英数字で保存することにしました。
えっこれやばくない??不便過ぎない??
って思ったけどphp7.1で解決してるみたいです。
Windows版 PHP 7.1 で日本語パス(パス文字列のエンコーディング)が対応されることによる影響 - Qiita
以下結論にたどり着くまでのログ
パスが間違ってるのかな?
<?php var_dump(file_exists("c:/test/マルソフト.txt")); // boolean false
えっパス完全に合ってるのにfalse???
とりあえず、一つ上のディレクトリにfile_exists()してみる
<?php var_dump(file_exists("c:/test/")); //boolean true
一つ上までは存在する…。
日本語ファイル名がダメなのかな?
ファイル名を英数字だけにリネームして再度実行してみる。
<?php var_dump(file_exists("c:/test/test.txt")); // boolean true
やっぱり日本語ファイル名か。
なにか見えない文字でも入ってる?入ってるとしたらどこだろう?
glob()で1文字ずつ確認してみる。
<?php var_dump(glob("c:/test/マ*")); // array (size=1) var_dump(glob("c:/test/マル*")); // array (size=1) var_dump(glob("c:/test/マルソ*")); // array (size=0) empty var_dump(glob("c:/test/マル*フ*")); // array (size=1) var_dump(glob("c:/test/マル*フト*")); // array (size=1) var_dump(glob("c:/test/マル*フト.txt")); // array (size=1)
「ソ」が犯人です!!!
ggった結果「ソ」はダメ文字と呼ばれる文字の1つで、そういわれる理由があるそうです………