WordPressで長文の投稿をすると、途中で消えたり投稿内容が空白になる

運用しているサーバーでWordpressを利用する顧客より、投稿しているブログの記事に記事を追加したら途中で記事が消えたり全て反映しなかったり、ブロックでその内容を確認すると真っ白になると申告がありました

DB内のデータが整合性がおかしくなったと思い、以前のリビジョンに戻しても結果は変わりません

DBの問題ではなく文字数が多く投稿すると内部的にクラッシュしてデータが途中で切れたり、真っ白になっていると思い、文字数に関する設定を見直し文字数が多くても投稿できるように「php.ini」から変更しました

php.ini の編集

$ sudo vim /etc/php.ini
# メモリ関連もついでに変更
memory_limit = 512M
post_max_size = 256M
max_execution_time = 30

# 長文でも制限されないように文字数関連の設定を見直し
pcre.backtrack_limit=1000000
pcre.recursion_limit=1000000
max_input_vars = 5000

その後、設定を再読込するため、httpd, php-fpmを再起動。httpdの再起動は要らないはずだが念の為に実施

$ sudo systemctl restart php-fpm.service
$ sudo systemctl restart httpd.service

変更したパラメータの詳細

max_input_vars = 5000

  • 意味: 画面からサーバーへ一度に送信できる「データのパーツ数」の上限を、初期値の5,000個に変更
  • 役割: WordPressのブロックエディタは、文字数が多くなると「文字」だけでなく「ブロックごとのデザイン情報(色、配置など)」を大量のパーツに分けてサーバーに送信します。長文でも大丈夫なように、5,000個に増やしたことで、長文に対応するようにする

pcre.backtrack_limit = 1000000

  • 意味: サーバーのプログラム(PHP)が、文章をチェックする時に「文字を遡って探す回数(バックトラック)」の上限を100万回に指定する設定

pcre.recursion_limit = 1000000

  • 意味: 複雑な文章の構造を解析する際の「処理の深さ(繰り返し回数)」の上限を100万回に指定する設定
  • 役割: 上記の「バックトラック」とセットで動く安全装置です。これも初期値(通常は10万〜100万)より極端に小さくしてしまうと、長文の解析中にプログラムが途中で諦めてフリーズする原因になります。基本的にはバックトラックの数値と合わせて引き上げておく(例:10000000)と安全です。

\ 最新情報をチェック /

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です