自分のWordPressで学ぶPHP講座(AIの変更を判定する)

区分4 サーバーと版★★

No.09 .user.iniの危ない値

サーバー設定の値を、AIが書き換えようとした時に見るための単元です。.user.ini に書ける値のうち、サイト全体に効く4つと、本番でよく見落とす値を扱います。出る頻度はときどきですが、1か所の間違いが全ページに出るので、値の意味はしっかり押さえます。
目次
  1. 第0章 前提知識
  2. 第1章 サイト全体に効く4つの値
  3. 第2章 本番で見たら確かめる値
  4. 第3章 変える前と、変えた後
  5. 確認問題

第0章 前提知識

① .user.ini と php.ini  :PHP の動き方を決める設定ファイル

PHP には、動き方を決める設定がたくさんあります。 使えるメモリの量、受け取れるファイルの大きさ、エラーを画面に出すかどうか、といった物です。

この設定を書くファイルが2種類あります。

たとえ話にします。 php.ini は「会社の就業規則」、.user.ini は「部署ごとの決まり」です。部署の決まりは、就業規則で許された範囲で上書きできます。

② 反映は、すぐではありません

.user.ini を書き換えても、その場では変わらないことがあります。 PHP は読み込んだ内容を一定時間覚えておく仕組みで、その初期値が300秒(5分)だからです。

なので、変更した直後に確認して「効いていない」と思っても、数分待ってから見直します。 逆に、AIが「反映されました」と言うのが変更の直後なら、まだ古い値を見ている可能性があります。

③ 書いても効かない値がある

設定の値は、どこで変えられるかが決まっています。 サーバー全体の設定でしか変えられない値を .user.ini に書いても、黙って無視されます。エラーは出ません。

「書いたのに変わらない」という時は、書き方の間違いより先に、そもそも .user.ini で変えられる値なのかを疑います。 変えられる場所は、php.net の設定一覧(ini 設定の一覧表)の「変更可能性」の列で確かめられます。

第1章 サイト全体に効く4つの値

内容は、次の4つです。AIの変更に出てきたら、数字の単位まで読みます。

① memory_limit  :1回のページ表示で使えるメモリの上限 必ず覚える

PHP が1回の処理で使えるメモリの上限です。 「256M」のように、M(メガバイト)をつけて書きます。

小さすぎると、画像の多いページや重いプラグインで「メモリが足りない」というエラーになり、画面が真っ白になります。 一方で、大きくしすぎると、おかしなプログラムが暴走した時にサーバーを使い切ります。

AIが「エラーが出るので 1024M にしました」と言ってきたら、原因を直さずに上限だけ上げていないかを疑います。 上げる前に、どのプラグインやページで足りなくなるのかを聞いてください。

なお、WordPress にもメモリの上限の設定が別にあります。PHP 側を上げても変わらない時は、そちらも見ます。

② post_max_size と upload_max_filesize  :受け取れる大きさの上限 必ず覚える

関係は、post_max_size が upload_max_filesize 以上であることです。 全体の枠が、ファイル1つの枠より小さいと、ファイルの上限を上げても通らなくなります。

AIが片方だけ変えていたら、もう一方との大小を確かめてください。 たとえば upload_max_filesize が 64M で post_max_size が 8M なら、64M のファイルは送れません。

③ max_execution_time  :1回の処理にかけられる秒数 さらっと

PHP が1回の処理に使ってよい時間の上限で、単位は秒です。 長すぎる時間にしておくと、止まらない処理がサーバーを占領し続けます。

大量の記事を一括で書き換えるような処理で足りなくなることがありますが、時間を延ばして解決するのは最後の手段です。 先に、処理を小分けにできないかをAIに聞いてください。

④ display_errors と log_errors  :エラーを、誰に見せるか 必ず覚える

本番サイトでは、display_errors は Off にして、log_errors を On にします。

