サーバにアップしたフォルダがリネームできなくなった話
サーバにとあるフォルダをアップしたところリネームもパーミッションも変更できなくなりました。
ファイル転送アプリを使っててその症状が出たので実際にはどういう状況になってるのかと SSH で接続して確認したところ、ファイル名が以下の様なものになっていました。
hoge?
という事で以下のコマンドでリネームしたところエラーでリネーム出来ませんでした。
mv hoge? hoge
該当のファイルに対して、 ls を実行しようと ls と打った後に入力補完を実行すると以下の様な状態に成りました。
mv jsqrcode\ /
ここでこれは ? の部分は実際には ? じゃなくて改行コードが入ってるのかな?と思い以下の様な文字コードを確認する PHP のプログラムを作り、確認しました。
<? $res_dir = opendir( '.' ); while($file_name = readdir($res_dir)){ print "|{$file_name}|"; for ($i = 0; $i < strlen($file_name); $i++) { print ord($file_name[$i])." "; } print "\n"; }
確認したところ、該当する文字コードは10進数で 10 。つまり LF (改行) ですね。
該当の文字コードが分かった所で PHP プログラムを以下の内容に変更にして実行したところちゃんと使えるフォルダに成りました。
rename("hoge".chr(10), "hoge");