2013-12-21 108 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 
}