Swell+Xserverの場合のContent-Dispositionエラー解消例

突然、WordPressに画像があげられなくなりました。
何かしらのアップデートやプラグインの操作でなった可能性が高いのでしょうが、どこでなったか分からない状態です。

少し回復まで時間がかかりましたので、まとめておきます。

もくじ

エラーの概要

今回のエラーは、WordPress上に画像がアップできなくなるというエラーでした。
アップロードを試すと「Content-Dispositionが入力されていません。」と出てきて、画像が全くアップロードできなくなりました。

メディアからであればアップロードができるかんと考えて試しましたが、こちらのエラーでした。

サーバーが画像を処理できません。このエラーは、サーバーが忙しいか、タスクを完了するために十分なリソースがない場合に発生します。小さな画像をアップロードすれば解決するかもしれません。死傷する最大サイズはXXXXピクセルです。

うーんという感じですが、以下の改善を試してみました。

試したこと一覧

見出しの上から順々に試しています。

ファイルの確認

アップロードしようとしているファイルの破損をまずは気にしてみました。
画像ファイル自体のエラーがないかどうかという観点です。

PNGファイルをあげていましたので、今までアップロードしたことがある別のファイルを試しました。
また、JPGファイルもアップロードを試しました。

結果としてどれもうまくいきませんでした。

プラグインの競合検証

他のプラグインとの競合が原因という可能性を疑いました。
ひとつひとつオフにしたり、前日までに新しくインストールした順にオフにすると一番いいでしょう。

今回、直近で新しくインストールしたプラグインがなかったので、全てのプラグインを一時的に他のプラグインを無効にして、問題が解消するかどうかを確認してみました。

改善されませんでした。

テーマの検証

Swellを使っているのですが、Swellが原因で発生している可能性の検討をしました。

あまり大々的に変更して戻れなくなると困るのですが、Twenty Twenty-Oneなど、基本的なテーマに変更してうまく作動するかを確認します。
テーマを変更しても画像のアップロードの改善がされなかったため、テーマのせいでもないようです。

.htaccessファイルの確認

.htaccessファイルが破損している可能性の検討をしました。
更新をする形で試します。

サーバーにFTPやホスティングのcPanelを使用して、WordPressのルートディレクトリにアクセスします。
.htaccessファイルを一時的に名称変更します。例えば.htaccess_oldとか。

その後、WordPressのダッシュボードにアクセスし、「設定」>「パーマリンク設定」を開いて、変更を保存します。
これで新しい.htaccessファイルが生成されます。これで、問題が解消するかどうかを確認します。しかし、うまくいきませんでした。

ヘッダーにContent-Dispositionを改善することも試してみました。
以下を加えてみる試みです。

<FilesMatch "\.(jpg|jpeg|png|gif|bmp|pdf)$">
  Header set Content-Disposition "inline; filename=%{REQUEST_FILENAME}e"
</FilesMatch>

これでも、うまくいきませんでした。

SWELLのサポート確認

SWELLの公式ユーザーフォーラムやサポートで回答がないかを確認してみました。
動画ファイルのアップロードの際に同じContent-Dispositionのエラーが出ることが報告であります。

しかしながら、立ち消えになった回答のようです。
2021年の質問のようで、再投稿しても解決に至らなそうです。

PHPバージョンの確認

使用しているPHPのバージョンが古いかを確認します。
普段あまり意識しないところです。

使っているサーバーにアクセスして、バージョンを確認しましょう。
最新までいかなくても、[推奨]などと示してくれるので、それ未満だった場合選んで改善をしましょう。

私の場合、少し古いPHPを使っていたのでバージョンを上げてみました。
しかし、改善されませんでした。

メモリ制限の確認

WordPressのメモリ制限が原因の可能性を次に考えました。

こちらもサーバー内の設定を変更する必要があります。

「public_html」に、wp-config.phpファイルがあります。
その中で、メモリ制限を増やしてみてみます。

define('WP_MEMORY_LIMIT', '256M');という形で、メモリ制限を増やしてみました。
一応、これでいいはずですが。

なかなか、今回の問題の改善ができません。

サーバー会社問い合わせ

サーバーの設定がうまくいっていないのかなというところまで確認しましたので、使用しているXserverへ問い合わせをしました。

「php.ini設定」

[post_max_size]と[upload_max_filesize]について、数値を上げてみるようにアドバイスをもらいました。
一応ドキュメントや画像のアップロードであれば、64MBや128MBくらいでいいかなと考えます。

少しずつ数値を上げて様子を確認します。
なお、[upload_max_filesize]は、[post_max_size]よりも大きな数字にしています。例えば、[post_max_size]を64MBに設定したなら、[upload_max_filesize]は96MBにするなどです。

うまく直りませんでした。

その他

他の画像アップをしてどうか、異なるブラウザやネットワーク環境からアップできないかなども言われました。
また、プラグインが原因になる可能性も指摘されました。

これらもすでに試している通りと回答しました。遠隔で回答するため、先方も難しいでしょうが、うまくいきませんでした。

エラーログの確認

WordPressのデバックモードにするか、Xserverならエラーログを確認できます。

デバックモードは、またpublic_html内にあるwp-config.phpファイル内で、

define('WP_DEBUG', false);

とあるはずです。これを変更して

define('WP_DEBUG', true);

にしておきます。

これで、wp-contentのディレクトリ内に、debug.logが吐き出されますのでエラーメッセージが見れます。

Xserverの場合はこちらの方法でエラーログがダウンロードできます。

今回の解消方法

サーバー上からエラーログを確認しましたので、自前でも続きを検討します。
残っているのは、サーバーキャッシュのクリアや、WordPressの再インストールが考えられますが、できる限り最後にしています。

エラーログの続きからは、マルチパートのボディパーツへの制限がありました。
とりあえずこれを設定しておきます。

少し前で説明したphp.iniに以下の内容を追加しました。

max_multipart_body_parts = 10000

今回は、これでアップロードできるようになりました。

まとめとして

その人によって上記の方法で修正できないこともありますが、一応のトラブルチェック例ということで例示してみました。
困ったときの参考に少しでもなれば幸いです。

また、ブログ構築やホームページ(ウェブサイト)を半日で作るセミナーも実施していますので、ご興味のある方はぜひどうぞ。

【編集後記】
トラブル修正は意外と時間がかかります。
YouTubeの撮影をこなして、少し編集がずれこみました。

【運動記録】
ストレッチ○

【子育て日記(6歳・2歳)】
子どもの予防接種を受けに行きました。
特に痛くなかったようで、ケロッとしていました。

楽しみになるように、一緒にお菓子を買って帰りました。

もくじ