PHP в Windows - ps_files_cleanup_dir ошибка

Я иногда получаю следующую ошибку при загрузке страницы 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 не могущий выполнить сборку "мусора", и как я фиксирую ее?

5
задан 2 June 2015 в 13:21
3 ответа

В этой директории создаются временные файлы сессии в соответствии со свойством 'session.save_path' в php.ini. Без прав на удаление файлов в этой директории PHP не может удалить эти файлы в рамках обычного процесса обработки сеансового мусора, поэтому они накапливаются, когда в них больше нет необходимости/вы будете иногда видеть эту ошибку при сборе мусора.

Пользователь пула приложений, который фактически запускает исполняемый файл PHP, должен, по крайней мере, изменить права на C:\Windows\TEMP для выполнения сбора мусора (по умолчанию это не разрешено). Если вы не изменили этого пользователя по умолчанию, то это должен быть 'DefaultAppPool', или вы можете использовать группу App Pool, которая будет похожа на IUSRS.

Лучшая практика заключается в создании нового пула приложений для каждого сайта. Когда вы это сделаете, IIS создаст пользователя Windows, которому вы сможете предоставить права на изменения. Вы можете написать сценарий этого или сделать это из командной строки, используя следующую команду:

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

Update: Как отмечает Gremio, вы должны переместить файлы сеанса в определенную директорию, чтобы не дать этому пользователю доступ на запись (которая может быть использована) к тому, что еще хранится Windows в директории TEMP. Вы можете изменить настройки сохранения сеансов в php.ini, глобально или специально для вашего приложения во время выполнения (подробности здесь ).

5
ответ дан 3 December 2019 в 01:44

Просто дайте полные разрешения пользователю «IUSR» в каталоге «C: \ Windows \ Temp». Может быть, достаточно просто перечислить и удалить каталоги ... но в непродуктивной системе это не должно быть проблемой.

-1
ответ дан 3 December 2019 в 01:44

Я обнаружил, что самый простой способ справиться с этой проблемой — изменить путь, используемый для сохранения временной информации, на один из выбранных мной, а затем установить соответствующие разрешения безопасности.

Чтобы изменить путь, используемый для хранения временных файлов:

  1. Отредактируйте php.ini для вашей установки (мой был расположен в C:\Program Files\PHP\v7.4).
  2. Обнаружен параметр session.save_path.
  3. Измените путь с C:\Windows\Temp на папку по вашему выбору. Специально для этого создал папку.

Чтобы изменить разрешения для указанной выше папки:

  1. Щелкните правой кнопкой мыши папку в проводнике Windows и выберите Свойства.
  2. Выберите вкладку Безопасность.
  3. Нажмите Дополнительно, чтобы открыть всплывающее окно Дополнительные параметры безопасности.
  4. Нажмите Изменить разрешения.
  5. Нажмите Добавить... , чтобы добавить нового пользователя.
  6. Введите IIS_IUSRS в качестве имени объекта и нажмите ОК.
  7. Во всплывающем окне Ввод разрешений установите флажок Полный доступ в столбце Разрешить.
  8. Нажмите ОК, чтобы вернуться к основному списку Разрешений.
  9. Обязательно установите флажок в нижней части страницы, на котором указано Заменить все разрешения дочернего объекта разрешениями, наследуемыми от этого объекта.
  10. Нажмите ОК и подтвердите все другие всплывающие окна и окна.

PHP должен немедленно начать использовать новую папку для сеансовых и временных данных.

0
ответ дан 22 July 2020 в 12:00

Теги

Похожие вопросы