3

Apache 2.2.21 と PHP 5.3.8 を実行している Mac OS X サーバーがあります。

ディレクトリごとにいくつかの php.ini スタイル ディレクティブを設定したいと考えています。PHP のマニュアル ページによると、PHP 5.3.0 以降、ディレクトリに「.users.ini」というファイルを配置することで、メインの php.ini ランタイム構成ファイルにあるディレクティブをディレクトリごとに上書きすることが可能でした。影響を受けるスクリプトが含まれています。

私にとって、このソリューションは .htaccess ファイルに含まれる php_value および php_flag 命令を使用するよりも非常に望ましいですが、作成した .user.ini ファイルは PHP によって無視されています。

phpinfo() によると、私の .user.ini ファイルは 5 分ごとに再キャッシュされる必要があり、ファイル名は正しく「.user.ini」に設定されています。

user_ini.cache_ttl   300
user_ini.filename    .user.ini

Apache は AllowOverides に設定されており、.htaccess ファイルを介して PHP ディレクティブを設定すると、制御したい ini 設定が正しく上書きされることを確認済みです。私が試した最も単純なテスト ファイルは、次の行のみを含む .user.ini ファイルです。

display_errors = On

これは機能せず、システム全体のディレクトリ (=Off) が使用されます。ただし、同等の .htaccess ファイルは期待どおりに機能し、システム全体のディレクティブをオーバーライドします。

php_flag display_errors on

私が見つけることができる 1 つの手がかりは、メインの php.ini ファイルの先頭にある謎の [PHP] です。マニュアルにこのセクションマーカーの記述が見当たりませんでしたので、おそらく[PHP]でファイルを開始する必要があると思いました。これを .user.ini ファイルの先頭に追加して、ページをリロードし、さらに 5 分待ってからもう一度リロードして、キャッシュされたバージョンをロードしていないことを確認しましたが、残念ながら違いはありませんでした。

私が見つけたもう 1 つの手がかりは、.user.ini ファイルの使用方法を説明している、前述の PHPマニュアル ページにある同様に不可解なステートメントです。「これらのファイルは、CGI/FastCGI SAPI によってのみ処理されます。」残念ながら、phpinfo() の出力に「GATEWAY_INTERFACE CGI/1.1」という行以外に、この条件が満たされていることを確認する方法がわかりません。 )出力。この謎の声明はほとんど重要ではなく、CGI/FastCGI SAPI が処理を行う (それが何を意味するにせよ) と述べているにすぎず、何かを有効にする必要があることを警告するのとは対照的であると想定せざるを得ません。私が間違っている場合は修正してください。

同じ .user.ini マニュアル ページのコメントにも、php-fpm を使用すると .user.ini ファイルの処理が機能しないという記述があります。私が知る限り、私はそれを使用していませんが、簡単に確認する方法があれば教えてください。これにより、この機能と競合して .user.ini ファイルの読み込みを無効にする他の構成オプションまたはモジュールがあるかどうかという疑問が生じます。それに対する答えを知っている人はいますか?

完全を期すために、デフォルトから変更したとは思いませんが、明らかな問題が発生した場合に備えて、構成コマンドを含めます。

