PHPの設定 - PHP

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動

概要

ここでは、PHPの基本設定を記載する。(主に、PHPの一般的な動作にのみ関連すること)
拡張機能においては、ここでは記載しない。

一般的な定義に加えて、各セクションには設定に関するキーワードと初期値を記載している。


言語オプション

言語において、最も基本的な動作を決定する。(これらの設定を理解するには、時間が掛かるので注意すること)
他の設定項目については、php.iniファイルをよく読むこと。

engine = On | Off

スコープ : PHP_INI_ALL;
初期値 : On


PHPをApacheモジュールとして実行する場合にのみ役立つ。
ディレクトリごとの設定を使用して、PHPパーサーを有効 / 無効にすることができる。
このオプションをOnのままにすることを推奨する。

short_open_tag = On | Off

スコープ : PHP_INI_PERDIR
初期値 : On


php.iniファイルの分散バージョン(-productionおよび-development)ではOffになっている。
PHPスクリプトコンポーネントは、エスケープ構文で囲まれている。
4つの異なるエスケープ形式があり、そのうちの最も短いものはショートオープンタグと呼ばれ、次のようになっている。

 <?
    echo "いくつかのPHPステートメント";
 ?>


この構文はXMLと共有されているため、特定の環境で問題が発生する可能性がある。
したがって、この特定のフォーマットを無効にするための手段が提供されている。
short_open_tagがOn(有効)の場合は、ショートオープンタグが許可される。
Off(無効)の場合は、ショートオープンタグが使用できない。

Precision = <整数値>

スコープ : PHP_INI_ALL
初期値 : 12(Windows)、14(Linux)


PHPは、整数、浮動小数点、文字列等の様々なデータ型をサポートしている。
精度パラメータは、浮動小数点数表現で表示される有効桁数を指定する。

この値は、Windowsでは12桁、Linuxでは14桁に設定されていることに注意すること。

output_buffering = On | Off | <整数値>

スコープ : PHP_INI_PERDIR
初期値 : 4096


PHPの経験がある設計者は、以下の2つのメッセージを読んだことがあるかもしれない。
"Cannot add header information – headers already sent"
"Oops, php_set_cookie called after header has been sent"

上記のメッセージは、要求元のユーザに返送された後、スクリプトがヘッダを変更しようとしたときに発生する。
一般的には、一部の出力が既にWebブラウザに返送された後、設計者がユーザにCookieを送信しようとした結果である。
これは、ヘッダ(ユーザには表示されないが、Webブラウザによって使用される)であるため、実行できない。(常に出力に先行する)

PHP 4以降、出力バッファリングの概念を導入することにより、この問題の解決策を提供した。
出力バッファリングを有効にする場合、スクリプトが完了した後、全ての出力を1度に送信するようにPHPに指示する。

このように、ヘッダはまだ送信されていないため、その後の変更はスクリプト全体で行うことができる。
output_bufferingをOn(有効)にする場合、出力バッファリングが有効になる。
また、出力バッファに含める最大バイト数に設定することで、出力バッファのサイズを制限することもできる。(出力バッファリングが暗黙的に有効になる)
出力バッファリングを使用しない場合、パフォーマンスがわずかに低下するため、この設定をOff(無効)にする必要がある。

ヘッダの問題に対する最も簡単な解決策は、可能な限り、他のコンテンツの前に情報を渡すことである。

output_handler = <文字列>

スコープ : PHP_INI_PERDIR
初期値 : NULL


要求元のユーザに返す前に、組み込みの出力関数の1つを介して、全ての出力を渡すようにPHPに指示する。
例えば、Webブラウザに返す前に全ての出力を圧縮する場合、以下のように、output_handlerを割り当てる。

output_handler = "ob_gzhandler"


ob_gzhandler()は、PHPの出力制御ライブラリにあるPHPの圧縮ハンドラ関数である。
output_handlerをob_gzhandler()に設定して、zlib.output_compressionをOn(有効)にすることはできない(次のセクションに記載する)
出力圧縮は、一般的に、Webサーバによって処理される。

ただし、一部のWebサーバで問題が発生する可能性がある。

zlib.output_compression = On | Off | <整数値>

スコープ : PHP_INI_ALL
初期値 : Off


zlib.output_compressionをOnに設定すると、自動出力圧縮を有効にできる。

Webブラウザに返される前に出力を圧縮すると、帯域幅と時間を節約できる。
HTTP/1.1機能は、ほとんどの最新のWebブラウザでサポートされており、ほとんどのアプリケーションで安全に使用できる。

また、zlib.output_compressionに整数値を割り当てることにより、出力圧縮を有効にすると同時に、圧縮バッファサイズ(バイト単位)を設定できる。

zlib.output_handler = <文字列>

スコープ : PHP_INI_ALL
初期値 : NULL


zlibライブラリが使用できない場合、zlib.output_handlerに特定の圧縮ライブラリを指定する。

implicit_flush = On | Off

スコープ : PHP_INI_ALL
初期値 : Off


この設定を有効にすると、print()またはecho()を呼び出すたびに、その内容の出力バッファが自動的にクリアまたはフラッシュされて、
埋め込まれた各HTMLブロックが完成する。

これは、サーバが結果をコンパイルする時間や特定の計算を実行する時間が掛かる場合に役立つ。
この時、サーバが処理を完了するまで待つのではなく、この機能を使用してステータスの更新をユーザに出力できる。
ただし、この機能を使用すると、パフォーマンスに影響がある。

可能な限り、短時間で全ての出力を生成してユーザに返すことを推奨する。
また、トラフィックの多いWebサイトの場合、ミリ秒を考える必要がある。

serialize_precision = <整数値>

スコープ : PHP_INI_ALL
初期値 : -1


この設定は、doubleおよびfloatがシリアル化される場合、浮動小数点の後に格納される桁数を決定する。
適切な値に設定することで、後で数値がシリアル化されなくなった時に、精度が失われる可能性がなくなる。

open_basedir = <文字列>

スコープ : PHP_INI_ALL
初期値 : NULL


ApacheのDocumentRootと同様に、この設定は、全てのファイル操作が制限されるベースディレクトリを指定できる。
これにより、ユーザはサーバの制限された領域外に入ることができなくなる。

例えば、全てのWebコンテンツのファイルが/home/wwwディレクトリにある場合、
ユーザがPHPコマンドを介して/etc/passwd等の重要なファイルを操作できないようにするには、
以下のように、open_basedirを設定する。

open_basedir = "/home/www/"


disable_functions = <関数名>

スコープ : php.ini
初期値 : NULL


特定の環境では、exec()やsystem()等の特定のデフォルト関数の使用を禁止したい場合がある。
このような場合、以下のように、disable_functionsを設定する。

disable_functions = "exec, system";


disable_classes = <文字列>

スコープ : php.ini
初期値 : NULL


PHPのクラスライブラリにおいて、利用を禁止したいクラスが存在する場合、
この設定を使用して、特定のクラスの使用を防ぐことができる。

例えば、vectorクラスとgraphクラスの利用を禁止する場合は、以下のように、disable_classesを設定する。

disable_classes = "vector, graph"


ただし、この設定による影響は、safe_modedirectiveの設定に依存しないことに注意すること。

ignore_user_abort = Off | On

スコープ : PHP_INI_ALL
初期値 : Off


サーバが重要なユーザプロファイル情報を更新している時にWebブラウザを終了する場合、その後の動作に悪影響がある。
この設定をOn(有効)にすると、サーバは、Webブラウザの中断によるセッションの終了を無視するようになる。