サイト移転で画像ファイルをFTPでアップロードした
かなり旧式のCPIのサーバーからさくらインターネットのサーバーにWordpressサイトを移転する際に、通常は使わない(使う必要が無い)FTPを使わざるを得ない状況になりました。
この時点でかなり嫌な予感がしておりましたが、いやな予感は現実に。
FTPを使った理由は?
WordPressのuploadsフォルダ内に日本語ファイル名があり、tarで固めて転送先で展開すると文字化けしたので、最終手段のFTPで1ファイルずつ転送とあいなった。
FTPの転送がメチャクチャ遅い
移転元のサーバーが弱すぎて、同時ダウンロード数がmax5ぐらい。転送失敗数も多く、結局8時間ぐらいかけて画像ファイルをダウンロードするはめに。反面、アップロード先のサーバーは新しいサーバーなのでそれほど時間がかからず完了。
FTPでアップロードした顛末
アップロードが完了して、さっそく、サイトを確認すると日本語ファイル名の画像が表示されていない。
tarで固めて転送した時と同じ状況でFTPでアップロードした意味がナッシングな状況に。
サーバー間でwgetでftpする方が賢い?
サーバーからローカルPCにダウンロードして、再度アップロードするは愚の骨頂だと思いながら、仕方なくダウンロードしている自分がいる。
wgetが使える環境であれば、wgetとftpを組み合わせてディレクトリごとダウンロードできるようだ。
今度は試してみたい。
日本語ファイル名の画像がWordpressで認識されない
WordPressにログインしてダッシュボードのメディアライブラリを確認すると、DB上はファイルはあるように見えているがサムネイルは表示されず、実際の画像は見つけられていない感じ。
WP filemanagerなどのプラグインでメディアライブラリを覗くと、なんとファイルが一覧に出てこない。
WordPressからはファイルが全く見えていないようで、ファイル名が文字化けとかそういう話とも違うようだった。
FTPから確認すると間違いなくファイルはあるのだが・・・・
ファイル名はUTF-8になってるはずなのだが・・
FTPクライアントはFilezillaを使用している。
Filezillaのサイトマネージャーには文字コードタブがあり、デフォルトだと自動検出が選ばれる。
サーバーがサポートしていればUTF-8を使用し、そうでなければローカルの文字コードを使用します。
とあるので、移転先がUTF-8であればファイル名はUTF-8で転送されるはずだった。実際移転先はUTF-8だ。
しかし、ターミナルでlsをすると文字化けしたファイルは出てくるものの、LANGをUTF-8/EUC/SJISのどれにしても文字化けは解消しない。
これは文字コード以前にファイル名が壊れているような感じがした。
Filezillaのファイル名文字コードの設定を見直すと・・
転送時のファイル名の文字コードを強制的にUTF-8にする設定がFilezillaにはあった。
試しに強制UTF-8設定で日本語ファイル名を転送したら、簡単にWordpressで日本語ファイル名を認識した。
ということで、アップロードを全てやり直すことになった。
MACの日本語ファイル名は闇が深い
最近はMACで日本語ファイル名の画像をwordpressにアップロードする人も増えてきている。
MACのファイル名はUTF-8なのだが少し特殊でUTF8-MACというものらしく、濁点とかが2文字にわかれてしまう。
サーバーにそのままUTF8-MACのファイル名でアップロードされていて、DB上もその名前になっていると、FTPでwindowsにダウンロードしたときにSJISに変換されたあと、アップロード時にUTF-8に変換されるけど、濁点部分がDBとファイル名で一致しないというようなことが起こりうる。
こうなると結構修正は面倒になるので、MACの人は日本語ファイル名を使わないようにした方が無難。
まとめ
昔は日本語ファイル名は使えなかったのでWP multibyte patchプラグインを使って日本語ファイル名を強制的に使わないようにしていたので問題は起きなかったのですが、最近は日本語ファイル名でもそのまま使えるので気軽にアップロードしてしまう人が多いかと思います。
画像ファイルのファイル名に日本語を使うのは本当にやめた方がいいです。