WordPress にメディア画像をアップロードできず、小一時間ほど悩んだ話です。小ネタです。
本ページはこんな方におすすめ
- WordPress に急に画像がアップロードできなくなった人
- 上のケースで、サーバーにもブラウザにも問題がなさそうな人
- 上のケースで、リソースの問題にも心当たりがない人
WordPress のメディアライブラリへのアップロードが失敗する
投稿記事に画像を貼り付けるときに、WordPress のメディアライブラリに画像をアップロードするなどして使う人が多いと思います。
私の場合、前回の小ネタを一つ投稿する際、サムネイルの画像をつけようと、fix-onclick-dropping-out.jpg という jpeg ファイルをアップロードしようしていました。
ところが、エラーになってしまいます。
サーバーが画像を処理できません。このエラーは、サーバーが忙しいか、タスクを完了するために十分なリソースがない場合に発生します。小さな画像をアップロードすれば解決するかもしれません。推奨する最大サイズは2560ピクセルです。
WordPress ついては、しばらく意識しておらず、そのまま WordPress テーマをデフォルトのまま使う生活を続けていたので、鈍くなっていました。
そのため、そのままエラーメッセージを真に受けて、以下のような対応で乗り切ろうとしていました。
アップロードしようとしたファイルは、画像のピクセル数は 1,200 x 600 px 程度の画像で、今の基準で言えば大きなサイズでもありません。
そのため、解像度の大きな画像をアップロードしようとしたわけでもなく、大きすぎるファイルなのでサムネが作れないなどのエラーというわけでもなさそうです。
WordPress でメモリ不足、エラーが起きているのか?
エラーが実際にサーバーのメモリ不足で起こっていると仮定して、今回の画像の画素数の問題ではないだろうと考えました。
何らかの理由で、WordPress のファイルを実行する際のメモリが不足している可能性を、まずはつぶして行いきます。
以下の内容を wp-config.php に書いて試します。
WordPress ini_set('memory_limit', '256M'); define( 'WP_MEMORY_LIMIT', '256M' );
まず、256MB から試し、512MB、次に 1024MB まで試しました。
しかし、アップロードエラーは収まらず、エラーのままです、
最近のレンタルサーバーでは、メモリまわりのエラーは標準設定のままでも問題はないことが普通です。
サーバーが apache の場合
「Apache か nginx のリスタートもしないとだめなのでは....」と思いましたが、レンサバを再起動させるような権限はないので、これは試せません。
レンサバを再起動させなくても、apache だけを再起動させるか、HUP シグナルを送りたいのですが、これもできません。
というより、当サイトは現在、 エックスサーバー で運営しているのですが、この程度の画像でメモリが足らないとかありえないです。
サーバーが nginx の場合
サーバーが nginx の場合、設定する権限があれば client_max_body_size、php.ini 内の upload_max_filesize の値を書き換えてみます。
サイズ的には、512MB 程度まで試せば大丈夫です。ただし、設定値を変えた場合はデーモンを再起動して、再設定の設定値を読み込みなおす必要があります。
- 二年契約するなら爆割引の VPN 【NordVPN.com】
- 無制限機能盛りだくさんのレンタルサーバー
ド基礎に戻って、初歩的手段から始めてみる
サーバーが「画像を処理できませんでした」と返しているので、サーバー側のエラーだと思いましたが、クライアント側、つまりブラウザ側の処理エラーという可能性もあります。
アップロード中にデータの整合性が失われたりってことですかね、ありそうです。
また、恥ずかしいミスの類としては、Wi-Fi から切断していて、オフライン状態だったとかいうケースもありそうです。普通は Wi-Fi 切れはブラウザにその旨のエラーが出るようになってますので、これでもなさそうです。
そのような場合は、クライアント側の PC を再起動する、あるいはブラウザを閉じて開き直すなどで解決する可能性もありそうです。また、WordPress からログアウトすることで、クッキーが更新され、データのアップロードに(良い意味でも悪い意味でも)影響を与える可能性もゼロではなさそうです(それで解決できる可能性あり)。
私は、「まぁ、そんなことはないわな」と疑いながら、再起動、クッキー削除、再ログインと試してみましたが、まったく改善できずエラーのままでした。
キャッシュの削除を片っ端から試す
私のケースでは、キャッシュ関係はあまり悪さをしている可能性を考えていなかったので、「まぁ、無いわな」と思いつつやりました。キャッシュ関係のプラグインを導入している方は、まずキャッシュに問題がないことを確認してからでないと、次の大胆なことができません。
キャッシュはプラグイン関係のみならず、ブラウザのキャッシュも消して挑みましたが、結果を変わらずでした。さらに、WordPress からログアウトして、再度ログインして試すも、結果は動かず。
ファイル名が長いのかなとも、一瞬疑ったので、念のため
以下すべての作業は、アップロードするファイル名を短くして、fix-onclick-dropping-out.jpg から onclick-dropping-out.jpg で試します。
アップする画像ファイルそのものが壊れている可能性を疑う
ふと思い出したことですが、WordPress は画像が壊れていたり、フォーマットが微妙に違えばエラーになった経験があります。例えば、.bmp ファイルを .jpg として拡張子を間違えてアップしたら、エラーになったように記憶しています。今でもそうなのかは試していませんが、jpeg のフォーマットが違うのでエラーなどのケースはありそうです。
今回は Windows 標準のペイントで、元画像を開き、.bmp 形式で保存し、そのファイルを再度ペイントで開き、次は .jpg で再保存します。これで、元画像(ファイルの破損)にエラーがあったとしても、ほぼほぼ解消(再生成)されるのではと思います。
で、試しましたが、結果はダメでした。結局、キャッシュは問題ないということなんだろうと思います。
さらに、.jpeg で保存したファイルを開き、今度は長手を 600px にリサイズして先ほどのファイル名の末尾に "_600px" とつけて区別して、アップロードしてみました。
でも、結果は変わらずでした。ここまでで、どうやらキャッシュ関係からエラーになっているわけでもなさそうです。
それでも、元の画像を変換・編集して新画像を様制した程度では、まだ画像ファイルそのものが壊れている恐れがないとは言えず、新規作成した画像で試します。
真っ白の画像を、1920 x 1080 の FHD サイズで作成し、ファイル名を先ほどと同じものに変更し、アップロードしてみます。
結果は、変わらず。
サイズが大きいということはありえないのですが、その白塗りの画像(.jpg)を 482 x 270px に縮小してアップロードしてみます。さらに、.png フォーマットに画像を変換してアップロードを試してみます。
結果は変わらず、ファイルサイズも小さいためかエラーは一瞬で表示されました。アップロードエラーは変わらずです。
一瞬で「サーバーが忙しい」とか「十分なリソースがない」などの理由が表示されています。
この段階で私は気づきました。
この図のアップロードエラー、ファイルをドラッグ&ドロップすると、一瞬で表示されるのですが、その間、ファイルの中身を処理している形跡がありません。
サムネイルの作成処理そのものが行われているという感じではなく、アップロードした瞬間にアウトという感じでした。
理由は極めて単純だった。ファイル名が不正!
今回のエラーは、まともに対処しようとしたので解決までに時間がかかりすぎましたが、中身は大したことありませんでした。
悪さをしたのはファイル名でした。
ファイル名の不正というのは、改行コードが含まれていたり、表示できない文字が含まれているといったようなカッコの良いファイル名のエラーではありません。
最近の WordPress のプラグインやサーバーから提供されるセキュリティ機能の中には、SQL インジェクションのようなものに過剰に対応しすぎているものがあります。
今回もこの類で、SQL ではありませんが、ファイル名の「-onclick-」部分に過剰反応したようです。
ファイル名にプログラム(今回の場合は JavaScript など)的なコード(テキスト)を含めてアップロードし、このファイル名をコード的に呼び出すことにより、ユーザーに意図しないコードを実行させるといった、プチ・ハック対策なのだろうと思います。
画像ファイル名に、JavaScript などのコードを含めてアップロードされると、WordPress がそれを img タグなどで呼び出す際に、不正実行される可能性があると判断したわけですね。
ファイル名にコードを含めるのは、SQL インジェクションより誰でも簡単にやれそうな手段です。気づきませんでしたが、そういう設定のままでいてくれることに異論はございません。
でも、「ファイル名がヤバイ」程度のことは警告を出してほしかったです。意外に盲点で気づくのが遅れました。
なお、ファイル名を onclick-dropping-out.jpg から attribute-dropping-out.jpg に変更してアップロードすると、何の警告もなくサムネイル化され、アップロードが成功しました。
まとめ
上で書き忘れましたが、日本語のファイル名のアップロードは可能な限り避けてください。システム(アプリ)によっては、特にマルチバイトに対応していない旧式のものは誤動作の原因になります。
WP に画像がアップできなくなった時に試す順番
- ヤバそうなファイル名を変更する
- wp-config.php のメモリ制限を変更する
- WordPress にログインしなおす
- アップロードに使う記事作成 PC を再起動させてから再度試す
上の順で試すと時間短縮になると思います。
[広告]どのレンサバがおすすめか?
レンタルサーバーですが、当サイトが使い続けているサーバーは、 エックスサーバー です。事実として10年以上、サーバーとしてのトラブル無しですので安定していると思います。
価格を抑えたいなら、現在は、ロリポップ!も速くて安定しています(しかも安い)。
-
エックスサーバーと wpX Speed 、wpXシンどれを選ぶべき?
このページはエックスサーバーを使ってみたいという人が、「エックスサーバー」と「wpX Speed」、どれにするべきか悩ん ...
続きを見る
-
【最新】ロリポップ VS エックスサーバー、速度対決結果は?
月額550円で、「エックスサーバーと同等の速度で他社サービスを利用できるかどうか」というのは、地味にレンサルサーバー契約 ...
続きを見る
無制限機能盛りだくさんのレンタルサーバー
他社VPSを凌駕する圧倒的性能!VPSサーバー『シン・VPS』