EasyPHP WAMPはローカル開発専用にインストールしました(Webサイトをホストしていません)。
個別の仮想ホストにカスタムPHP設定を設定する方法はありますか?
現在、すぐに使用できる_php.ini
_ファイルは次の場所からロードされます。C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\binaries\php\php_runningversion\php.ini
たとえば、カスタム_php.ini
_ファイルをにドロップできると便利です。元の_php.ini
_の設定を上書きする仮想ホストディレクトリこのようにして、サイトごとに本番サーバーの環境をより適切にエミュレートできます。
私はこれがオンラインホスティングアカウントで機能するのを見てきました。しかし、これを自分のマシンで機能させる方法がわかりません。
カスタムphp.ini
ファイルの使用は、CGI/FastCGIベースのPHPインストールではかなり簡単ですが、Apacheモジュール(mod_php)としてPHPを実行する場合は、実行できません。 )サーバー全体がPHPインタープリターの単一インスタンスを実行するため。
私のアドバイス:
PHP自体からできるだけ多くの設定を設定します:
ini_set('memory_limit', '16M');
date_default_timezone_set('Europe/Madrid')
...
つまり、実行時に変更できるディレクティブです。
ディレクトリごとのApache設定ファイル(別名.htaccess
)から残りのものを設定します。
php_flag short_open_tag off
php_value post_max_size 50M
php_value upload_max_filesize 50M
つまり、スクリプトの実行を開始する前に定義する必要のある設定
詳細については、 ランタイム構成 をご覧ください。
場合によっては、開発と本番環境で実際に異なる設定が必要になります。 PHPコード($_SERVER['HTTP_Host']
変数からブール定数を作成することから、異なる値を持つconfig.php
ファイルを作成することまで)でそれを解決する方法は無限にありますが、それは.htaccess
でトリッキーです。私は通常 <IfDefine>
ディレクティブ を使用します:
<IfDefine DEV-BOX>
#
# Local server directives
#
SetEnv DEVELOPMENT "1"
php_flag display_startup_errors on
php_flag display_errors on
php_flag log_errors off
#php_value error_log ...
</IfDefine>
<IfDefine !DEV-BOX>
#
# Internet server directives
#
php_flag display_startup_errors off
php_flag display_errors off
php_flag log_errors on
php_value error_log "/home/foo/log/php-error.log"
</IfDefine>
...ここで、DEV-BOX
は、ローカルのApacheコマンドラインに渡す文字列です。
C:\Apache24\bin\httpd.exe -D DEV-BOX
Apacheをサービスとして実行する場合、-D DEV-BOX
ビットをWindowsレジストリに追加できます。例:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Apache2.4\Parameters\ConfigArgs
関連: サーバー上でPHPがどのように実行されているかを調べます(CGI OR fastCGI OR mod_php) ==
Fast CGIを使用してvhost用のカスタムphp.iniファイルを使用する簡単な方法は、php.iniを「customini」のようなホスト内のフォルダーにコピーすることです。
その後、vhostディレクティブに追加し、次の簡単な行を追加します。
FcgidInitialEnv PHPRC "/path_to_your_custom_ini_dir_for_this_vhost/"
必ず持ってください/
to your path no \
、(\
では機能しません)
Apacheを再起動します。
それで全部です!
完全なサンプル(ここではWindows Server上):
<VirtualHost *:80>
DocumentRoot "C:/Apache/htdocs/vhost/myvhost"
ServerName www.vhost.com
FcgidInitialEnv PHPRC "C:/Apache/customini/myvhost/"
</VirtualHost>
Php.ini設定をhttpd-vhost.conf
に埋め込むことは、通常、サーバールートのconf/extra/
の下にあり、この一般的な問題を解決するための優れた方法です。これができるとは知らなかった場合は、PHP.netのマニュアル 構成設定の変更方法 を参照してください。これにより、ブートストラップコードなどに構成コードを追加することなく、厄介なinclude_path
問題が解決されます。
もちろん、これをlocalhostとして効果的に使用するには、<VirualHost>
ブロックのコピーを作成し、それに応じてそれぞれを構成する必要があります。次に、使用するすべての仮想ホストブロックをコメントアウトします。
または、-f
オプションを指定してApacheを起動し、起動時にサーバーデーモンが別のhttpd.conf
を指すようにすることもできます。各httpd.conf
には、および<IfModule phpx_module>
ブロックなどの「ifモジュールブロック」が必要です。 Apacheロギングを考慮することを忘れないでください!
httpd -f /usr/local/Apache2/conf/domains/fooDomain.conf
httpd -f /usr/local/Apache2/conf/domains/barDomain.conf
php.ini
ステートメントを含む仮想ホストブロック。<VirtualHost 127.0.0.1:80>
UseCanonicalName On
ServerName localhost:80
ServerAdmin you@localhost
CustomLog "/var/www/someDomain.com/data/logs/httpd_access_log" common
ErrorLog "/var/www/someDomain.com/data/logs/httpd_error_log"
LogLevel warn
DocumentRoot "/var/www/someDomain.com/public"
<Directory "/var/www/someDomain.com/public">
# disable directory listing
Options -Indexes +FollowSymLinks
AllowOverride FileInfo
Require all granted
</Directory>
<IfModule alias_module>
# Alias /webpath /full/filesystem/path
ScriptAlias /cgi-bin/ "/var/www/someDomain.com/scripts/cgi-bin/"
</IfModule>
<IfModule php5_module>
# Use php7_module in opening statement above if on PHP 7+
# Domain specific PHP configuration options.
# The Apache process user must own any of the following directories.
php_admin_value include_path "/var/www/someDomain.com/application/controllers:/var/www/someDomain.com/application/models:/var/www/someDomain.com/application/views"
# Errors and Logging
php_admin_flag display_startup_errors off
php_admin_flag display_errors off
php_admin_flag html_errors off
php_admin_flag log_errors on
php_admin_value error_log "/var/www/someDomain.com/data/logs/php_error_log"
# File Related
php_admin_flag file_uploads on
php_admin_value upload_tmp_dir "/var/www/someDomain.com/data/uploads"
php_admin_value upload_max_filesize 10M
php_admin_value max_file_uploads 5
# Sessions
php_value session.save_handler "files"
php_value session.save_path "/var/www/someDomain.com/data/sessions"
# Caching
php_value soap.wsdl_cache_dir "/var/www/someDomain.com/data/cache/sopa.wsdl"
</IfModule>
</VirtualHost>
%{SERVER_NAME}変数を<IfModule phpx_module> blocks to form a compound conditional, you could have just one
httpd.conf`と組み合わせて使用するか、すべてのドメイン固有のPHP.ini設定(ブロック単位)とともにextra /php.confを含めることができる場合。ただし、「localhost」がドメインターゲットである限り、それはあなたが望むことをしません。したがって、上記の仮想ホストブロックでの私の答え。
何人かのコメンテーターが言及しています Vagrant これは優れたソリューションです。
Vagrantの使用に興味がない場合は、ApacheへのインターフェイスとしてFastCGIを使用し、これで提案されているSetEnv PHPRC...
提案を使用して調査できます blog :
ApacheとPHP:複数のPHP.ini構成ファイル(2009年2月8日日曜日)
出典:http://hyponiq.blogspot.com/2009/02/Apache-php-multiple-phpini.html
2番目の回避策は、SetEnvディレクティブを使用してApacheで構成可能なPHPRC環境変数を使用することです。このディレクティブを使用すると、環境変数を設定して、静的(x)HTMLページ(またはその他のドキュメントタイプ)に設定されているCGIスクリプトやサーバーサイドインクルード(SSI)に渡すことができます。この例では、各PHP-CGIインスタンスにその構成設定の場所を指示します。例は次のようになります(前のものと一致):
# vhosts.conf NameVirtualHost *:81 <VirtualHost *:81> ServerAdmin [email protected] ServerName vhost.example.com DocumentRoot "C:/path/to/doc/root" ErrorLog "logs/vhost.example.com-errors.log" # Set the PHPRC environment variable SetEnv PHPRC "C:/path/to/doc/root/php.ini" <Directory "C:/path/to/doc/root"> # ... yadda, yadda, yadda ... # you get the point! </Directory> </VirtualHost>
ただし、PHPドキュメント ランタイム構成の変更 は、
php_value
などの特定の値を使用してloaalongを試すことができることを示しています。おそらく、SetEnv
ディレクティブ。
彼は、FastCGIを使用せず、代わりにphp_value
、php_flag
などの構成オプションを利用する別のオプションを提案しています。
他の人はFastCGIを介してスクリプトを実行することにある程度成功したようですが、以下を参照してください: 異なる仮想ホスト用に別々のphp.ini
その他の提案には、PHPINI
ディレクティブが含まれます。これは、ニーズに関連している可能性があります。以下を参照してください。 PHPアプリを独自のディレクトリと独自のphpに制限するにはどうすればよいですか。 ini?