我有幾個電話is_dir
在頁面上。他們一直沒有問題。PHP:open_basedir允許的路徑
幾天前,託管公司將PHP從5.2升級到5.3。從那時起,我對is_dir
所有呼叫都導致了以下錯誤(消息):
Warning: is_dir(): open_basedir restriction in effect.
File(/home/virtual/domain.com/public_html/galleries/img/002.JPG/)
is not within the allowed path(s):
(/home/virtual/domain.com:/home/virtual/_tmp)
in /home/virtual/domain.com/public_html/index.php on line 201
這讓我爲難。
顯然,根據該錯誤消息(和php_info
以及),目錄/home/virtual/domain.com
(沒有尾隨斜線,所以包括子目錄)被包括/在open_basedir
啓用,並且文件is_dir
試圖遍歷全部位於該文件夾下的子文件夾中。那麼爲什麼他們不在允許的路徑之內呢?顯然他們是!
奇怪的是,這個錯誤出現只顯示當is_dir
返回false,即,當文件不一個文件夾,而是一個普通的文件。它似乎遍歷目錄沒有拋出錯誤。
以前發佈過的類似問題:Open_basedir restriction oddness(找不到解決方法)。
任何人有任何想法?
(注:更改PHP的設置是不是一種選擇,因爲這是一個共享的主機,我沒有任何管理權限)
這是否是實際的錯誤消息?或者某些路徑中的某些特殊字符? – SteAp 2012-07-22 19:36:52
有些路徑確實有一些特殊字符:'&'(&符號)和'_'(下劃線)。但即使對於不包含任何特殊字符的路徑(除非大寫字母被視爲特殊字符),也會出現錯誤。並且特殊字符都在目錄名稱中(並且在'is_dir'評估爲'TRUE'的情況下被正確解析和迭代),而不是在文件名稱中(這是發生錯誤的地方)。 – 2012-07-22 21:45:34