この記事の最初の部分では、php.ini ファイルの構造を説明し、PHP 検索パス、エラー処理、およびパーサー関連のオプションを変更する方法を説明しました。 2 番目の部分では、PHP 拡張オプションを有効にする方法、PHP スクリプトのリソース制限を設定する方法、PHP スクリプトを使用して構成変数を動的に変更する方法など、構成ファイルについて詳しく説明します。
拡張オプションを有効にする
PHP にはさまざまな拡張オプションが利用可能です。 UNIX システムでは、コンパイル時に拡張オプションを作成する必要があります。Windows では、バイナリ DLL ファイル自体が PHP ディストリビューションに含まれます。変数 extension_dir には、PHP が関連する拡張オプションを検索するディレクトリの名前が含まれています。
extension_dir = "C:Program FilesInternet ToolsApachebinphp4extensions"
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:jdkjrebinhotspotjvm.dll
java.library.path= .
変数 session.save_path は、 save セッション情報に必要な一時ディレクトリ。通常、このディレクトリのデフォルトは /tmp ですが、このデフォルトのディレクトリは Windows システムには存在しないため、正しい Windows 一時ディレクトリにリセットする必要があります。そうしないと、セッション ハンドラーが session_start() 関数を呼び出します。迷惑なエラー メッセージがポップアップ表示されます。同時に、セッション Cookie の有効期間は変数 session.cookie_lifetime を通じて制御できます。
session.save_path = c:windowstemp
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
safe_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 では $email として解釈されます。 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
PHP 5 に max_input_time 変数を追加しました。この変数は、POST、GET、および PUT メソッドを介してデータを受信する時間を秒単位で制限できます。アプリケーションが低速リンクで実行されている場合は、データの受信に必要な追加時間に対応するために、この値を増やす必要がある場合があります。
max_input_time = 90
パフォーマンス チューニング
いくつかの変数値を調整することで、PHP パーサーのパフォーマンスを向上させることもできます。スクリプトの実行によって利用可能なシステム メモリが大量に消費されるのを避けるために、PHP ではメモリ使用量の制限を定義できます。単一のスクリプトが使用できる最大メモリ容量を指定するには、memory_limit 変数を使用します:
memory_limit = 8M
変数memory_limitの値は、post_max_sizeの値より適切に大きくする必要があります。
パフォーマンスを向上させるために使用できるもう 1 つの方法は、変数 $argc と $argv を無効にすることです。これら 2 つの値は、コマンド ラインでアプリケーションに渡されるパラメーターの数と実際のパラメーター値を保存するために使用されます。 。
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 つのパラメーターを受け取ります。たとえば、スクリプトが表示されるときの最大実行時間を増やすには:
ini_set('max_execution_time', 600)
// more code
?>
このような設定は、スクリプトが設定されています。スクリプトの実行が完了すると、変数は自動的に元の値に復元されます。
PHP アプリケーションが共有サーバー上で実行されている場合、メインの php.ini 設定ファイルにアクセスできる可能性はほとんどありません。このとき、関数 ini_set() を使用すると、特別な要件に応じて PHP 構成を動的に変更できるため、非常に便利です。