я время от времени получение следующей ошибки при загрузке страницы 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
все-еще существует.
Я использую PHP 5.6.5 в IIS в Windows 8.1.
Почему PHP не может выполнять сборку мусора и как это исправить?
Временные файлы сеанса создаются в этом каталоге в соответствии со свойством session.save_path в php.ini. Без разрешений на удаление файлов в этом каталоге PHP не может удалить эти файлы в рамках обычного процесса обработки мусора сеанса, и поэтому они накапливаются, когда они больше не нужны / вы иногда будете видеть эту ошибку всякий раз, когда выполняется сборка мусора.
Пользователь пула приложений, который на самом деле запускает исполняемый файл PHP, должен как минимум изменить разрешения на C: \ Windows \ TEMP для выполнения сборки мусора (по умолчанию это не предоставляется). Если вы не меняли этого пользователя по умолчанию, тогда он должен быть «DefaultAppPool», или вы можете использовать группу пула приложений, которая будет похожа на IUSRS.
Лучше всего создать новый пул приложений для каждого сайта. Когда вы это сделаете, IIS создаст пользователя Windows, которому вы затем сможете предоставить права на изменение. Вы можете создать сценарий или сделать это из командной строки, используя следующую команду:
icacls c:\windows\TEMP\ /inheritance:e /grant "IIS APPPOOL\your-user:(OI)(CI)M" /t /c /Q
Обновить: Как отмечает Гремио, вы должны переместить файлы сеанса в определенный каталог, чтобы вы не предоставляли этому пользователю доступ на запись (который может быть использован) во все остальное, что Windows хранит в каталоге TEMP. Вы можете изменить настройки сохранения сеансов в php.ini, глобально или специально для вашего приложения во время выполнения (подробности Вот).
Я обнаружил, что самый простой способ справиться с этой проблемой - изменить путь, используемый для сохранения временной информации, на один по моему выбору, а затем установить соответствующие разрешения безопасности.
Чтобы изменить путь, используемый для хранения временных файлов:
php.ini
для вашей установки (моя находилась в C:\Program Files\PHP\v7.4
).session.save_path
настройка.C:\Windows\Temp
в папку по вашему выбору. Специально для этого создал папку.Чтобы изменить права доступа к указанной выше папке:
Properties
.Security
таб.Advanced
открыть Advanced Security Settings
неожиданно возникнуть.Change Permissions
.Add...
чтобы добавить нового пользователя.IIS_IUSRS
в качестве имени объекта и щелкните OK
.Permissions Entry
всплывающее окно, отметьте настройки для Full control
под Allow
столбец.OK
вернуться к основному Permissions
список.Replace all child object permissions with inheritable permissions from this object
.OK
и подтвердите все остальные всплывающие окна и окна.PHP должен немедленно начать использовать новое расположение папки для сессионных и временных данных.
Просто дайте Полные разрешения пользователю «IUSR» в каталоге «C: \ Windows \ Temp». Может быть, достаточно просто перечисления и удаления каталогов ... но в непродуктивной системе это не должно быть проблемой.