2017-06-30 108 views
0

私のUbuntu + PHP 7.0.18 + Apache2でこの問題が発生しました: php.iniにopen_basedir =/var/www:/ tmpが設定されています。それはうまく動作します。 しかし、あるWebアプリケーションでは、別のディレクトリを使用して作業する必要があります。 私はini_setを通してそれを設定しようとしています:PHP ini_set open_basedirは効果がありません

ini_set(
    'open_basedir', 
    implode(
     PATH_SEPARATOR, 
     array(
      __DIR__, 
      '/media/hdd/backup/db' 
     ) 
    ) 
); 

をしかし、それはありません任意の効果を持っています

echo ini_get('open_basedir'); // shows /var/www:/tmp 

php.iniのopen_basedirの値が空の場合、このコードは正常に動作します。 これは期待された動作ですか、何か間違っていますか?

答えて

2

open_basedirを任意実行時にini_set()経由を設定することができない、それだけでtightened to a lower dirことができます。

PHP 5.3.0以降、open_basedirのは、実行時に締め付けることができます。これは、 を意味します。これは、open_basedirがphp.iniの/ www /に設定されている場合、スクリプトはini_set()で実行時に/ www/tmp /への設定を に締め付けることができることを意味します。 ディレクトリが複数ある場合は、オペレーティングシステムに関係なく、区切り文字としてPATH_SEPARATOR定数 を使用できます。

ini_set()への呼び出しは、失敗したことを示すためにfalseを返す必要があります。

+0

ありがとうございます。何とかマニュアルでこのノートを見ていない:) – Kukymbr

関連する問題