'/private/var/tmp/apache_mod_php/apache_mod_php-53.8~2/php/configure' '--prefix=/usr' '--mandir=/usr/share/man' '--infodir=/usr/share/ info' '--disable-dependency-tracking' '--sysconfdir=/private/etc' '--with-apxs2=/usr/sbin/apxs' '--enable-cli' '--with-config-file -path=/etc' '--with-libxml-dir=/usr' '--with-openssl=/usr' '--with-kerberos=/usr' '--with-zlib=/usr' '- -enable-bcmath' '--with-bz2=/usr' '--enable-calendar' '--with-curl=/usr' '--enable-exif' '--enable-ftp' '--with -gd''--with-jpeg-dir=/BinaryCache/apache_mod_php/apache_mod_php-53.8~2/Root/usr/local''--with-png-dir=/BinaryCache/apache_mod_php/apache_mod_php-53.8~2/Root /usr/local'' --enable-gd-native-ttf''--with-ldap=/usr' '--with-ldap-sasl=/usr' '--enable-mbstring' '--enable-mbregex' '--with-mysql=mysqlnd' '--with- mysqli=mysqlnd' '--with-pdo-mysql=mysqlnd' '--with-mysql-sock=/var/mysql/mysql.sock' '--without-pear' '--with-iodbc=/usr' '--enable-shmop' '--with-snmp=/usr' '--enable-soap' '--enable-sockets' '--enable-sysvmsg' '--enable-sysvsem' '--enable- sysvshm' '--enable-wddx' '--with-xmlrpc' '--with-iconv-dir=/usr' '--with-xsl=/usr' '--enable-zend-multibyte' '-- enable-zip'' --with-pcre-regex=/usr'--with-mysqli=mysqlnd' '--with-pdo-mysql=mysqlnd' '--with-mysql-sock=/var/mysql/mysql.sock' '--without-pear' '--with-iodbc =/usr' '--enable-shmop' '--with-snmp=/usr' '--enable-soap' '--enable-sockets' '--enable-sysvmsg' '--enable-sysvsem' ' --enable-sysvshm' '--enable-wddx' '--with-xmlrpc' '--with-iconv-dir=/usr' '--with-xsl=/usr' '--enable-zend-multibyte ' '--enable-zip' '--with-pcre-regex=/usr'--with-mysqli=mysqlnd' '--with-pdo-mysql=mysqlnd' '--with-mysql-sock=/var/mysql/mysql.sock' '--without-pear' '--with-iodbc =/usr' '--enable-shmop' '--with-snmp=/usr' '--enable-soap' '--enable-sockets' '--enable-sysvmsg' '--enable-sysvsem' ' --enable-sysvshm' '--enable-wddx' '--with-xmlrpc' '--with-iconv-dir=/usr' '--with-xsl=/usr' '--enable-zend-multibyte ' '--enable-zip' '--with-pcre-regex=/usr'--enable-sysvshm' '--enable-wddx' '--with-xmlrpc' '--with-iconv-dir=/usr' '--with-xsl=/usr' '--enable-zend-multibyte ' '--enable-zip' '--with-pcre-regex=/usr'--enable-sysvshm' '--enable-wddx' '--with-xmlrpc' '--with-iconv-dir=/usr' '--with-xsl=/usr' '--enable-zend-multibyte ' '--enable-zip' '--with-pcre-regex=/usr'

(親愛なる読者の皆さん、ここまで読んでくれたので、上記の設定とは関係のない奇妙な点を見つけた場合は、この元の投稿に添付されたコメントで遠慮なく言及してください)

4

2 に答える 2

14

他のメンバーのコメントからいくつかの手がかりを集めて、今後の参考のために質問に適切に答えるのに十分な調査を行うことができました.

PHP ドキュメントの「一般的なインストールに関する考慮事項」セクションで説明されているように、PHP は次の 2 つの方法のいずれかで Apache サーバーと並行して実行できます。

  1. SAPI (Server Application Programming Interface) とも呼ばれる Apache モジュール (mod_php) として Apache 内で直接、または
  2. CGI (Common Gateway Interface) または FastCGI プロトコルを介して Apache と通信する個別の実行可能ファイルとして。

PHP が Apache 内のモジュールとして実行される場合 (Mac OS X Server のデフォルト設定)、PHP はファイルシステムに直接アクセスできず、Apache は PHP がジョブを実行するために必要なすべてのものを提供します。つまり、ファイルシステムから最終的にディレクトリごとの構成オプションを選択することはできません。つまり、Apache はディレクトリごとの設定を PHP プロセッサに渡す必要があるため、.htaccess (Apache が処理して PHP に渡す) を介して設定する必要があります。

PHP が独自のプロセスとして実行される (CGI または FastCGI を介して Apache と通信する) 場合、PHP プロセッサは、スクリプトの処理を開始する前にディレクトリ構造に直接アクセスできるため、追加の構成ファイルを個別にロードすることができます。解析エラーの表示などに影響を与えるディレクトリベース (スクリプトが解析されない場合、PHP はその中の指示に従うことができないため、スクリプトの実行時に決定することは不可能です)。

したがって、短いバージョンでは、PHP が Apache モジュールとして実行されている場合、.htaccess ファイルを使用してディレクトリごとの構成ディレクティブを設定するか、Common Gateway Interface に切り替える必要があります。

于 2012-06-11T02:15:41.423 に答える
0

マニュアルによると、もう少し下に:

「Apache を使用している場合は、同じ効果のために .htaccess ファイルを使用してください。」

また、Apache を介して CGI または FastCGI モードで PHP を実行していますか?

于 2012-06-10T01:59:10.160 に答える