Страница 1 из 1
CURL-загрузка файлов на сервер размером более 2-х ГБ
Добавлено: 14 окт 2017, 12:41
Vitas
$fp = fopen($file, 'r');
curl_setopt($ch, CURLOPT_INFILE, $fp);
curl_setopt($ch, CURLOPT_INFILESIZE, $filesize);
curl_setopt($ch, CURLOPT_PUT, true);
curl_setopt($ch, CURLOPT_UPLOAD, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
Использую OpenServer 5.2.7 x64 на Windows 10 x64, модуль Apache 2.4 x64, php 5.6 x64
Загружаю файл на зарубежный сервер (находящийся в интернете) методом PUT.
После загрузки от сервера в ответе получаю [bytesTransferred] => 2147221504, [bytesTotal] => 2822977103
То есть, из почти 3-х гб файла передается только 2 гб.
Использование curl_setopt($ch, CURLOPT_RESUME_FROM, $start_upload_from_bytes); не помогает
При этом, на другом локальном сервере, запущенном на MacOS, никаких проблем с передачей больших файлов этим же скриптом не возникает.
Пожалуйста, помогите мне решить эту проблему.
Re: CURL-загрузка файлов на сервер размером более 2-х ГБ
Добавлено: 16 окт 2017, 12:32
Максим
Попробуйте дополнить свой скрипт примерами отсюда:
https://github.com/Danack/Youtube-Autou ... beCurl.php
И добавьте на всякий случай:
curl_setopt($ch, CURLOPT_TIMEOUT, 10000 );
Re: CURL-загрузка файлов на сервер размером более 2-х ГБ
Добавлено: 16 окт 2017, 12:46
Vitas
Максим, спасибо.
Нет, не на него. Но тоже думаю что на сервера гугла.
Просмотрел код - кажется, не заметил чего-то вспомогательного.
Когда я указываю
curl_setopt($ch, CURLOPT_RESUME_FROM, $start_upload_from_bytes)
($start_upload_from_bytes = 2147221504), то от сервера не приходит никакого ответа (в т.ч. нет заголовков) - думаю, fopen не хочет читать файл начиная с этого байта.
Re: CURL-загрузка файлов на сервер размером более 2-х ГБ
Добавлено: 16 окт 2017, 13:03
Максим
CURLOPT_BUFFERSIZE пробовали?
Re: CURL-загрузка файлов на сервер размером более 2-х ГБ
Добавлено: 16 окт 2017, 13:08
Vitas
CURLOPT_BUFFERSIZE не использовал, но, callback-функции также не использую.
Re: CURL-загрузка файлов на сервер размером более 2-х ГБ
Добавлено: 19 окт 2017, 10:18
Vitas
Доброго утра. Все еще не решил проблему к сожалению.
Re: CURL-загрузка файлов на сервер размером более 2-х ГБ
Добавлено: 22 окт 2017, 09:57
Vitas
Пожалуйста, помогите мне разобраться в этой ситуации.
Re: CURL-загрузка файлов на сервер размером более 2-х ГБ
Добавлено: 24 окт 2017, 02:35
Максим
Попробуйте в конфиге php увеличьте раза в 2 параметр memory_limit и убедитесь что у вас +1 ГБ имеется в запасе на машине.
В скрипт добавьте такое:
set_time_limit(0);
curl_setopt($ch, CURLOPT_TIMEOUT, 10000 );
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Length: ' . strlen($data)));
и возможно уберите параметр
curl_setopt($ch, CURLOPT_UPLOAD, true);
он вроде как нужен при загрузке по http POST, а не CURLOPT_PUT, хотя может это и не так.
Может что-то поможет. Заодно попробуйте на PHP 7.1. А вообще я поискал на эту тему в сети, оказывается был такой баг в Curl (в Windows системах невозможно было работать с файлами более 2gb), но это для 32 битной версии curl и исправили этот баг еще в 2016 году. Поэтому ниже чем php 5.6 версию не пробуйте даже.
Ну а докачка в вашем скрипте не работает скорее всего потому, что там нужно Accept-Ranges, Content-Range и т.д. прикручивать.
Re: CURL-загрузка файлов на сервер размером более 2-х ГБ
Добавлено: 24 окт 2017, 17:39
Vitas
Большое спасибо.
php использую с самого начала 5.6 x64.
Но, от сервера все равно приходит ответ ..."status":"IN_PROGRESS","bytesTransferred":2147221504,"bytesTotal":2822977118...
То есть, функцией fopen читается именно это определенное количество байтов.