2010-04-08 57 views
0

在虛擬主機服務器上,我將open_basedir設置爲。:/ path/to/vhost/web:/ tmp:/ usr/share/pear爲每個虛擬主機。我有一個運行WordPress的客戶,他在抱怨open_basedir錯誤: PHP警告:file_exists()[function.file-exists]:open_basedir限制有效。文件(/ var/lib/php/session/sess_42k7jn3vjenj43g3njorrnrmf2)不在允許的路徑內:(。:/ path/to/vhost/web:/ tmp:/ usr/share/pear) 因此,PHP會話save_path不包含在open_basedir中,但服務器上所有站點的會話似乎在這種間歇性實例中運行良好。我認爲可能默認會話處理程序忽略了open_basedir,這個警告是由WP直接訪問會話文件引起的。open_basedir vs sessions

但是從我所看到的PHP 5.2.4引入了open_basedir檢查到session.save_path配置:http://www.php.net/ChangeLog-5.php#5.2.4 (我在PHP 5.2.13上)。

任何想法?

+0

這不是一個編程問題。應該轉移到SF。 – webbiedave 2010-04-08 16:28:14

+0

對不起,因爲這是我在這裏發佈的PHP相關的,但我可以看到它可能與SF更相關,將在那裏發佈。我需要關閉這個問題嗎? – liquorvicar 2010-04-08 16:48:51

回答

1

將ini文件中的session.save_path設置爲指向open_basedir並添加.htaccess文件以防止用戶使用瀏覽器訪問文件?

C.

0

PHP手冊說:「特殊值表明腳本的工作目錄將被作爲基準目錄是這樣的,但是,有些危險,因爲的工作目錄腳本可以很容易地用chdir()改變。「

讓所有的虛擬主機指向同一個session.save_path也不是最好的主意。 PHP腳本可以輕鬆更改垃圾收集設置。在會話文件中沒有關於擁有應用程序的信息。垃圾收集器將收集所有可訪問的文件。如果您想知道爲什麼會話會比預期早到期,原因可能是其他應用程序的到期時間更短。從安全的角度來看,每個應用程序應該使用自己的目錄來存儲會話文件。

現在很容易解決問題。在此虛擬主機的open_basedir中包含分隔的session.save_path。然後詢問WordPress人員爲什麼PHP腳本應該可以訪問其他用戶的會話數據。