画面に出るエラーには、サーバーの中のフォルダの場所や、ファイルの名前が入っています。 これは訪問者に見せたくない情報です。攻撃する人にとっては、サイトの作りを知る手がかりになります。

画面に出さなくても、記録には残るので、直す材料は失いません。 AIが原因を調べる時は「画面に出して」ではなく、「記録を見せて」と頼んでください。

開発用の、本番とは別のサイトでは、On にして構いません。 AIが「確認のために一時的に On にしました」と言って、戻し忘れる形が一番多い事故です。戻したかを必ず聞き返します。

第2章 本番で見たら確かめる値

次の値は、AIが .user.ini に足そうとしたり、設定の表示(phpinfo)で見かけたりした時の確認用です。

値 本番の目安 見かけた時に確かめること
display_errors Off On なら画面にエラーが出ている。理由を聞く
log_errors On Off だとエラーの記録が残らず、原因が追えない
allow_url_include Off On だと、外のサイトのコードを読み込める。理由が無ければ NG
allow_url_fopen 理由があれば On 外のサイトのファイルを開ける設定。使うプラグインがあるかを確かめる
expose_php Off On だと、PHP を使っていることが外へ伝わる。大きな害ではないが、Off が無難

この表の allow_url_include と expose_php は、サーバー全体の設定です。 .user.ini に書いても効きません(第0章③)。AIが .user.ini に足してきたら、効かない行を足していると気づけます。 効かせたい時は、レンタルサーバーの管理画面や、事業者の案内に従います。

○ よくある勘違い:.user.ini を直せば、必ず今すぐ変わる → 数分かかることがあります(第0章②)
○ よくある勘違い:エラーが出なくなった=直った → 画面に出さなくなっただけで、記録には残っていることがあります
○ 関係する単元:変更の前後の控えと戻し方は No.06

第3章 変える前と、変えた後

設定の変更は、全ページに効きます。そのため、手順を決めておきます。

① 変更の前:控えを取る 必ず覚える

.user.ini を変える前に、今の中身をコピーして別名で保存します。 ファイルの名前に日付を入れておくと、戻す時に迷いません。

AIに頼むなら、頼み方はこうです。 「変更の前に、今の .user.ini を日付つきで控えて。控えの場所を教えて。戻す手順も書いて」

② 変更の後:表示を確認する 必ず覚える

数分待ってから、次の3つを見ます。

  1. サイトのトップと、記事のページが開く
  2. 管理画面にログインできる
  3. 変えた値が、実際に変わっている(phpinfo か、サイトヘルスの情報で確かめる)

3つ目を飛ばすと、「書いたつもり」と「効いている」の差に気づけません。 確認が済むまで、控えは消しません。

本番は display_errors を Off、log_errors を On。post_max_size は upload_max_filesize 以上。変える前に控えを取り、数分待って表示を確かめる。

確認問題

問1 AIが .user.ini の memory_limit を書き換えたと報告してきました。直後に確認したところ、値が変わっていません。最初に疑うべきことは?

問2 upload_max_filesize が 64M、post_max_size が 8M でした。64M の画像をアップロードできる?

問3 本番サイトの表示に、サーバー内のフォルダの場所が書かれたエラーが出ていました。AIの案として、あなたがOKにできるのは?

問4 AIが .user.ini に「allow_url_include = Off」の1行を足しました。「これで安全になった」と言っています。どう返す?

出典:php.net「.user.ini files」(https://www.php.net/manual/ja/configuration.file.per-user.php)、php.net「php.ini ディレクティブ一覧」(https://www.php.net/manual/ja/ini.list.php)、php.net「エラー処理の設定」(https://www.php.net/manual/ja/errorfunc.configuration.php)、php.net「ファイルアップロード」の設定(https://www.php.net/manual/ja/ini.core.php)、developer.wordpress.org「Debugging in WordPress」(https://developer.wordpress.org/advanced-administration/debug/debug-wordpress/)