PHP загрузка файла и скручивание - PullRequest
2 голосов
/ 12 января 2011

У меня есть вопрос.

У меня есть сценарий, который обрабатывает загрузку файла, и после завершения загрузки файла я отправляю данные $ _FILES в другой локальный сценарий с помощью curl ,который обрабатывает файлы и помещает его в нужное место.

Проблема в том, что он отлично работает на моем локальном компьютере, используя следующие настройки curl:

curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

Я запускаю Windows 7, но когда япереместил скрипт на мой выделенный сервер (CentOS), он перестал работать.

После некоторых исследований, когда файл загружен, он сохраняется в каталоге / tmp .

Оказывается, файл, загруженный в / tmp , удален прямо перед моим вызовом curl.Известно, что PHP удаляет закачки файлов tmp после завершения выполнения скрипта.

Есть ли параметр, который я мог бы использовать в CURL, чтобы обойти эту проблему?Локально работает, я просто не понимаю, почему он не работает на моем сервере CentOS ..

ОБНОВЛЕНИЕ : Он работал на моем другом сервере, который также работает на Linux... Я не знаю, какой именно это параметр, чтобы изменить это, но похоже, что каждая конфигурация сервера отличается от этого.

Ответы [ 2 ]

1 голос
/ 12 января 2011

Поскольку вы используете CURL, вы отправляете веб-серверу новый запрос.Есть несколько вещей, которые вы просите сделать веб-сервер:

  • получить загруженный файл
  • отправка скрипта процесса
  • новый запрос к процессу веб-сервера
  • второй запрос

тем временем, двигатель знает, что ему нужно выполнить следующую задачу;привести в порядок загруженные файлы

В разных средах появляется возможность обрабатывать эти задачи в другом порядке (например, Linux + Apache против Windows + IIS).Когда он решит привести в порядок загруженные файлы, объяснит, что вы видите:

  • получите загруженный файл
  • отправьте скрипт процесса
  • новый запрос к веб-серверу
  • <- здесь </li>
  • обработать второй запрос
  • <- здесь </li>

в первой позиции, ваш скрипт ломается, во второй он будет работать.Это потому, что на первом месте ваш загруженный файл был удален до того, как ваш второй запрос / скрипт будет обработан / запущен.Как уже упоминал Марк, это основная функциональность, поэтому вам нужно будет изменить свой сценарий для использования move_uploaded_file (), а затем передать местоположение файла другому сценарию.

Надеюсь, это проливает свет на то, почему он работает по-другомув разных средах.

0 голосов
/ 12 января 2011

Вам нужно будет переместить файл из / tmp в другой каталог, используя move_uploaded_file(), когда первоначальная загрузка завершится, или инициировать загрузку curl из того же сценария.В противном случае PHP очистит файл, и вы ничего не сможете сделать.

Автоматическая очистка - это основная функциональность PHP, и curl не может на нее повлиять.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...