2013-09-12 3 views
1

Я написал скрипт PHP, который использует CURL для передачи больших файлов с одного сервера Windows на другой. Оба работают на IIS, у которого ограничение на загрузку файлов ограничено 2 ГБ. Мой процесс отлично подходит для файлов размером менее 2 ГБ. Однако он не работает для файлов> 2 ГБ.Curl chunked uploads with PHP

Я слышал, что CURL может иметь возможность отправлять файлы в куски, что может решить мою проблему. Однако я не могу найти хороших примеров того, как это сделать. Мой текущий рабочий код размещен ниже. Кто-нибудь знает, как изменить его, чтобы отправлять мои файлы в куски (т. Е. Куски 100 МБ)?

$postVars = array("file1" => $fileContents1, 
        "file2" => $fileContents2, 
        "outputPath" => $outputPath); 

// Initializing curl 
$ch = curl_init(); 

// Configuring curl options 
curl_setopt($ch, CURLOPT_URL,$url); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, false); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 
curl_setopt($ch, CURLOPT_VERBOSE, false); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_FORBID_REUSE, true); 
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true); 
curl_setopt($ch, CURLOPT_BUFFERSIZE, '64000'); 
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true); 
curl_setopt($ch, CURLOPT_SSLVERSION, '3'); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: multipart/form-data')); 
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"); 
curl_setopt($ch, CURLOPT_POSTFIELDS,$postVars); 

echo "Sending files...\n"; 
curl_setopt($ch, CURLOPT_TIMEOUT, 9999); 

if(curl_exec($ch) === false) 
{ 
    echo 'Curl error: ' . curl_error($ch); 
} 
else 
{ 
    echo 'Operation completed without any errors'; 
} 

$info = curl_getinfo($ch); 
print_r($info); 
curl_close($ch); 
+0

AFAIK PHP не может надлежащим образом обрабатывать загрузку файла размером более 2 ГБ. Я потратил много времени на создание обработчика загрузки python, чтобы обойти это. – Sammitch

+0

Так что этого не может быть сделано? Должен быть какой-то способ, с помощью которого PHP может обрабатывать> 2 ГБ загрузки. – scott80109

+0

Я не помню специфику, но у PHP есть что-то, что забилось в его ядре даже в 64-битных версиях, и [я не думаю, что оно еще было решено] (https://bugs.php.net/ bug.php? id = 27792), если вы не хотите скомпилировать собственный двоичный файл PHP. – Sammitch

ответ

0

plupload это библиотека JavaScript/PHP, и это довольно проста в использовании и позволяет отрывов от нужного размера.

Он использует HTML5. I found only the way to uploading a large file is PlUpload Library и сделать приложение FileManager. Надеюсь, это тоже поможет.