ワードプレスのメディアに保存した画像(upload_max_filesize, post_max_size, memory_limit)

画像はどこに保存される?

WordPressに画像をアップロードすると、2つの場所に情報が保存されます:

  1. サーバーのディレクトリ:実際の画像ファイルがここに保存されます。
  2. データベース:画像に関する情報(メタデータ)がここに記録されます。
サーバー wp-content/uploads image.jpg データベース wp_posts テーブル ID: 123 post_author: 1 post_date: 2024-10-20 guid: /uploads/image.jpg

データベースでの画像情報の記録

画像の情報は、WordPressデータベースのwp_postsテーブルに保存されます。主な情報には以下のようなものがあります:

  • ID:画像固有の識別番号
  • post_author:アップロードした人
  • post_date:アップロード日時
  • guid:画像のURL
  • post_type:「attachment」(添付ファイルの意味)

注意点:DB容量とPHPエラー

画像を何度も編集すると、派生画像がどんどん増えていきます。これには2つの潜在的な問題があります:

  1. DB容量の圧迫:多くの画像情報がデータベースに保存されるため、DBのサイズが大きくなります。
  2. PHPエラーのリスク:大量の画像データを処理しようとすると、PHPのメモリ制限に達し、エラーが発生する可能性があります。

対策

  • 定期的に不要な画像や古い編集履歴を削除する
  • 画像の最適化プラグインを使用して、ファイルサイズを小さくする
  • 必要に応じてPHPのメモリ制限を増やす(ホスティング会社に相談が必要な場合も)

WordPress編集画面でのエラー

WordPressの編集画面で250枚の画像ブロックを追加すると、メモリ使用量が急激に増加し、PHPのメモリ制限に達してエラーが発生する場合があります。

WordPress編集画面 PHPメモリ使用量 50枚 150枚 250枚 メモリ制限 エラー: PHPのメモリ制限に達しました ページを保存できません

エラーの原因は以下の点が考えられます:

  • 大量の画像ブロックのレンダリングにメモリを大量に消費
  • ページデータの保存時に、大量のデータを処理するためのメモリが不足

custom-php.ini での設定

1)upload_max_filesize:

  • 影響: 単一のファイルアップロードに限定
  • 症状: この値を超えるサイズのファイルをアップロードしようとすると、エラーが発生
  • 注意点: post_max_size よりも小さい値に設定する必要がある

2)post_max_size:

  • 影響: ファイルアップロードを含むすべてのPOSTリクエスト
  • 症状: この値を超えるデータを送信しようとすると、POSTデータが空になる
  • 注意点: 通常、upload_max_filesize よりも大きい値に設定する

3)memory_limit:

  • 影響: PHPスクリプト全般(ページ編集、プラグイン処理、画像処理など)
  • 症状: この値を超えるメモリを使用しようとすると、”Allowed memory size of XXXXXX bytes exhausted” エラーが発生

WordPress PHP設定の影響範囲 PHP設定項目 upload_max_filesize post_max_size memory_limit 影響範囲 ファイルアップロード フォーム送信 ファイルアップロード ページ編集・保存 プラグイン処理 画像処理
  • アップロード時の問題: 主に upload_max_filesizepost_max_size に関連
  • ページ編集・保存時の問題: 主に memory_limit に関連

PHPメモリについて

PHPメモリ使用量と画像サイズの関係 画像ファイル 1GB PHPメモリ使用量 ~100-200MB 1. ファイルアップロード: メモリ使用は一時的で限定的 2. 画像処理: GDやImagickライブラリが使用するメモリは画像サイズに比例 3. サムネイル生成: 元画像のサイズに関わらず、出力サイズに応じたメモリ使用 4. メタデータ処理: 画像サイズに関わらず、ほぼ一定のメモリ使用 5. 全体的なメモリ使用: 画像サイズより処理内容に大きく依存

対策

  • memory_limit をさらに増やす(例: 256M や 512M)
  • ページビルダーやエディタの設定を確認し、大量の要素を扱う際の最適化オプションがないか確認
  • 画像の最適化: 画像サイズを小さくすることでメモリ消費を抑える
  • ページを分割: 1ページに配置する画像数を減らし、複数ページに分ける

WordPressのメディアライブラリから画像を削除する際のデータベースへの影響

正常な削除プロセス:

  • WordPressの管理画面からメディアを適切に削除した場合、以下の処理が行われます:
    • サーバー上の画像ファイルが削除されます。
    • データベースの wp_posts テーブルから該当する画像のエントリが削除されます。
    • 関連する wp_postmeta テーブルのメタデータも削除されます。

データベースへの影響:

  • 正しく削除された場合、データベースにデータが蓄積されることはありません。
  • ただし、以下のような場合にデータが残る可能性があります:
    • プラグインの干渉により完全な削除が妨げられた場合
    • サーバーの権限設定により一部の削除操作が失敗した場合
    • 大量の画像を一度に削除する際にタイムアウトが発生した場合

潜在的な問題:

  • 不完全な削除によりデータベースに「ゴミデータ」が蓄積される可能性があります。
  • これにより、以下のような問題が生じる可能性があります:
    • データベースサイズの不必要な増大
    • クエリのパフォーマンス低下
    • 管理画面での表示の不整合

対策と推奨事項:

  • 定期的なデータベース最適化:
    • プラグイン(例:WP-Optimize, Advanced Database Cleaner)を使用してDBをクリーンアップ
    • 不要なリビジョン、自動下書き、ゴミ箱内のアイテムを定期的に削除
  • 大量削除時の注意:
    • 一度に少量ずつ削除を行う
    • メンテナンスモードを有効にしてから大規模な削除を行う
  • ファイルシステムとデータベースの整合性チェック:
    • 定期的にメディアファイルとデータベースの整合性をチェックするプラグインや スクリプトを使用

パフォーマンスへの影響:

  • 毎年1000枚程度の画像を入れ替える程度であれば、適切に管理されている限り 大きな問題にはならないでしょう。
  • ただし、削除操作中は一時的にサーバーの負荷が上がる可能性があるため、 サイトのトラフィックが少ない時間帯に実施することをお勧めします。
WordPressメディア削除とデータベースへの影響 メディアライブラリ 画像ファイル削除 ファイルシステムから削除 データベース 関連レコード削除 wp_posts, wp_postmeta から削除 1. 適切な削除: ファイルとDBレコードの両方が削除される 2. 不完全な削除: DBにゴミデータが残る可能性 3. 定期的なクリーンアップ: DB最適化が推奨される 4. 大量削除の影響: パフォーマンスに一時的な影響あり