2013-12-21 111 views
0

我已經使用此代碼將45 MB的zip文件從A服務器複製到B服務器。將大型文件從服務器下載或複製到服務器

<?php 
set_time_limit(0); 
$file = 'https://www.xxxxx.com/Products.zip'; 
$newfile = 'Products.zip'; 

if (copy($file, $newfile)) { 
    echo "Copy success!"; 
}else{ 
    echo "Copy failed."; 
} 
?> 

複製17 MB後它給服務器錯誤。

我用一些其他的代碼一樣

<?php 
set_time_limit(0); 
    $url = 'https://www.mydomaind.com/Products.zip'; 

    $path = 'Products.zip'; 

    $ch = curl_init($url); 

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

    $data = curl_exec($ch); 

    curl_close($ch); 

    file_put_contents($path, $data); 

echo 'done'; 

?> 

另外一個

<?php 
set_time_limit(0); 
$source =("https://www.mydomaind.com/Products.zip"); 
$destination = 'Produtcs.zip'; 

$data = file_get_contents($source); 

$handle = fopen($destination, "w"); 
fwrite($handle, $data); 
fclose($handle); 
echo 'done'; 

?> 

這些最後的輕鬆下載或從服務器複製到服務器代碼下載或複製文件,如5 MB。 但是,如果需要50 MB的同一工作。給出錯誤。

請幫我怎麼做。 謝謝

+0

「它給錯誤halp」不是PHP拋出的有效錯誤消息。 – PeeHaa

+0

我得到500內部服務器錯誤 – lospicos

回答

0

你打php限制。

往裏php.ini並達到極限

; Maximum allowed size for uploaded files. 
upload_max_filesize = 40M 

; Must be greater than or equal to upload_max_filesize 
post_max_size = 40M 

附:你不應該使用PHP在服務器之間發送文件。

更好地使用SSH和SCP。 PHP可以用exec()來執行命令,而不是使用shell來發送文件。

+0

我不能去我的託管php.ini。不讓我。我在godaddy上。 – lospicos

+0

嘗試ini_set() - 如果未禁用。否則,找到一個不同的主機或去VPS。編輯:你確定你已經檢查了你的GoDaddy控制面板?在大多數主機上,有一個選項... – RobAtStackOverflow

+0

我試過ini集,ini_set('upload_max_filesize','60'); ini_set('post_max_size','60');我是waiitng。 – lospicos

0

如果你打你的極限,這裏是另一個關於如何設置這麼回答的.htaccess

Changing upload_max_filesize on PHP

+0

ini_set('upload_max_filesize','60');函數ini_set( '的post_max_size', '60');使用這沒有工作。我得到500內部服務器錯誤 – lospicos

0

對不起,這裏迴應MODS,無法發表評論呢!
已經嘗試將拉鍊分爲2/3部分?
Imho會解決你的問題,沒有任何錯誤從服務器端。

+0

我試圖像塊大小的東西。它沒有work.ıf你知道我可以做得更好,請告訴我 – lospicos

+0

也許,只是也許這[link](http://stackoverflow.com/questions/4357073/on-the-fly-zipping-streaming-of- php中的大文件或其他方式?answertab = active#tab-top)他們在哪裏談論即時壓縮/ downloaden(如何壓縮)可以幫助你一點? – Charles

0

請嘗試使用此代碼,以便在服務器上不使用可用的RAM。

function chunked_copy() { 
    # write with buffer, 1 meg at a time, adjustable. 
    $buffer_size = 1048576; 
    $ret = 0; 
    $fin = fopen("http://www.example.com/file.zip", "rb"); #source 
    $fout = fopen("file.zip", "w"); #destination 
    while(!feof($fin)) { 
     $ret += fwrite($fout, fread($fin, $buffer_size)); 
    } 
    fclose($fin); 
    fclose($fout); 
    return $ret; # return number of bytes written 
}