WordPress の本体アップデートしようとしたら「チェックサムが一致しません」って出て更新できない…!!🐧
スマイルサーバーの案件でこれにハマったので、原因と対処法をまとめました。
まず結論
wp-config.php に1行追加して、一時ディレクトリを変更するだけ!!
// スマイルサーバーの /tmp 容量制限対策
define('WP_TEMP_DIR', dirname(__FILE__) . '/wp-tmp/');
あとは WordPress 直下に wp-tmp フォルダ(パーミッション 755)を作ればOK。
これだけで本体の自動更新が正常に動くようになります!
何が起きたか
スマイルサーバーで運用してるWordPressサイトで、本体のアップデートをかけたらこんなエラーが。
「チェックサムが一致しません」
え、なにこれ。ファイル壊れてる…?
しかもプラグインの更新は普通にできる。
WordPress 本体だけがダメ。
「本体だけ失敗するってどういうこと?」ってなりました。
原因:スマイルサーバーの /tmp 容量制限
調べたら、スマイルサーバーは /tmp ディレクトリの容量に制限がある んですね。
WordPress が本体を更新するとき、ZIPファイルを /tmp にダウンロードして展開する流れなんですが、WordPress本体のZIPはサイズが大きい。
なので途中でダウンロードが欠損しちゃう → チェックサムが合わない、というわけ。
プラグインのZIPは小さいから影響を受けなかった。
本体だけ失敗してた理由はこれでした。
解決策の解説
やることは3つ。
① wp-config.php に一時ディレクトリの設定を追加
// スマイルサーバーの /tmp 容量制限対策として、WordPressの一時保存先を変更
define('WP_TEMP_DIR', dirname(__FILE__) . '/wp-tmp/');
WP_TEMP_DIR を定義すると、WordPress が一時ファイルの保存先としてそのパスを使ってくれます。
サーバーの /tmp ではなく、自分のディレクトリ配下に保存するので容量制限を回避できる!
② wp-tmp フォルダを作成
- 場所:WordPress インストールディレクトリ直下
- パーミッション:755
FTPでフォルダ作って、パーミッション設定するだけ。
③ README.txt を置いておく(おすすめ)
後から見た人(自分含む)が「なにこのフォルダ?消していいの?」ってならないように、中にREADMEを置いておくのがおすすめ。
このフォルダは WordPress の一時ファイル保存用ディレクトリです。
スマイルサーバーでは /tmp の容量制限により、
WordPress本体の自動更新時にエラーが発生することがあるため、
wp-config.php にて WP_TEMP_DIR を本フォルダに変更しています。
削除しないでください。
README.txt があっても更新処理には一切影響しないので安心。
やりがちなNG
対応する時に注意すべきポイントも整理しておきます。
| やりがちなこと | 結果 |
|---|---|
| 何もせず手動で毎回更新する | ❌ 手間だし、忘れてセキュリティリスクに |
| wp-tmp のパーミッションを 777 にする | ❌ セキュリティ上よくない。755 で十分 |
| wp-tmp を作り忘れる | ❌ ディレクトリがないとエラーになる |
| READMEを置かずに放置 | ❌ 後任が「不要フォルダ?」と消しちゃう可能性 |
まとめ
- スマイルサーバーは
/tmpに容量制限がある - WordPress本体のZIPが大きいため、ダウンロード途中で欠損 → チェックサムエラー
WP_TEMP_DIRで一時ディレクトリを自前のフォルダに変更すれば解決!!- 制作ミスじゃなくサーバー仕様起因なので、同じ環境なら標準対応として入れてOK
スマイルサーバーの案件では、最初からこの設定入れておくのが安心ですね。
参考
以上!!
誰かのお役に立てれば嬉しいです🐧
