この記事の最初の部分では、php.ini ファイルの構造を説明し、PHP 検索パス、エラー処理、およびパーサー関連のオプションを変更する方法を説明しました。 2 番目の部分では、PHP 拡張オプションを有効にする方法、PHP スクリプトのリソース制限を設定する方法、PHP スクリプトを使用して構成変数を動的に変更する方法など、構成ファイルについて詳しく説明します。 拡張オプションのアクティブ化 PHP にはさまざまな拡張オプションが使用できます。 UNIX システムでは、コンパイル時に拡張オプションを作成する必要があります。Windows では、バイナリ DLL ファイル自体が PHP ディストリビューションに含まれます。変数 extension_dir には、PHP が関連する拡張オプションを検索するディレクトリの名前が含まれています。 extension_dir = "C:Program FilesInternet ToolsApache inphp4extensions" Windows 上の PHP には 20 の異なる拡張オプションが含まれており、それらはすべて php.ini ファイルにリストされています (コメント経由)。特定の拡張オプションをアクティブにするには、対応する行の先頭からセミコロンを削除し、サーバーを再起動するだけです。拡張オプションを無効にする場合 (たとえば、システムのパフォーマンスを向上させる必要がある場合)、行の先頭にセミコロンを再度追加します。 拡張子オプションが php.ini ファイルにリストされていない場合は、変数拡張子を使用して、対応する DLL ファイル名をこの変数に渡すことができます。 extension=php_domxml.dll extension=php_dbase.dll 拡張機能固有の変数を設定する 拡張機能固有の変数は、構成ファイルの別の領域に保存されます。たとえば、MySQL 拡張機能に関連するすべての変数は、php.ini の [MySQL] 領域に保存する必要があります。 PHP の mail() 関数を使用する必要がある場合は、次の 3 つの変数を設定する必要があります。 PHP mail() 関数を通じて電子メール メッセージを送信する場合は、SMTP と変数 sendmail_from (Windows システム) または変数 sendmail_path (UNIX システム) を使用する必要があります。 Windows の場合、これらの変数は使用する SMTP サーバーと電子メール メッセージに表示される「From:」アドレスを設定します。UNIX の場合、変数 sendmail_path はメール転送用の MTA (メール転送エージェント) のパスを設定します。 SMTP = myserver.localnet.com sendmail_from = me@localhost.com sendmail_path = /usr/sbin/sendmail 変数 java.class.path、java.home、java.library、および java.library.path はすべて、検索の設定に使用されます。 Java クラスの場合とライブラリへのパス。これらの値は Java 拡張機能によって使用されるため、PHP を Java プログラムと正しく統合したい場合は、これらの変数が正しく設定されていることを確認する必要があります。 java.class.path = .php_java.jar java.home = c:jdk java.library = c:jdkjre inhotspotjvm.dll java.library.path= 変数 session.save_path は、セッション情報を保存するために必要な一時ディレクトリを指定します。通常、このディレクトリのデフォルトは /tmp ですが、このデフォルトのディレクトリは Windows システムには存在しないため、正しい Windows 一時ディレクトリにリセットする必要があります。そうしないと、セッション ハンドラーが session_start() 関数を呼び出します。迷惑なエラー メッセージがポップアップ表示されます。同時に、セッション Cookie の有効期間は変数 session.cookie_lifetime を通じて制御できます。 session.save_path = c:windows emp session.cookie_lifetime = 1800 セキュリティ設定 php.ini には、PHP インストールのセキュリティ問題に関連する変数が多数あります。最も興味深いのは、safe_mode 変数です。この変数は、ユーザーによる PHP の使用を制限するため、ISP および共有ホスティング サービスに設定することが推奨されます。 safe_mode = Off セーフ モードがオンになっている場合、変数safe_mode_include_dirを介して関連ファイルを検索するディレクトリを指定できます。バイナリ プログラムを特定のディレクトリに配置し、safe_mode_include_dir 変数を使用してそのディレクトリを PHP に伝えることで、PHP は exec() コマンドを使用して PHP スクリプトを実行できるプログラムの種類を制限します。 exec() コマンドを使用してアクセスできるのは、このディレクトリ内のバイナリ ファイルのみです。 safe_mode_include_dir = /usr/local/lib/php/safe-include safety_mode_exec_dir = /usr/local/lib/php/safe-bin 変数 open_basedir を使用してファイル操作を制限することもできます。この変数は、ファイル操作のルートとしてディレクトリ名を設定します。この変数を設定すると、このディレクトリ ツリーの外に保存されたファイルには PHP からアクセスできなくなります。これは、ユーザーを共有システム上のホーム ディレクトリまたは Web ディレクトリに制限する優れた方法です。 open_basedir = /home/web/ 変数 max_execution_time は、スクリプトを強制終了する前に PHP がスクリプトの完了を待機する時間を設定します。この時間は秒単位で計算されます。この変数は、スクリプトが無限ループに入った場合に役立ちます。ただし、完了までに時間がかかる正当なアクティビティ (大きなファイルのアップロードなど) がある場合、この機能により操作が失敗する可能性もあります。このような場合、重要なプロセスの実行中に PHP がスクリプトをシャットダウンしないように、この変数の値を増やすことを検討する必要があります。 max_execution_time = 90 アップロードについて説明しました。次に、uploads 変数と form 変数を構成する方法を見てみましょう。 ファイルのアップロードとフォーム変数の構成 この記事の前半で説明したセキュリティ構成によって提供されるセキュリティ強度が要件を満たさない場合は、ファイルのアップロードをオフにするか、アップロードごとに最大ファイル サイズ制限を設定することで、セキュリティ強度をさらに向上させることができます。上記の 2 つの関数は、それぞれ変数 file_uploads および Upload_max_filesize を通じて実装されます。一般に、システムにファイルを受信するように設計されたアプリケーション (Web FTP サービスに基づくフォト アルバムなど) がない限り、ファイル サイズの制限を比較的小さい値に設定する必要があります。 file_uploads = On Upload_max_filesize = 2M ファイルのアップロードには興味がないが、PHP アプリケーションで多くのフォームを使用する場合は、非常に興味深い 2 つの変数を次に示します。 1 つ目は変数 register_globals で、PHP 開発者の長年の問題点を解決します。 PHP 3.x では、この変数のデフォルトは On です。こうすることで、フォームの送信時にフォーム変数が自動的に PHP 変数に変換されます。 PHP 4.x では、セキュリティ上の理由から、この変数はデフォルトでオフに設定されています。その結果、フォーム変数には特定の $_GET および $_POST を介してのみアクセスされます。また、これにより、PHP 3.x で書かれた多くのスクリプトに実行時の問題が発生し、開発者はスクリプトを書き直して再テストする必要がありました。たとえば、フォームフィールド に入力された値は、PHP 3.x スクリプトの場合は $email として理解されますが、PHP 4.x スクリプトの場合は $_POST[email] または $_GET[email] として解釈されます。 通常、この変数はオフに設定できます。これにより、フォームを介したスクリプト攻撃に対するより安全な保護が提供されます。以前の PHP 3.x スクリプトとの互換性を考慮する必要がある場合は、オンに設定する必要があります。 register_globals = Off フォーム送信に関連する変数は post_max_size で、PHP が POST メソッドを使用したフォーム送信で受信できるデータの最大量を制御します。デフォルトの 8 MB をより大きなサイズに変更する必要があるとは考えられません。代わりに、より現実的な値に適切に減らす必要があります。ただし、PHP ファイルのアップロード機能を使用する場合は、この値を Upload_max_filesize よりも大きくする必要があります。 post_max_size = 8M max_input_time 変数は PHP 5 で追加されました。この変数は、POST、GET、および PUT メソッドを介してデータを受信する時間を秒単位で制限できます。アプリケーションが低速リンクで実行されている場合は、データの受信に必要な追加時間に対応するために、この値を増やす必要がある場合があります。 max_input_time = 90 パフォーマンスのチューニング いくつかの変数値を調整することによって、PHP パーサーのパフォーマンスを向上させることもできます。スクリプトの実行によって利用可能なシステム メモリが大量に消費されるのを避けるために、PHP ではメモリ使用量の制限を定義できます。単一のスクリプトが使用できる最大メモリ容量を指定するには、memory_limit 変数を使用します。 パフォーマンスを向上させるために使用できるもう 1 つの方法は、変数 $argc および $argv を無効にすることです。これらの変数は、コマンド ラインでアプリケーションに渡される引数の数と実際の引数値を保存するために使用されます。 register_argc_argv = false 同様に、$HTTP_GET_VARS と $HTTP_POST_VARS を無効にすることもできます。これは、$_GET と $_POST が使用されている場合、最初の 2 つのメソッドを現在使用する可能性は低いためです。この機能を無効にするとパフォーマンスが向上する可能性がありますが、これは PHP 5 の変数 register_long_arrays を介してのみ可能です。 register_long_arrays = false function ini_set() 最後に、ini_set() 関数に注意する必要があります。 PHP は、php.ini 構成ファイル内のすべての設定情報を読み取るときに、ini_set() 関数を使用してスクリプトごとの原則に従ってこれらの設定を変更する機能も提供します。この関数は、調整する必要がある構成変数の名前と、変数の新しい値の 2 つのパラメーターを受け取ります。たとえば、スクリプトが表示されるときの最大実行時間を増やすには: このような設定は、設定されているスクリプトにのみ影響します。スクリプトの実行が完了すると、変数は自動的に元の値に復元されます。 PHP アプリケーションが共有サーバー上で実行されている場合は、メインの php.ini 構成ファイルにアクセスできない可能性があります。このとき、関数 ini_set() を使用すると、特別な要件に応じて PHP 構成を動的に変更できるため、非常に便利です。