Страница 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 читается именно это определенное количество байтов.