作業環境の php.ini を本番に合わせる:XAMPP をエックスサーバーの値にそろえる

広告WordPress・PHP を学べる本

Amazonのアソシエイトとして、WordPress functions.phpは適格販売により収入を得ています。

作業環境は、なるべく本番に近づけておく

管理しているサイトで、作業環境(XAMPP)を使って テーマのページビルダーの記事を直していたときのことです。部品が多い記事を保存すると、一部の部品が保存されずに消えてしまい、本番では起きない動きになることがありました。作業環境と本番で動きが違うと、検証で見つけたいことを見落としたり、本番にない問題を追いかけたりしてしまいます。

作業環境は、なるべく本番に近い設定にしておくほうが、検証のときに問題を見つけやすくなります。そこで今回は、PHP の設定(php.ini)の値を、本番のエックスサーバーと同じにそろえました。

原因の 1 つは max_input_vars

調べてみると、作業環境の php.ini の値が、本番より小さいものがいくつかありました。なかでも影響が大きかったのが max_input_vars です。これは 1 回の送信で PHP が受け取る入力の数の上限で、上限をこえた分は捨てられてしまいます。

ページビルダーは、部品ごとに多くの入力欄を送ります。部品が多い記事ほど入力の数がふえるので、上限が小さい作業環境では、後ろのほうの部品が保存されないことになります。エラーの画面は出ないため、気づきにくいところです。

合わせた値

本番の値は、エックスサーバーのサーバーパネルの「php.ini 設定」で見られます。そこに出ている値に合わせて、作業環境の php.ini を次のようにしました。

設定 合わせた値 意味
max_input_vars 10000 1 回の送信で受け取る入力の数の上限
memory_limit 1G 1 回の処理で使えるメモリの上限
post_max_size 1G 送信できるデータ全体の大きさの上限
upload_max_filesize 1G アップロードできる 1 ファイルの大きさの上限
max_input_time -1 送られたデータを受け取るのにかけてよい時間(-1 は制限なし)

手順

1. 本番の値を見る

サーバーパネルの「php.ini 設定」を開き、対象のドメインの値をメモしておきます。PHP のバージョンを切り替えている場合は、本番で使っているバージョンの値を見るようにします。

2. 作業環境の php.ini をバックアップしてから書き換える

XAMPP の php.ini は、ふつう C:\xampp\php\php.ini にあります。書き換える前に、同じフォルダに php.ini.before-日付 のような名前でコピーしておくと、うまく動かなかったときにすぐ戻せます。

コマンドプロンプトでバックアップを作る
copy C:\xampp\php\php.ini C:\xampp\php\php.ini.before-YYYYMMDD

バックアップができたら、php.ini の該当する行を書き換えます。行の頭に ; が付いているときはコメントになっているので、; を外してから値を入れます。

C:\xampp\php\php.ini(書き換えた行)
max_input_vars = 10000
memory_limit = 1G
post_max_size = 1G
upload_max_filesize = 1G
max_input_time = -1
書き方 役目
max_input_vars = 10000 ページビルダーの部品が多くても、入力が捨てられないようにする
post_max_size = 1G upload_max_filesize と同じか、それより大きくしておく
max_input_time = -1 大きなデータを受け取るときに、時間切れで止まらないようにする

気をつけたいのが、ファイルの改行です。XAMPP の php.ini は改行が CRLF になっていることがあり、sed コマンドの -i などでその場で書き換えると、改行が LF に変わってしまう場合があります。PHP は読めても、ファイル全体に差分が出て、あとで見比べにくくなります。改行を保ったまま書き換えられるエディタで直すのが安全です。

3. Apache を再起動する

php.ini は Apache の起動のときに読まれるので、書き換えただけでは反映されません。XAMPP のコントロールパネルで Apache を Stop してから Start し直します。

4. 値が変わったかを確かめる

確かめ方は 2 つあります。1 つは、phpinfo() を出すページを作業環境に置いて、ブラウザで開く方法です。もう 1 つは、ini_get() で値だけを出す方法で、こちらは表示が短く、見比べやすくなります。

check-ini.php(作業環境だけに置く検証用スクリプト)
<?php
$keys = array( 'max_input_vars', 'memory_limit', 'post_max_size', 'upload_max_filesize', 'max_input_time' );
foreach ( $keys as $key ) {
    echo $key . ' = ' . ini_get( $key ) . PHP_EOL;
}
書き方 役目
$keys 確かめたい設定の名前を並べる
ini_get( $key ) いま PHP が使っている値を取り出す
PHP_EOL 1 つずつ改行して出す

ブラウザで開くと、Apache の PHP が読んでいる値が出ます。合わせた値になっていれば完了で、確かめ終えたら、このファイルは消しておきます。phpinfo() のページも、サーバーの情報が多く出るので、置きっぱなしにしないようにします。

気をつけること

  • XAMPP では、コマンドラインの PHP と Apache の PHP が同じ php.ini を読むことが多いですが、環境によっては別のファイルを読むこともあります。ブラウザで開いて確かめると確実です
  • 本番の値は、サーバーパネルで変えられます。本番の値を変えたときは、作業環境の php.ini もあわせて直しておきます
  • 作業環境だけ値を大きくしすぎると、本番で起きる問題を見落とします。大きくするのではなく、本番と同じにするのが目的です

まとめ

  • 作業環境を本番に近づけておくと、検証のときに問題を見つけやすい
  • ページビルダーの部品が保存されないときは、max_input_vars の上限をうたがう
  • 本番の値はサーバーパネルの「php.ini 設定」で見て、作業環境の php.ini をバックアップしてから同じ値にする
  • 改行を変えないように、エディタで書き換える。Apache を再起動して、phpinfo() か ini_get() で確かめる

参考

関連機能

  1. WP Mail SMTP プラグインのDMARC警告対応について ( エックスサーバー )

  2. WordPress で使っていない大きさの画像を探して安全に消す(これから作らせない設定つき)

  3. エックスサーバーにPoderosaでSSH接続をするための認証鍵設定(ポデローザ)

サイドバー

よく使うカスタマイズ

最近の記事

Profile

PAGE TOP