Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: CURL - отправка большого файла через POST

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
NeuroZ
Отправлено: 05 Сентября, 2016 - 17:52:31
Post Id



Посетитель


Покинул форум
Сообщений всего: 393
Дата рег-ции: Апр. 2012  


Помог: 2 раз(а)




Всем привет!
Столкнулся с проблемой, бьюсь уже второй день...
Не могу отправить большой файл через CURL.
PHP:
скопировать код в буфер обмена
  1. $curl = curl_init();
  2.         curl_setopt($curl, CURLOPT_URL, 'http://site.ru/index.php?1c.upload&filename=' . $filename);
  3.         curl_setopt($curl, CURLOPT_COOKIE, $cookie);
  4.         curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  5.         curl_setopt($curl, CURLOPT_POST, true);
  6.         curl_setopt($curl, CURLOPT_POSTFIELDS, $files); //Массив с файлом полученный через полный путь к zip архиву
  7.         echo $out = curl_exec($curl);

Если отправляю архив 10 Mb - всё успешно передается.
Если отправляю 200 Mb - чуть чуть грузится, а потом страница обновляется, и вообще никакого ответа от сервера.

echo curl_getinfo($curl, CURLINFO_HTTP_CODE);
возвращает 0

в php.ini на сервере-отправщике стоит
upload_max_filesize = 500M
post_max_size = 500M

Что еще может быть не так?

(Отредактировано автором: 06 Сентября, 2016 - 10:20:41)

 
 Top
IllusionMH
Отправлено: 05 Сентября, 2016 - 19:16:17
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




NeuroZ, через какое время обрывается. Может ограничение на время выполнения max_execution_time или вроде того?
 
 Top
NeuroZ
Отправлено: 06 Сентября, 2016 - 10:44:57
Post Id



Посетитель


Покинул форум
Сообщений всего: 393
Дата рег-ции: Апр. 2012  


Помог: 2 раз(а)




IllusionMH пишет:
через какое время обрывается. Может ограничение на время выполнения max_execution_time или вроде того?

Сбрасывался через 30сек.
Поставил
max_execution_time = 3600
max_input_time = 3600
на сервере приемщике и отправщике. Никаких изменений.

Добавил вывод ошибок. Вот что получается:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. (
  3.     [url] => myurl
  4.     [content_type] =>
  5.     [http_code] => 0
  6.     [header_size] => 0
  7.     [request_size] => 306
  8.     [filetime] => -1
  9.     [ssl_verify_result] => 0
  10.     [redirect_count] => 0
  11.     [total_time] => 29.328
  12.     [namelookup_time] => 0.016
  13.     [connect_time] => 0.031
  14.     [pretransfer_time] => 0.031
  15.     [size_upload] => 116490450
  16.     [size_download] => 0
  17.     [speed_download] => 0
  18.     [speed_upload] => 3971987
  19.     [download_content_length] => -1
  20.     [upload_content_length] => 175979724
  21.     [starttransfer_time] => 1.045
  22.     [redirect_time] => 0
  23.     [redirect_url] =>
  24.     [primary_ip] => serverIP
  25.     [certinfo] => Array
  26.         (
  27.         )
  28.  
  29.     [primary_port] => 80
  30.     [local_ip] => 192.168.0.45
  31.     [local_port] => 1854
  32. )
  33. [b]56, Recv failure: Connection was reset[/b]
  34.  


Нашел в интернете инфу, что нужно добавить
PHP:
скопировать код в буфер обмена
  1. curl_setopt($curl, CURLOPT_HTTPHEADER, ['Expect:']);

но не помогло. В первый раз скрипт просто висел (грузится бесконечно).
Второй раз выдал отладочную инфу с ошибкой:
55, Send failure: Connection was aborted

Начал гуглить, нашел инфу о max_execution_time (который уже увеличил)
Еще нашел, что можно увеличить таймаут самого курла:

Изменения по прежнему не принесли результатов...
Разве что снова начали попеременно выбрасываться ошибки
55, Send failure: Connection was reset
56, Recv failure: Connection was reset


Отправку осуществляю с локальной машины Apache (Open Server) PHP7 на удаленный сервер PHP7 в режиме CGI
(Добавление)
Даже добавил в каждый файл (приема и отправки) set_time_limit(3600);
Но все равно обрывы. Больше всего смущает именно
[total_time] => 29.953 (который постоянно варьируется около этого значения)
 
 Top
Мелкий Супермодератор
Отправлено: 06 Сентября, 2016 - 11:21:55
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




max_execution_time и set_time_limit неприменимы на обоих концах:
на отправителе потому что время затраченное на ожидание сети не учитывается (ну кроме всякой экзотики вроде windows)
на получателе потому что php ещё не начал выполняться.

Проверяйте таймауты принимающего веб-сервера. И client_max_body_size (или его аналог) так же именно на самом веб-сервере.


-----
PostgreSQL DBA
 
 Top
NeuroZ
Отправлено: 06 Сентября, 2016 - 12:32:08
Post Id



Посетитель


Покинул форум
Сообщений всего: 393
Дата рег-ции: Апр. 2012  


Помог: 2 раз(а)




Мелкий пишет:
Проверяйте таймауты принимающего веб-сервера. И client_max_body_size (или его аналог) так же именно на самом веб-сервере.

Большое спасибо! Это здорово помогло!
Теперь ошибки при передачи нет и size_upload == upload_content_length

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

PHP:
скопировать код в буфер обмена
  1. [import20160825] => Array
  2.         (
  3.             [name] =>
  4.             [type] =>
  5.             [tmp_name] =>
  6.             [error] =>
  7.             [size] =>
  8.         )
 
 Top
Мелкий Супермодератор
Отправлено: 06 Сентября, 2016 - 12:55:13
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Дайте лучше var_dump. С типами как-то удобнее.
Попробуйте браузером отправить, отлаживать передатчик и приёмник по отдельности.


-----
PostgreSQL DBA
 
 Top
NeuroZ
Отправлено: 06 Сентября, 2016 - 13:54:08
Post Id



Посетитель


Покинул форум
Сообщений всего: 393
Дата рег-ции: Апр. 2012  


Помог: 2 раз(а)




Мелкий пишет:
Дайте лучше var_dump. С типами как-то удобнее.
Попробуйте браузером отправить, отлаживать передатчик и приёмник по отдельности.

PHP:
скопировать код в буфер обмена
  1. object(CURLFile)#684 (3) {
  2.  ["name"]=>
  3.   string(64) "D:\OpenServer\domains\autosite\images/uploads/import20160825.zip"
  4.   ["mime"]=>
  5.   string(0) ""
  6.   ["postname"]=>
  7.   string(0) ""
  8. }
  9.  
  10. array(1) {
  11.   ["import20160825"]=>
  12.   array(5) {
  13.     ["name"]=>
  14.     NULL
  15.     ["type"]=>
  16.     NULL
  17.     ["tmp_name"]=>
  18.     NULL
  19.     ["error"]=>
  20.     NULL
  21.     ["size"]=>
  22.     NULL
  23.   }
  24. }

Как бы не сильно много информации... (
(Добавление)
Может быть есть какая-то директива на ограничение максимального места в tmp_files ? И ее тоже надо на сервере поправить ? (имеется в виду помимо upload_max_filesize)
(Добавление)
Разобрался. Пока отбой тревоге. Проверял массив по привычке, используя внутренние функции фреймворка... Оказалось что-то там не чисто, потому как в глобальном $_FILES файл есть, а в $files объекте фреймворка его нет...
Похоже баг детектед...

(Отредактировано автором: 06 Сентября, 2016 - 14:37:20)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB