Временные загруженные файлы PHP не удаляются в IIS из-за "Отказано в доступе" для IUSR

При загрузке файла с помощью HTML-формы в сценарий PHP, загруженный файл останется в upload_tmp_dir, даже если запрос завершится и этот файл не был явно удален кодом PHP.

Ожидаемое поведение: Неиспользуемые, не перемещенные или удаленные временные файлы загружаемого файла удаляются PHP после завершения запроса. Это также поведение, которое php.net описывает для загрузки файлов: "Файл будет удален из временного каталога в конце запроса, если он не был удален или переименован". См. http://php.net/manual/en/features.file-upload.post-method.php

Это было под капотом:

Файл создается в upload_tmp_dir. Файл не затрагивается кодом PHP. Запрос заканчивается. PHP пытается удалить временный файл, но доступ запрещен.

Мы проанализировали это с помощью procmon. Вы можете видеть, что процесс php-cgi.exe, по-видимому, не олицетворяет запрос на удаление, как в move_uploaded_file().

Обходной путь: Если мы добавим права MODIFY для группы IIS_IUSRS в uploaded_tmp_dir, файл будет удален после того, как запрос завершится, как и ожидалось.

Среда: PHP 5.3/5.4 через FCGI на IIS 7.x

Воспроизведено на WS2012, WS2008 R2.

Я обсуждаю это в PHP bugtracker, но они не верят мне: https://bugs.php.net/bug.php?id=68535

Мне нужна поддержка этой темы. Может ли кто-нибудь воспроизвести это? Что я делаю не так.

0 ответов

Другие вопросы по тегам