概要
php.iniでできる内容を把握しておかないとphp.ini以外で余計な設定をしてしまうというリスクがある。そのため、その内容をまとめておく。
php.iniとは
そもそもの話だが、php.iniとはphpの設定を一手に担うファイルのことである。
どこにあるのか
基本的には「/etc/php.ini」となっているが、設定することもできるので場合によっては違うことも疑う必要がある。
php -r "echo phpinfo();" | grep "php.ini"
いつ読み込まれるのか
これはCGI版とmodule版でおそらく(まだ確かめてないのでそのうち更新)違う。
module版
これはApacheが起動したタイミング。であるため、
後述のとおり、php.iniが変更されるたびにApacheの再起動が必要となる。
CGI版
CGI 版と CLI 版では、スクリプトが呼び出される度に読み込まれる。
これは公式にも書いてある。
CGI版とmodule版で違いはあるのか
またモジュール版のメリットとして、WebサーバーのプロセスでPHPが実行されるため、CGI版に比べて動作速度が高速になるという点がある。
何を設定できるのか
エラー表示の設定を変更
-
error_reportingの設定を変更(513行目あたり)
error_reporting = E_ALL | E_STRICT (開発環境においてはSTRICTを含めたすべてのレポートをさせる) -
display_errorsの設定を変更(530行目あたり)
display_errors = On (エラーがあった際にブラウザなどにエラー内容を表示するように設定) -
log_errorsの設定を変更(551行目あたり)
log_errors = On (エラーログを吐く設定を有効にしておく) -
error_logの設定を変更(636行目あたり)
error_log = /var/log/php.log(phpに関連するエラーログを/var/log/php.logに吐くように設定)
文字コード関連の設定
- default_charset = "UTF-8"
- mbstring.language = Japanese
- mbstring.internal_encoding = UTF-8
- mbstring.encoding_translation = Off
- mbstring.http_input = pass
- mbstring.http_output = pass
- mbstring.detect_order = auto
メモリ管理に関する設定
- memory_limit = 32MB
PHPの1プロセスが利用可能なメモリー容量の設定。 - post_max_size = 16M
POSTのリクエストを受け付ける際の、最大のPOSTリクエストサイズを設定 - upload_max_filesize = 8M
ファイルアップロードを受け付ける際の、最大のファイル受付サイズを設定
セキュリティに関する設定
- expose_php = Off
これがOnだとレスポンスヘッダにPHPのバージョン情報などが露呈してしまう - session.hash_function = 1
セッションID発行のハッシュアルゴリズムをSHA-1(160bit)へ変更, 0だとMD5(128bit)。生成されたハッシュを32桁にしたい場合は、併せてsession.hash_bits_per_character = 5とする - session.entropy_file = /dev/urandom
/dev/urandomが存在するときのみ - session.entropy_length = 32
その他の設定
- short_open_tag = Off
PHPファイルのタグをのみ利用可能と制限( ?>などを使用不可にする) - register_argc_argv = On
バッチのようなコマンドラインプログラムを書く場合は必須の設定 - max_execution_time = 30
PHPプログラムの1つの最大実行時間の設定。これも大きなファイルアップロードや大きいバッチ処理がある場合はプログラム側のini_set()などで随時設定する
変更した設定を読み込み
module版
php.iniでの設定はApacheを再起動することによって再読込されるので、Apacheを再起動します。
service httpd restart
CGI版
CGI 版と CLI 版では、スクリプトが呼び出される度に読み込まれるため、もう一度スクリプトが呼び出すだけで良い。これは公式にも書いてある。
パスを複数設定したい場合
.:/usr/dir/dir2/dir3.:/usr/dir_a/dir_b/dir_b
上記のように「:」(コロン)で区切って記述する。
ソースコードにおける設定内容
set_include_pathメソッドかini_setメソッドを利用することでソースコードからもinclude_pathを設定することができる。
set_include_path
string set_include_path ( string $new_include_path )
成功した場合には追加したinclude_pathの値
失敗した場合にはFALSEを返す
ini_set
ini_set('include_path', '/usr/lib/pear');
まとめ
上記でPHPをインストールし、開発環境として利用する上での最小限の設定は完了です。
詳細な設定内容についてはより調べていただくか、『パーフェクトPHP』の12章などに詳しいので、参考にしてみてください。