При загрузке файла с помощью 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
Мне нужна поддержка в этой теме. Может ли кто-нибудь воспроизвести это? Что делаю не так.