open_basedir は、ディレクトリツリー内でPHPによって開くことができるファイルを制限します。
Webルートディレクトリの外部にいくつかのクラスライブラリと構成ファイルを保存しています。このように、Webサーバーはそれらを一般にアクセス可能にしません。ただし、アプリケーションからそれらを含めようとすると、次のようなopen_basedir制限エラーが表示されます。
警告:realpath()[function.realpath]:有効なopen_basedir制限。ファイル(/var/www/vhosts/domain.tld/zend/application)は許可されたパス内にありません:/ var/www /の(/var/www/vhosts/domain.tld/httpdocs:/tmp) 5行目のvhosts/domain.tld/httpdocs/index.php
私のウェブルートはこちらです:
/var/www/vhosts/domain.tld/httpdocs
ライブラリと構成ディレクトリは次のとおりです。
/var/www/vhosts/domain.tld/zend
ドメインフォルダーの下のディレクトリツリーがアプリケーションで使用可能になるようにopen_basedirの制限を緩和する最善の回避策は何ですか?私はこれをやりたいドメインがいくつかありますが、セキュリティの脆弱性を作成することにも明らかに警戒しています。
注:CentOS、Apache、Pleskを使用しており、サーバーへのルートsshアクセス権があります。また、これはZend Frameworkには直接適用されませんが、このインスタンスで使用しています。 Zendのブートストラップからのインクルージョンは次のとおりです。
define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../zend/application/'));
set_include_path(APPLICATION_PATH . '/../zend/library' . PATH_SEPARATOR . get_include_path());
Apache(これがWebサーバーであると仮定)構成ファイル(例:httpd.conf)を使用して、ディレクトリごとに簡単にこれを行うこともできます。
<Directory /var/www/vhosts/domain.tld/httpdocs>
php_admin_value open_basedir "/var/www/vhosts/domain.tld/httpdocs:/var/www/vhosts/domain.tld/zend"
</Directory>
制限を完全に削除することもできます
<Directory /var/www/vhosts/domain.tld/httpdocs>
php_admin_value open_basedir none
</Directory>
アクセスする必要があるパス(/var/www/vhosts/domain.tld/zend)をopen_basedirディレクティブに追加します(ウィンドウでパス区切り文字「:」または「;」を使用して複数のパスを指定できます)
open_basedirの値はプレフィックスであることに注意してください。つまり、/ var/www/vhosts/domain.tld/zendの下にあるものはすべてアクセス可能です。
Parallels Plesk Panel(1and1など)では、PHPパネル設定でそれを行うことができます:
ここに: