iis — Изменение временного каталога PHP

У меня есть сайт для конвертации медиа, где пользователи могут загружать видео, аудио или графические файлы, и он конвертируется в 3 популярных формата. Скрипт преобразования работает нормально, но у меня возникли некоторые проблемы с каталогом tmp, куда загружаются файлы. Я пробовал 2 сценария, с которыми у меня все в порядке, но ни один из них не работает, и мне кажется, что это связано с разрешениями, но я могу решить проблему.
Я работаю на месте прямо сейчас, пока я работаю над перегибами.

Сценарий 1:

  • Файл загружен в локальный каталог tmp по умолчанию (C: \ WINDOWS \ tmp) — работает нормально
  • Попытайтесь запустить скрипт преобразования, используя загруженный файл tmp, но он не работает — хотя запуск из командной строки работает отлично

Сценарий 2:

  • Файл загружен в каталог, которому я дал IIS_IUSRS полный контроль (для тестирования), и файл не будет загружен — да, каталог написан правильно (я изменил значение upload_tmp_dir в php.ini)

И сайт javascript, который отправляет XMLHttpRequest в файл PHP, и сайт, на котором находится сам файл PHP, являются сайтами IIS, поэтому я предполагаю, что скрипт выполняется как IIS_IUSRS.

РЕДАКТИРОВАТЬ: временный файл больше не создается вообще для сценария 1, не могу понять, почему я предполагаю, что игра с разрешением испортила что-то, потому что код не изменился. Я дал Modify для IIS_USRS и USERS, чтобы попытаться заставить его работать снова, но не повезло 🙁 хотя журнал ошибок все еще записывает в ту же папку … странно

ПРИМЕЧАНИЕ. Значение «tmp_name» отправляемой мною переменной $ _FILES по-прежнему имеет значение «C: \ WINDOWS \ Temp \ ‘filename’», но файла там нет

РЕДАКТИРОВАТЬ: еще одна новая разработка, кажется, это не проблема с разрешениями, потому что я могу создать временный файл с помощью $ temp_file = tempnam (sys_get_temp_dir (), ‘Test’); однако он, очевидно, не содержит загруженных данных, поэтому он не решает мою проблему

1

Решение

Это не столько решенная проблема, сколько обходной путь. Проблема, кажется, что-то с
$_FILES['file']['tmp_name'];

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

создать временный файл

$temp_file = tempnam(ini_get('upload_tmp_dir'), 'php');

затем добавьте содержимое из временного файла, созданного во время запроса $ _POST. (которые, как некоторые из них, находятся в переменной $ _FILES, хотя файла нет, когда я смотрю в каталог)

file_put_contents($temp_file, file_get_contents($_FILES['file']['tmp_name']));

у меня есть временный файл для обработки.

0

Другие решения

PHP игнорирует upload_tmp_dir из-за одного параметра в БЛОКАХ ПРИЛОЖЕНИЙ.
Это не php-cgi.exe, не php.ini и не проблема с разрешениями.
Перейдите в пул приложений на веб-сайте, где возникла проблема:
1. щелкните правой кнопкой мыши
2. выберите дополнительные настройки
3. выделите ЗАГРУЗИТЬ ПРОФИЛЬ ПОЛЬЗОВАТЕЛЯ и установите ЛОЖЬ.

это помогло мне.

0

По вопросам рекламы [email protected]