サイトごとに php.ini ディレクティブを設定する
P粉283559033
2023-08-28 00:20:14
<p>Ubuntu サーバー上の Apache2 と PHP で複数のサイトを実行しています。 PHP には、 <code>upload_max_filesize</code> 、 <code>max_file_uploads</code> 、 <code>upload_tmp_dir</code> などの値を設定できる php.ini ファイルがあることは知っています。ただし、これにより、1 つの値がすべてのサイトに適用されます。 </p>
<p>各サイトにディレクティブを設定するにはどうすればよいですか?例: <code>sitea.com</code> の <code>upload_max_filesize</code> を 50M に設定し、<code>siteb.com<の <code>upload_max_filesize</ を設定したいとします。 ;/code>code> は 5M に設定されます。 </p>
<p>同様に、サイトごとに一意の <code>session.name</code> を設定したいと思います。どうすればこれを達成できるでしょうか? <code>PHP_INI_USER</code>、<code>PHP_INI_PERDIR</code>、<code>PHP_INI_SYSTEM</code>、<code>PHP_INI_ALL</code>というものがあると読みました。では、どうすればよいですか私がやる? </p>
Mike 'Pomax' Kamermans からの明示的なコメント は、これを行う方法を説明しています。ただし、PHP のマニュアルドキュメントは少し不快な場合があります。
他の回答についてもいくつか説明します:
PHP パーサー ファイル (Lajos Arpad で説明) を使用すると、いくつかのセキュリティ リスクと、実際には必要のない多くのエンコード、構文、および一部の処理オーバーヘッドが追加されます。
.htaccess
特定の PHPインストールに対してカスタムiniディレクティブを設定することは確かに可能ですが、「FastCGI」または「CGI」(場合によってはsuPHP)を使用している場合は、 ) ) PHP をインストールすると、実際には 500 エラーでサイトがクラッシュするため、ここで説明されているようにローカルの.user.ini
ファイルを使用してください。 自分の SAPI はどうやって見つけますか?PHP を Apache モジュール (mod_php など) として実行している場合は、
.htaccess
を使用します。 自分の SAPI はどうやって見つけますか?PHP suPHP/FastCGI/CGI SAPI
それでは、あなたの願いはどのように叶えられるのでしょうか?
1) コア PHP.ini の詳細を見つけます。
現在の PHP バージョンの PHP.ini ファイルを読み取ります。
180 行目 (PHP 8.1 の場合) は次のようになります:
値をメモしておきます。 値 (この例に示すように) をカスタマイズすることをお勧めします。この値は、グローバル PHP.ini ファイルのアカウント固有の「ローカル」設定を保持するサーバー上の各一意のアカウントに配置されるファイルのファイル名です。
このファイルは通常、
public_html
フォルダーにあります。したがって、デフォルトで非表示になるように、.
で始まる必要があります (これについては後で詳しく説明します)。このファイルが存在しない場合、アカウントのコア PHP 設定は変更されません。2) ファイル名を記憶/設定し、新しいルールを作成します
これで、カスタム PHP ファイルの名前がわかり、設定できました。次に、アカウントでファイルを生成し、このアカウントに対して個別にカスタマイズする PHP.ini 設定を設定できます。
###例えば;###には次のサンプル情報が含まれます:
リーリーこの情報は PHP によって解析され、コア PHP.ini 内の対応する値をオーバーライドしますが、そのアカウントのみが対象となります。
3) 各アカウントの必要に応じてカスタマイズします
たとえば、siteb.com php ユーザー ini ファイルの場合、次のようになります。
には次のサンプル情報が含まれます:
リーリー各アカウントの
phpinfo()を調べて、表示されているローカルおよびコアの違いに注目することで、これらのアカウント設定が正しく設定されていることを確認できます。
4) テストと確認
/public_html/パスにあるコアの user.ini ファイルは、そのアカウントで処理されるすべてのサブファイル/フォルダーに必要なすべてである必要があります (これは、正確な LAMP サーバーの設定に依存する場合があります)および PHP ハンドラー)。
先ほども述べたように、テスト ini ファイルを設定したら、
phpinfo()を実行して、その値が実装されているかどうかを確認する必要があります。
phpinfo()を使用したくない場合は、簡単に
[ini_get](https://www.php.net/manual/en/function .ini-) を使用できます。 get)
機密データをブラウザの代わりにエラー ログにダンプします。リーリー
など)。上記の手順 1 で説明したように、各5) セキュリティ
user.ini ファイルは通常、ディレクトリ内で非表示にするために
リーリー.
文字で始まりますが、ブラウザ エージェントがアクセスできないという意味ではないため、ファイルに数行追加することをお勧めします。.htaccess
を使用して、このファイルへのアクセスを拒否します。最終的な考え:
Core PHP.ini 値は PHP の新しいバージョンでは変更されるため、ベスト プラクティスは、PHP バージョンごとに異なるローカル .ini ファイルを使用することです (
.account-php80.ini
、 .account-php81.iniphp.ini
コアはそれぞれのローカル user.ini ファイルを明示的に呼び出す必要があることに注意してください。上記の原則 は PHP マニュアル にまとめられています。次の点に注意する必要があります。
サイトごと (またはフォルダーごと)
たとえば、Web サイトで.htaccess
ファイルを使用して PHP 構成値を設定できます - 少なくともほとんどのセットアップでは: 構成ディレクティブで を確認した場合document、フラグPHP_INI_PERDIR
または PHP_INI_ALL については、PHP php_value またはphp_flag
コマンドを使用できます。.htaccess
これらの内容をファイル="https://www.php.net/manual/ja/configuration.changes.php" rel="nofollow noreferrer">「構成設定の変更方法」に設定します。 ###ドキュメンテーション 。upload_max_filesize
max_file_uploadsを設定するには、Web サイトのドキュメント ルートに
.htaccessファイルを作成し、その中に次のテキストを挿入します。 リーリー
残念ながら、と
upload_tmp_dir
はPHP_INI_SYSTEM
のタグが付いた設定であり、.htaccess
ファイル内で変更することはできません ...