加载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
C:\Windows\TEMP月份sess_文件仍然存在。
我在Windows 8.1上的IIS上运行PHP 5.6.5。
为什么PHP无法执行垃圾回收,我该如何解决?
会话临时文件是根据php.ini中的“session.save_path”属性在此目录中创build的。 没有权限删除此目录中的文件PHP无法删除这些文件作为其正常会话垃圾处理过程的一部分,因此当它们不再需要时,它们将累积/每当执行垃圾收集时您偶尔会看到此错误。
实际运行PHP可执行文件的应用程序池用户至less需要在C:\ Windows \ TEMP上修改权限才能执行垃圾回收(默认情况下不会授予此权限)。 如果您没有将该用户从默认设置改为“DefaultAppPool”,或者您可以使用App Pool组,这与IUSRS类似。
最佳做法是为每个站点创build一个新的应用程序池。 当你这样做IIS将创build一个Windows用户,然后您可以授予修改权限。 您可以编写脚本或使用以下命令从命令行执行此操作:
icacls c:\windows\TEMP\ /inheritance:e /grant "IIS APPPOOL\your-user:(OI)(CI)M" /t /c /Q
只需在目录“C:\ Windows \ Temp”上向用户“IUSR”授予完全权限即可。 也许只是目录列表和删除已经足够了…但是在非生产性系统中,这应该不成问题。