ホリデープログラミング入門

ホリデーにプログラミングを楽しむための入門 by 船木信宏

全体表示

[ リスト ]

php.iniでよく設定する項目群



PHPには設定ファイルというものがあり、実行時の挙動を制御できるようになっています。
設定可能なリストはマニュアルにあるとおりですがよく設定する項目はそう多くはないのでいくつか挙げてみます。
PHP: php.ini ディレクティブ - Manual

phpinfo()


まずはphpinfo関数を使って、現在のPHPの設定状況を見ます。HTMLで設定内容がずらずらと表示されるかと思います。設定ファイルであるphp.iniの場所も書いてあります。共有サーバの場合はphp.iniを直接編集する権限がないので後述する方法で設定は行うことになります。

さて、よく変更する各設定項目を以下に。

max_execution_time


プログラムを実行できる最大秒数を設定。
たいていのプログラムは1秒もかからずに終了しますが、ときにはデフォルトの30秒以上かかる処理をしたい場合もあります。

PHP: set_time_limit - Manual
この関数でも設定可能。

なお、ここで指定した秒数以上が経過すると
Fatal error: Maximum execution time of 30 seconds exceeded
というエラーが出ます。0を設定すると無制限。

memory_limit


PHPが使用できるメモリ量。max_execution_timeと同様、巨大なデータを扱うときなどに設定します。ただし5.2.1以前のバージョンでは「Configure Command」に「--enable-memory-limit」が書かれているときだけ設定可能です。-1を指定すると無制限。

error_reporting


エラーメッセージが出力されるレベル。E_ALLにして細かいエラーまで出力するレベルにしておくのが基本です。

デフォルトの「E_ALL & ~E_NOTICE」だと

echo $test;
とだけ書いたプログラムを実行したとき、エラーが出ません。
E_ALLにすると
Notice: Undefined variable: test
と定義されていない変数だよ、と教えてくれます。Noticeレベルのエラーは致命的ではないのですが、バグの温床にはなります。エラーが1つも出ない状態を保つのは大切。

以下の関数で設定可能。
PHP: error_reporting - Manual

display_errors


エラーを表示するか否か。リリースするときはOffにして非表示にします。PHPが出力するエラーメッセージはユーザに見せるものではありません。
Offにしたときは次のlog_errorsと組み合わせます。

log_errors


エラーをログに残すか。display_errorsをOffにしたときはこちらをOnにします。エラーは予期せぬときに発生するものなので、ログに残して後から見れるようにしておきます。

RedHat系でApache+PHPの組み合わせだと、/var/log/httpd/error_logに記述されることが多いかもしれません。

共有サーバのときはerror_logで、表示可能なファイルを指定します。

register_globals


いろいろ物議を醸した設定項目。ややこしいことは抜きにOffにします。
詳しいことは以下に載っています。
register_globalsとは - はてなダイアリー

magic_quotes_gpc


GET/POST/COOKIE変数の要素にaddslashes関数を適用した状態にする。
RedHat系でPHPが入っているとデフォルトでOffになっているようですが、確認する必要があるでしょう。若干難しい話ですがマニュアルに詳しく載っています。



include_path


require_onceなどでディレクトリ名をあらかじめ指定。

require_once 'Cache/Lite.php';
と呼び出すとき、実際に呼ばれるのは/usr/share/pear/Cache/Lite.phpだったりします。include_pathに/usr/share/pearが記述されているとその部分を省略できるわけです。

カレントディレクトリとPEARのディレクトリがデフォルトで指定されています。自分で作ったライブラリへのディレクトリを追記することが多いです。

ちなみにこういうディレクトリを指定することを「パスを通す」と言ったりもします。

関数も使えます。
PHP: set_include_path - Manual

session.use_only_cookies


セッションをクッキーでのみ保持する。
Onにする方が安全です。セッションはセキュリティと密接に絡む、難しい部分です。今回は詳しい説明は省きます。

mbstring.language, mbstring.internal_encoding


日本語圏のPHPユーザにとっては重要なマルチバイト文字列関数に関する設定。デフォルトではコメントアウトになっているのを、コメントを外しつつinternal_encodingを適切なものに変えます。

mbstringは設定だけでなく関数自体が「Configure Command」に「--enable-mbstring」があるときだけ使えます。

mb_convert_encoding等々、大いに役立ってくれる関数群です。

php.ini, .htaccess, ini_set()


php.iniを直接編集できるときは編集して、apacheなりを再起動すれば設定が適用されます。直接編集できないときは、.htaccessに
php_flag log_errors On
php_value error_log log/phplog
と書いたりini_set関数を使ったりします。


上に挙げた設定項目はmagic_quotes_gpc以外、ini_setあるいは個別の関数で設定できます。とはいえ、すべてのソースに記述するのは面倒なのでphp.iniに書くか、.htaccessに書いた方が得策でしょう。


php.iniの翻訳版


php.iniは英語でコメントが書かれていますが日本語版もあります。以下はPHP4のphp.iniの翻訳。設定項目自体は5系とそう変わらないはずです。参考になるかと思います。
http://www.net-newbie.com/postgres/php.ini-recommended.txt

php.ini-distとphp.ini-recommendedの違い


ここからはちょっとアドバンス。

PHP本体のソースに付いてくる、php.iniの雛形2つのdiffを取ってみました。5.2.3。
diff php.ini-dist php.ini-recommended

先に挙げた項目にないもののうち、recommendedの方を列挙してみます。

short_open_tag = Off


Offで<?を不許可にする。<?phpだけOK。これをOffにする恩恵は<?から始まるXMLの宣言をPHPのコードと混在させてもエラーにならないことです。Onのときは
<?xml version="1.0" encoding="UTF-8" ?>

<?php echo '<?xml version="1.0" encoding="utf-8" ?>' . "\n"; ?>
などと変な風に記述する必要がありました。

precision = 14


なぜdistが12なのか不明ですが、浮動小数点の有効桁数。

output_buffering = 4096


出力バッファリング。distはOff。ob_startなどに関係してきます。
PHP: 出力制御関数(output control) - Manual

allow_call_time_pass_reference = Off


引数の参照渡しを強制化をオフに。

variables_order = "GPCS"


$_ENVを除く。getenvを変わりに使え、とある。

register_long_arrays = Off


$HTTP_*_VARSを除く。スーパーグローバル変数があるのでそちらを使う。

register_argc_argv = Off


$argc, $argvを除く。ウェブから使うときは2つの変数は不要。

セッション関係


・session.gc_divisor = 1000
・session.bug_compat_42 = 0
・session.hash_bits_per_character = 5
・url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"

主にセキュリティに関する設定項目です。


まとめ


いろいろ設定項目があって大変ですが、めげずにいきたいところです。
たくさんプログラムを書いているうちにここに挙げた項目の設定をどうしようか考える機会が一度ずつは訪れるはずです。

この記事に

閉じる コメント(1)

顔アイコン

はじめまして。そう言っていただけるとこのデザインを作ってくださった方も喜ぶと思います。
Yahoo!オフィシャルブログとして開設した際に、オリジナルの背景を作ってもらいました。

2007/7/29(日) 午後 9:22 [ funaki ] 返信する

コメント投稿

顔アイコン

顔アイコン・表示画像の選択

名前パスワードブログ
絵文字
×
  • オリジナル
  • SoftBank1
  • SoftBank2
  • SoftBank3
  • SoftBank4
  • docomo1
  • docomo2
  • au1
  • au2
  • au3
  • au4
投稿

開く トラックバック(1)


.


みんなの更新記事