2015-04-29 2 views
0

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

Что мне нужно сделать, это отправить файл (с параметрами), дождаться завершения преобразования, загрузить файл и продолжить мой PHP-код, который обрабатывает загруженный файл. Тем не менее, мне трудно работать с cURL, и я не уверен, связано ли это с перенаправлением на страницу с индикатором выполнения. Пример кода ниже:

$full_file_path = realpath($inputfile); 
$data = array('param1' => '1', 'param2' => '2', 'file' => '@'.$full_file_path); 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'http://example.com/Converter/index.pl'); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$response = curl_exec($ch); 
curl_close($ch); 

#get converted file 

$file_head=substr($inputfile, 0, strpos($inputfile, '.raw')); 
$output_file=$file_head.".mzXML"; 
$url="http://example.com/Converter/temp/".$output_file; 
$fp = fopen ($output_file, 'w+'); 

$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_FILE, $fp); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
$response = curl_exec($ch); 
curl_close($ch); 

Начальный экземпляр $ response возвращает пустую веб-форму. Я не получаю ошибок с curl_error и curl_getinfo. Я вижу, что я правильно подключаюсь к серверу, однако процесс преобразования файлов должен занимать ~ 5 минут, пока процесс завивки завершается в < 1 сек. Я не уверен, что происходит неправильно или как получить больше информации, чтобы рассказать мне, что происходит. Я думаю, что это связано с перенаправлением, но я не знаю точно.

Любая помощь очень ценится.

РЕДАКТИРОВАТЬ

Вот выход из CURLOPT_VERBOSE

  • Добавление ручки: сопп: 0x7fa754818000
  • Добавление ручки: отправить: 0
  • Добавление ручки: RECV: 0
  • Curl_addHandleToPipeline: длина: 1
  • Conn 16 (0 x7fa754818000) send_pipe: 1, recv_pipe: 0
  • О для подключения() к example.com порт 80 (# 16)
  • Попытка XX.XXX.XXX.XXX ...
  • Подключение к example.com (XX.XXX.XXX.XXX) порт 80 (# 16)
  • POST /Converter/index.pl HTTP/1.1
  • Хост: example.com
  • Accept: /
  • Content-Length: 249010577
  • Ожидаем: 10 0-continue
  • Content-Type: multipart/form-data; граница = ---------------------------- 52f3c644b6de

  • HTTP/1.1 100 Continue

  • HTTP/1.1 200 OK
  • Дата: Пт, 1 мая 2015 14:01:17 GMT
  • Сервер Apache/2.2.22 (Win32) не занесен в черный список
  • Сервер: Apache/2.2.22 (Win32)
  • Кодировка: chunked
  • Content-Type: text/html; кодировка = ISO-8859-1

  • Подключение # 16 для размещения example.com остается нетронутым

+0

Попробуйте добавить 'CURLOPT_VERBOSE', чтобы получить больше информации о том, что делает Curl – dan08

+0

спасибо Дэну. Я не думаю, что я получаю много от этого, хотя снова, так как я этого не делал, прежде чем я не уверен, чего ожидать. – James

+0

Я опубликовал результаты в приведенном выше правиле. – James

ответ

0

Я думаю, вы можете использовать заголовок() для перенаправления пользователя преобразованного файла, также, удалить последний локон, и использовать CURLOPT_FOLLOWLOCATION, true на первый локон, т.е.:

$full_file_path = realpath($inputfile); 
$data = array('param1' => '1', 'param2' => '2', 'file' => '@'.$full_file_path); 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'http://example.com/Converter/index.pl'); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$response = curl_exec($ch); 
curl_close($ch); 

#get converted file 

$file_head=substr($inputfile, 0, strpos($inputfile, '.raw')); 
$output_file=$file_head.".mzXML"; 
$url="http://example.com/Converter/temp/".$output_file; 
$fp = fopen ($output_file, 'w+'); 

header("Location: $url"); 
+0

Спасибо Педро. Я по-прежнему получаю ту же проблему, даже с вашими предложениями. – James

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