2014-10-09 2 views
0

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

Сценарий 1:

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

Сценарий 2:

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

Оба сайта, который Javascript которые отправляют XMLHttpRequest в файл PHP, а также сайт, на котором находится сам файл PHP, являются сайтами IIS, поэтому я предполагаю, что сценарий запускается как IIS_IUSRS.

EDIT: файл Temp больше не создается вообще для сценария 1, не может понять, почему я предполагаю, что игра с разрешением перепутала что-то, потому что код не изменился. Я дал Modify IIS_USRS и ПОЛЬЗОВАТЕЛЯм, чтобы попытаться заставить его снова работать, но не повезло :(хотя журнал ошибок все еще записывается в ту же папку ... weird

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

EDIT: Еще одна новая разработка, похоже, что это НЕ проблема с разрешениями, потому что я могу создать временный файл через $ temp_file = tempnam (sys_get_temp_dir(), 'Test'), однако он, очевидно, не содержит загруженных данных, так что он не решает мою проблему.

+0

Я никогда не использовал IIS, но, возможно, использовал/вместо \ для разделителя каталогов? Или используйте \\, потому что PHP рассматривает \ как мета-символ побега? –

+0

Вы правы ... В моем коде у меня есть \\ это не должно быть проблемой, так как когда у меня есть файл, сидящий в каталоге, я могу жестко указать исходный и целевой файлы, и он отлично работает, но спасибо за ввод – mgrenier

+0

А что в php.ini? Отличается ли эта настройка, когда вы эхо phpinfo()? –

ответ

0

Это проблема не решена и более обходной путь . Кажется, что проблема связана с $_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 из-за одного параметра в APPLICATION POOLS. Это не php-cgi.exe и php.ini, либо проблема с правами доступа. Перейдите в пул приложений на веб-сайте, где возникла проблема: 1. щелкните правой кнопкой мыши 2. выберите дополнительные настройки 3. прокрутите страницу до пункта ЗАГРУЗИТЬ ПРОФИЛЬ ПОЛЬЗОВАТЕЛЯ и установите его в ЛОЖЬ.

, который сделал трюк для меня.

Смежные вопросы