2017-06-30 101 views
0

我在我的Ubuntu + PHP 7.0.18 + Apache2上有這個問題: 在我的php.ini中設置了open_basedir =/var/www:/ tmp。它工作正常。 但在一個Web應用程序中,我需要使用另一個dirs來處理。 我想中通過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的可以在運行時被上緊。這意味着 ,如果在php.ini中將open_basedir設置爲/ www /,則腳本可以使用ini_set()將運行時的配置012xx收緊到/ www/tmp /。當 列出幾個目錄時,無論操作系統如何,都可以使用PATH_SEPARATOR常量 作爲分隔符。

您致電ini_set()應該返回false以表明它失敗。

+0

謝謝。不知何故,手冊中沒有看到這個說明:) – Kukymbr