Отправка многочисленных файлов через HTTP POST & curl - PullRequest
0 голосов
/ 10 августа 2011

Проблема:

У меня проблемы с надежной отправкой множества файлов через HTTP Post с одного веб-сервера на другой.

Я заметил, что успешность передачи файлов зависит от размера и количества файлов, которые я выбираю для отправки.

То, что я определяю как успешную передачу, - это если все файлы, отправленные с исходного сервера, появляются в каталоге принимающего сервера.

//sender script

$ch = curl_init();

$data = array(
    'file1' => '@/var/www/html/uploadtest/largerfile.zip',
    'file2' => '@/var/www/html/uploadtest/largerfile.zip',
    'file3' => '@/var/www/html/uploadtest/smallerfile.zip'
);

curl_setopt($ch, CURLOPT_URL, 'http://domain.com/test/reciever.php');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

$res = curl_exec($ch);

if(curl_exec($ch)){
    print "Error: " . curl_error($ch);
}

echo $res;

//recieving script

print_r($_FILES); //outputs as blank array on failed transfer
move_uploaded_file( $_FILES["file1"]["tmp_name"], "file1.zip" );
move_uploaded_file( $_FILES["file1"]["tmp_name"], "file2.zip" );
move_uploaded_file( $_FILES["file1"]["tmp_name"], "file3.zip" );

С текущими файлами, отправляемыми через ни один из них, не прибывает в пункт назначения. Если я удаляю один largefile.zip , передача файла будет успешной.

Я ищу ответы об ошибках, печатая $ res , но я не вижу ничего, несмотря на неудачную передачу. * curl_errno * также ничего не обнаруживает.

Фон:

Ранее мне рекомендовалось использовать FTP, но веб-API, который я буду использовать, принимает только POST. Также вероятно, что файлы, которые мне нужно передать, составляют около 50 МБ.

Я также попытался изменить следующие настройки php.ini на:

  • post_max_size: 100M
  • upload_max_size: 60M

1 Ответ

2 голосов
/ 11 августа 2011

Вы писали:

Также вероятно, что файлы, которые мне нужно передать, имеют размер около 50 МБ.

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

max_upload_size : 60M (вы не имеете в виду upload_max_filesize ?!)
post_max_size : 100M

Существует третий параметр, связанный с файлом-загрузок: memory_limit.Это связано с тем, что эти файлы будут загружены в память перед сохранением на диске на сервере.

Вы хотите передать три файла одновременно.Каждый файл составляет около 50 МБ.Давайте просто подведем итог:

50 mb + 50 mb + 50 mb = 150 mb

Это означает:

  • upload_max_filesize (!!) из 60 МБ слишком мало, если этосчитает за все три файла одновременно (я не могу вспомнить, если это так или нет).
  • post_max_size из 100 МБ определенно слишком мало,здесь вам понадобится более высокое значение, по крайней мере, 150m и добавьте немного больше сверху.См. ручную запись для получения дополнительной информации.
  • memory_limit неизвестно, но очень похоже, что оно слишком низкое.

Для тестирования установите memory_limit на 0 (без ограничений) и поиграйтесь с upload_max_filesize и post_max_size в соответствии с вашими потребностями.

Надеюсь, это поможет вам решитьВаша проблема.

...