While the manual says that the file specified by auto_prepend_file is included as if it were called by include(), in fact the file is included as if it were called by require().
In other words, if PHP cannot find the file that you specify with auto_prepend_file, it will throw a fatal error.
このリストには、PHPを設定する際に使用可能なコア php.ini ディレクティブが 含まれています。拡張モジュールにより処理されるディレクティブは、それぞれの 拡張モジュールのドキュメントページにリストと詳細が記述されています。 例えば、セッション用ディレクティブに関する情報は、 セッションのページにあります。
表 I.4. 言語およびその他の設定オプション
| 名前 | デフォルト | 変更の可否 | 変更履歴 |
|---|---|---|---|
| short_open_tag | On | PHP_INI_PERDIR | PHP <= 4.0.0 で PHP_INI_ALL |
| asp_tags | "0" | PHP_INI_PERDIR | PHP <= 4.0.0 で PHP_INI_ALL |
| precision | "14" | PHP_INI_ALL | |
| y2k_compliance | "1" | PHP_INI_ALL | |
| allow_call_time_pass_reference | "1" | PHP_INI_SYSTEM|PHP_INI_PERDIR | PHP <= 4.0.0 で PHP_INI_ALL |
| expose_php | "1" | php.ini のみ | |
| zend.ze1_compatibility_mode | "0" | PHP_INI_ALL | PHP 5.0.0 以降で利用可能 |
以下に設定ディレクティブに関する 簡単な説明を示します。
- short_open_tag boolean
PHP タグの短縮型 (
<? ?>) を使用 可能にするかどうかを設定します。PHPをXMLと組み合わせて用いる 場合は、<?xml ?>をファイル中で用 いるためにこのオプションをオフにする必要があります。オンにし た場合にPHPでXMLを出力するには、例えば、次のようにします。<?php echo '<?xml version="1.0"'; ?>これをオフにした場合、長い方の形式のタグ (<?php ?>)を使用する必要があります。注意: このディレクティブは、
<? echoと同じ形式の ショートカット<?=も影響を受けます。 このショートカットを使用するには、short_open_tagをonとする 必要があります。- asp_tags boolean
ASP 形式のタグ <% %> を通常のタグ <?php ?> に加えて使用可能にします。 このスイッチにより、出力の短縮形 <%= $value %> も 使用できるようになります。 詳細な情報は、 HTML からのエスケープを参照ください。
注意: ASP形式のタグは3.0.4で追加されました。
- precision integer
- 浮動小数点数に関して表示される最大桁数を指定します。
- y2k_compliance boolean
- 2000年問題対応を強制します (2000年問題非対応のブラウザにおいて、 問題が発生する可能性があります)。
- allow_call_time_pass_reference boolean
関数のコール時に引数が参照で渡された場合に、警告するかどうかを 設定します。この機能は過去のものであり、将来のバージョンの PHP/Zend ではサポートされない可能性があります。 推奨される方法は、関数宣言時に参照渡しとするべき引数を指定する ことです。将来のバージョンでの動作を保障するために、この オプションを off とし、スクリプトがこの状態で正しく動作することを 確認することが推奨されます (この機能を使用する度に警告が発生します)。
関数コール時に参照で引数を渡すことは、コードの明解さを損なうために 廃止されています。関数は、引数が参照渡しであると宣言されて いない場合でも、文書化されていない方法で、その引数を修正できます。 副作用を回避するためには、どの引数を参照渡しとするかを関数宣言でのみ 指定すると良いでしょう。
参照に関する説明も 参照ください。
- expose_php boolean
(例えば、Web サーバヘッダに PHP のサインを追加することにより、) PHP がサーバにインストールされていることを表示するかどうかを 指定します。これは全くセキュリティ上の脅威ではなく、サーバ上 で PHP を使用しているかどうかを調べられるようにするものです。
- zend.ze1_compatibility_mode boolean
Zend Engine 1 (PHP 4) との互換モードを有効にします。 この設定は、オブジェクトのコピー、キャスト (プロパティを 保持しないオブジェクトが FALSE あるいは 0 のいずれになるか)、 そして 比較 に影響を与えます。このモードの場合、オブジェクトを渡す際の デフォルトの方法は、参照渡しではなく値渡しとなります。
PHP 4 から PHP 5 への移行というタイトルの セクションも参照してください。
以下に設定ディレクティブに関する 簡単な説明を示します。
- memory_limit integer
スクリプトが確保できる最大メモリをバイト数で指定します。この命令は、 正しく書かれていないスクリプトがサーバーのメモリを食いつぶすことを防止するのに役立ちます。 もし、使用可能メモリに制限を設けたくない場合は、 ここに -1 を指定してください。
PHP 5.2.1 より前のバージョンでは、このディレクティブを使うためには、 コンパイル時に configure で --enable-memory-limit を指定しなければなりません。 これは、関数 memory_get_usage() および memory_get_peak_usage() を使用する際にも必要となります。
integerを使用する際、 その値はバイト単位で測られます。 この FAQ に記載された 短縮表記を使用することも可能です。
max_execution_time も参照ください。
表 I.6. パフォーマンスチューニング
| 名前 | デフォルト | 変更の可否 | 変更履歴 |
|---|---|---|---|
| realpath_cache_size | "16K" | PHP_INI_SYSTEM | PHP 5.1.0 以降で使用可能。 |
| realpath_cache_ttl | "120" | PHP_INI_SYSTEM | PHP 5.1.0 以降で使用可能。 |
以下に設定ディレクティブに関する 簡単な説明を示します。
表 I.7. データ処理設定オプション
| 名前 | デフォルト | 変更の可否 | 変更履歴 |
|---|---|---|---|
| track_vars | "On" | PHP_INI_?? | |
| arg_separator.output | "&" | PHP_INI_ALL | PHP 4.0.5 以降で利用可能 |
| arg_separator.input | "&" | PHP_INI_SYSTEM|PHP_INI_PERDIR | PHP 4.0.5 以降で利用可能 |
| variables_order | "EGPCS" | PHP_INI_PERDIR | PHP <= 5.0.5 では PHP_INI_ALL。 |
| auto_globals_jit | "1" | PHP_INI_PERDIR | PHP 5.0.0 以降で利用可能 |
| register_globals | "0" | PHP_INI_PERDIR | PHP <= 4.2.3 では PHP_INI_ALL |
| register_argc_argv | "1" | PHP_INI_PERDIR | PHP <= 4.2.3 では PHP_INI_ALL |
| register_long_arrays | "1" | PHP_INI_PERDIR | PHP <= 4.2.3 では PHP_INI_ALL |
| post_max_size | "8M" | PHP_INI_PERDIR | PHP <= 4.2.3 では PHP_INI_SYS。PHP 4.0.3 以降で利用可能 |
| gpc_order | "GPC" | PHP_INI_ALL | |
| auto_prepend_file | "" | PHP_INI_PERDIR | PHP <= 4.2.3 では PHP_INI_ALL |
| auto_append_file | "" | PHP_INI_PERDIR | PHP <= 4.2.3 では PHP_INI_ALL |
| default_mimetype | "text/html" | PHP_INI_ALL | |
| default_charset | "iso-8859-1" | PHP_INI_ALL | |
| always_populate_raw_post_data | "0" | PHP_INI_PERDIR | PHP <= 4.2.3 では PHP_INI_ALL。PHP 4.1.0 以降で利用可能 |
| allow_webdav_methods | "0" | PHP_INI_PERDIR |
以下に設定ディレクティブに関する 簡単な説明を示します。
- track_vars boolean
サーバ変数はそれぞれ、グローバル連想配列 $_ENV, $_GET, $_POST, $_COOKIE, $_SERVERで参照することができます。
PHP 4.0.3 以降,
track_varsは常にonとなっている ことに注意してください。- arg_separator.output string
PHPがURLを生成する際にURL引数を区分するために使用されるセパレータ。
- arg_separator.input string
入力されたURLを変数にパースする際にPHPが使用するセパレータのリスト。
注意: このディレクティブで指定した全ての文字はセパレータとして認識 されます!
- variables_order string
EGPCS (Environment (環境変数)、 Get、Post、 Cookie (クッキー)、そして Server) 変数のパースの順番を設定します。例えば variables_order を "SP" に設定すると、PHP は superglobals $_SERVER および $_POST を作成しますが、 $_ENV、$_GET および $_COOKIE は作成しません。"" に設定すると、一切 superglobals を設定しません。
非推奨のディレクティブ register_globals が on になっていると (これは PHP 6 で廃止される予定です)、 variables_order の設定は、 ENV、 GET、POST、 COOKIE および SERVER の各変数がグローバルスコープに取り込まれる順番も左右します。 つまり、たとえば variables_order が "EGPCS" で register_globals が有効になっていたとすると、 $_GET['action'] と $_POST['action'] が両方設定された場合の $action の値は $_POST['action'] の内容になります。 これは、この例におけるディレクティブの設定で P が G より後になっているからです。
注意: $_REQUEST の内容や順序も、このディレクティブの影響を受けます。
- auto_globals_jit boolean
有効にした場合、SERVER および ENV 変数はスクリプトの開始時ではなく、 最初に使用された時 (Just In Time) に作成されるようになります。 これらの変数がスクリプトの中で使用されない場合、 このディレクティブを使用することで性能が向上します。
このディレクティブを有効にするには、PHP ディレクティブ register_globals, register_long_arrays, および register_argc_argv を無効にしておく必要があります。PHP 5.1.3 以降では、 register_argc_argv を無効にする必要はありません。
- register_globals boolean
EGPCS(Environment, GET, POST, Cookie, Server)変数を グローバル変数として登録するかどうかを指定します。
» PHP 4.2.0 以降、 このディレクティブのデフォルトは、offです。
関連する情報については、セキュリティの章の register_globalsの使用 を参照してください。
register_globalsは、 (ini_set()で)実行時に設定することができないことに 注意してください。しかし、前記のようにホストが許可している場合には、 .htaccess を使用することができます。 .htaccess エントリの例を以下に示します。php_flag register_globals off注意:
register_globalsは、 variables_order ディレクティブの影響を受けます。このディレクティブは PHP 6.0.0 で削除されました。
- register_argc_argv boolean
PHPが変数argvとargcを宣言するかどうかを指定します (これらにはGETの情報が格納されます)。
コマンドライン も参照ください。このディレクティブはPHP 4.0.0で 追加されました。以前のバージョンでは常に"on"です。
- register_long_arrays boolean
PHP が、$HTTP_*_VARS のような古い長い 定義済みの変数 を登録するかどうかを指定します。 On (デフォルト) とした場合、$HTTP_GET_VARS のような 定義済みの長い PHP 変数が定義されます。 これらの変数を使用していない場合には、性能面からこのオプションを off とすることが推奨されています。 かわりに $_GET のようなスーパーグローバル変数を使用してください。
このディレクティブは PHP 5.0.0 で利用可能となりました。 その後 PHP 6.0.0 で削除されました。
- post_max_size integer
POSTデータに許可される最大サイズを設定します。この設定は、ファ イルアップロードにも影響します。大きなファイルをアップロード するには、この値を upload_max_filesize より大きく設定する必要があります。
configureスクリプトでメモリ制限を有効とした場合、memory_limitも ファイルアップロードに影響します。一般的に memory_limit は、 post_max_sizeよりも大きく する必要があります。
integerを使用する際、 その値はバイト単位で測られます。 この FAQ に記載された 短縮表記を使用することも可能です。
POSTデータの大きさが、post_max_sizeより大きい場合、 $_POST と $_FILES superglobals は空になります。この事象は、いくつかの方法で検出することができます。 例えば、$_GET 変数をデータを <form action="edit.php?processed=1">のように 処理するスクリプトに渡し、 $_GET['processed'] が設定されているかどうかを 確認する方法があります。
- gpc_order string
GET/POST/COOKIE 変数処理の順番を設定します。この命令の デフォルトの設定は、"GPC"です。例えば、これを"GP"にPHPはクッキーを 完全に無視し、GETメソッド変数を同名のPOSTメソッド変数で上書き します。
注意: このオプションは、PHP 4では利用できません。 代わりに、variables_order を使用してください。
- auto_prepend_file string
メインファイルの前に自動的に付加されるファイルの名前を 指定します。 このファイルは、include() 関数のコール時 と同様に読み込まれます。 このため、include_path が使用されます。
特別な値
noneを指 定すると、ファイルを前に追加する機能は無効となります。- auto_append_file string
メインファイルの後に自動的に追加されるファイルの 名前を指定します。 このファイルは、include() 関数のコール時と同様に 読み込まれます。 このため、include_path が使用されます。
noneを値として 指定するとこの自動付加機能はオフとなります。注意: スクリプトが exit() で終了する場合、 この自動付加機能は使用されません 。
- default_mimetype string
- default_charset string
4.0.0 以降、PHP は、デフォルトで常にContent-type:ヘッダで character encodingを出力するようになっています。charsetの送信 を無効にするには、これを空にしてください。
- always_populate_raw_post_data boolean
常に $HTTP_RAW_POST_DATA にアクセス可能とします。 この変数には生の POST データが格納されています。指定しなかった場合は、 データの MIME 型が判別できない場合のみこの変数にアクセス可能となります。 しかし、生の POST データにアクセスする方法としては php://input のほうが推奨されます。 $HTTP_RAW_POST_DATA は、 enctype="multipart/form-data" の場合には無効です。
- allow_webdav_methods boolean
PHPスクリプトの中で WebDAV http リクエスト (例:PROPFIND, PROPPATCH, MOVE, COPY, 等..) の処理を可能にします。 このディレクティブは、PHP 4.3.2 以降存在しません。 これらのリクエストのPOSTデータを取得したい場合、 always_populate_raw_post_data も同時に設定する必要があ ります。
magic_quotes_gpc, magic-quotes-runtime, および magic_quotes_sybase も参照ください。
表 I.8. パスおよびディレクトリ設定オプション
| 名前 | デフォルト | 変更の可否 | 変更履歴 |
|---|---|---|---|
| include_path | ".;/path/to/php/pear" | PHP_INI_ALL | |
| doc_root | NULL | PHP_INI_SYSTEM | |
| user_dir | NULL | PHP_INI_SYSTEM | |
| extension_dir | "/path/to/php" | PHP_INI_SYSTEM | |
| extension | NULL | php.ini のみ | |
| cgi.check_shebang_line | "1" | PHP_INI_SYSTEM | PHP 5.2.0 以降で利用可能。 |
| cgi.fix_pathinfo | "1" | PHP_INI_ALL | PHP 4.3.0 以降で利用可能。 |
| cgi.force_redirect | "1" | PHP_INI_ALL | PHP 4.2.0 以降で利用可能。 |
| cgi.redirect_status_env | NULL | PHP_INI_ALL | PHP 4.2.0 以降で利用可能。 |
| fastcgi.impersonate | "0" | PHP_INI_ALL | PHP 4.3.0 以降で利用可能。 |
| cgi.rfc2616_headers | "0" | PHP_INI_ALL | PHP 4.3.0 以降で利用可能。 |
以下に設定ディレクティブに関する 簡単な説明を示します。
- include_path string
require()、include()、 fopen()、file()、 readfile() および file_get_contents() 関数がファイルを 探すディレクトリのリストを指定します。フォーマットは、システ ムの環境変数
PATHと同じです。つまり、UNIXでは コロンで、Windowsではセミコロンで区切ったディレクトリのリスト で指定します。
このディレクティブのデフォルト値は、.(カレ ントディレクトリのみ)です。
- doc_root string
サーバーにおけるPHPの"ルートディレクトリ"です。この値は空で無 い場合のみ使用されます。PHPが セーフモード で設定されている場合には、 このディレクトリの外側にあるファイルは使用されません。 PHPがFORCE_REDIRECTを指定してコンパイルされていない場合、 (IIS以外の)WebサーバのもとでCGIとしてPHPを実行する際には、 doc_rootを指定するべきです。 他の方法としては、後述の cgi.force_redirect 設定の使用があります。
- user_dir string
PHPファイル用にユーザーのホームディレクトリ として使用する基本ディレクトリの名前。例えば、 public_html となります。
- extension_dir string
- extension string
PHP の開始時に、どの動的ロード可能な拡張モジュールをロードするかを指定します。
- cgi.check_shebang_line boolean
CGI 版の PHP が、実行するスクリプトの先頭にある #! から始まる行 (shebang) をチェックするかどうかを指定します。 同じスクリプトをスタンドアロンと PHP CGI 経由の両方で使用したい場合などに、 この行が必要になるでしょう。このディレクティブを on にしておくと、 CGI 版の PHP はこの行の内容を読み飛ばすようになります。
- cgi.fix_pathinfo boolean
本来の PATH_INFO/PATH_TRANSLATED サポートをCGIで提供します。 PHPの以前の動作は、 SCRIPT_FILENAMEにPATH_TRANSLATEDを設定するというもので、 PATH_INFOの定義を理解していませんんでした。 PATH_INFOに関する詳細については、cgiの仕様を参照してください。 このオプションを1にすることにより、 PHP CGIはこのパスを仕様にあうように修正します。 ゼロとすると、 PHPは以前と同様に動作します。デフォルトは、ゼロです。 PATH_TRANSLATEDではなく、SCRIPT_FILENAMEを使用するようにスクリプト を修正する必要があります。
- cgi.force_redirect boolean
cgi.force_redirect は、ほとんどのWebサーバのもとで CGI として PHP を実行する際のセキュリティを確保するために必要です。 未定義のままの場合、PHPはデフォルトでこれを on にします。 これを off にする時は、自己責任 の下に 行なってください。
注意: Windowsユーザ: IISでは安全にこれをoffにすることができ、 実際には、off にすることが「必要」です。 OmniHTTPD または Xitami を動作させるには、これを off にする「必要」 があります。
- cgi.redirect_status_env string
cgi.force_redirect を on にし、Apache または Netscape (iPlanet) Webサーバのもとで実行していない場合、 実行を継続して良いかどうかをPHPが判断するために 環境変数の名前を設定する必要があるかもしれません。
注意: この変数を設定することにより、セキュリティ上の問題を発生する 場合があります。行うことのリスクをまず把握してください。
- fastcgi.impersonate string
IIS (または WINNT ベースの OS) のもとでの FastCGI は、 クライアントをコールする際にセキュリティトークンを 匿名化する機能をサポートしています。 これにより、IIS がリクエストを処理するセキュリティコンテキストを 定義できるようになります。Apacheのもとで実行される mod_fastcgi は現在 (2002/03/17) この機能をサポートしていません。 IIS のもとで実行するには、1 に設定してください。 デフォルトは 0 です。
- cgi.rfc2616_headers int
PHP に、HTTP レスポンスを返す際に、どの形式のヘッダーを使うか 指示します。0 にセットした場合は、Apache やその他の web サーバで サポートされている Status: ヘッダーを送信します。このオプションの値を 1 にセットした場合は、PHP は » RFC 2616 の仕様に適合した形式のヘッダーを送信します。この意味がわからないときは、 0 のままにしておいてください。
表 I.9. ファイルアップロード設定オプション
| 名前 | デフォルト | 変更の可否 | 変更履歴 |
|---|---|---|---|
| file_uploads | "1" | PHP_INI_SYSTEM | PHP <= 4.2.3 では PHP_INI_ALL、PHP 4.0.3 以降で利用可能 |
| upload_tmp_dir | NULL | PHP_INI_SYSTEM | |
| upload_max_filesize | "2M" | PHP_INI_PERDIR | PHP <= 4.2.3 では PHP_INI_ALL |
以下に設定ディレクティブに関する 簡単な説明を示します。
- file_uploads boolean
HTTP ファイルアップロード を有効とするかどうか。 upload_max_filesize, upload_tmp_dir, post_max_size ディレクティブも参照ください。
integerを使用する際、 その値はバイト単位で測られます。 この FAQ に記載された 短縮表記を使用することも可能です。
- upload_tmp_dir string
ファイルアップロード時にファイル保存に用いるテンポラリディレクトリ。 PHPの実行ユーザーが書きこみ可能である必要が あります。指定されない場合、PHPはシステムのデフォルト設定を 使用します。
- upload_max_filesize integer
アップロードされるファイルの最大サイズ。
integerを使用する際、 その値はバイト単位で測られます。 この FAQ に記載された 短縮表記を使用することも可能です。
以下に設定ディレクティブに関する 簡単な説明を示します。
- sql.safe_mode boolean
オンにすると、デフォルト値が指定されているデータベース接続関数は、 引数で指定された値よりもデフォルト値を優先して使用します。 デフォルト値については、関連するデータベースのドキュメントを参照ください。
PHP 3のみがデフォルトのデバッガを実装しています。 詳細については、付録 G. PHP のデバッグを参照してください。
コア php.ini ディレクティブに関する説明
27-Jun-2007 08:03
26-Dec-2006 08:05
register_long_arrays has a very odd behavior (at least in PHP 5.2):
With register_long_arrays=Off the $GLOBALS array will not contain [_SERVER] and [_REQUEST]. They are accessible as superglobals ($_SERVER, $_REQUEST), but they disappear from the $GLOBALS array!
20-Dec-2006 03:38
to make sure that all requests use SSL you can use this in a file that is set for auto_prepend_file. This ensures that all requests are SSL
<?php
if(empty($_SERVER['HTTPS']) || strtolower($_SERVER['HTTPS']) != 'on' )
header("Location: https://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}") and exit();
?>
24-Jul-2006 11:28
I wish the documentation was more clear as to whether the arg_separator.output character is automatically encoded when PHP outputs it. In other words, is "&" valid or do I need to specify the encoded character "&"? It would make sense to specify only "&" and hope that it is encoded as needed. That way the value could be read by other functions and encoded only when output to HTML, rather than having to test whether it is already encoded and decode it when necessary (for header redirection for example)
30-May-2006 07:45
"If the size of post data is greater than post_max_size..."
It seems that a more elegant way is comparison between post_max_size and $_SERVER['CONTENT_LENGTH']. Please note that the latter includes not only size of uploaded file plus post data but also multipart sequences. Leo
02-Sep-2005 06:55
Starting with PHP 4.4.0 (at least PHP version 4.3.10 did have old, documented behaviour) interpretation of value of "session.save_path" did change in conjunction with "save_mode" and "open_basedir" enabled.
Documented ( http://de.php.net/manual/en/ref.session.php#ini.session.save-path ):
Values of "session.save_path" should or may be **without** ending slash.
For instance:
<?php
// Valid only *before* PHP 4.4.0:
ini_set( "session.save_path", "/var/httpd/kunde/phptmp" );
?> will mean:
The directory "/var/httpd/kunde/phptmp/" will be used to write data and therefore must be writable by the web server.
Starting with PHP 4.4.0 the server complains that "/var/httpd/kunde/" is not writable.
Solution: Add an ending slash in call of ini_set (or probably whereever you set "session.save_path"), e.g.:
<?php
// Note the slash on ".....phptmp/":
ini_set( "session.save_path", "/var/httpd/kunde/phptmp/" );
?>
Hope, that does help someone.
27-Jul-2005 09:02
Warning, if you change upload_max_filesize, please note that both post_max_size and memory_limit directives may have to change too.
27-Jun-2005 10:19
I did a little experimentation on the behaviour of auto_prepend_file as the order of access wasn't clear to me from the documentation.
1. Apache checks to see if the target file exists.
2. The prepend file is called
3. The target file is called
This means that you can use auto_prepend_file to change the target file before you access it however you can't generate new files.
10-Jun-2005 05:05
Please be mindful, that if you plan on re-configuring / recompiling to add --enable-memory-limit support, you may need to run a 'make clean' before you run 'make'. Otherwise, you may end up with a phpinfo() that shows up with --enable-memory-limit as a configure parameter, but the memory_get_usage() function will still force a fatal error.