Php

Windows 上的 PHP - ps_files_cleanup_dir 錯誤

  • July 22, 2020

載入 PHP 頁面時,我偶爾會收到以下錯誤:

PHP Notice:  session_start(): ps_files_cleanup_dir: opendir(C:\Windows\TEMP) failed: No error (0) in C:\server\default.php on line 299

一個月前的sess_文件C:\Windows\TEMP仍然存在。

我在 Windows 8.1 上的 IIS 上執行 PHP 5.6.5。

為什麼 PHP 無法執行垃圾回收,我該如何解決?

會話臨時文件根據 php.ini 中的“session.save_path”屬性在此目錄中創建。如果沒有刪除此目錄中文件的權限,PHP 無法將這些文件作為其正常會話垃圾處理過程的一部分刪除,因此當不再需要它們時它們會累積/執行垃圾收集時偶爾會看到此錯誤。

實際執行 PHP 執行檔的應用程序池使用者至少需要修改 C:\Windows\TEMP 上的權限才能執行垃圾收集(預設情況下不授予此權限)。如果您沒有更改此使用者的預設值,那麼它應該是“DefaultAppPool”,或者您可以使用類似於 IUSRS 的 App Pool 組。

最佳實踐是為每個站點創建一個新的應用程序池。當您執行此操作時,IIS 將創建一個 Windows 使用者,然後您可以授予該使用者修改權限。您可以編寫此腳本或使用以下命令從命令行執行此操作:

icacls c:\windows\TEMP\ /inheritance:e /grant "IIS APPPOOL\your-user:(OI)(CI)M" /t /c /Q

**更新:**正如 Gremio 所指出的,您應該將會話文件移動到特定目錄,這樣您就不會授予該使用者(可能被利用)對 Windows 儲存在 TEMP 目錄中的任何其他內容的寫訪問權限。您可以在 php.ini 中全域修改會話保存設置,也可以在執行時專門針對您的應用程序修改會話保存設置(詳見此處)。

引用自:https://serverfault.com/questions/696066