PHP将大文件下载到服务器,大小超过1GB

时间:2014-05-14 19:38:31

标签: php file curl download

我正在尝试使用bellow php-curl脚本直接在我的服务器上下载视频文件,但它在获取120mb左右的文件后停止下载,文件超过500mb,其中一些是1gb和1.5gb in尺寸。我搜索了很多,但没有解决任何问题。我正在共享主机上运行。

if ($url) {
    $file_loc = 'moviez/' . $name;
    $fp = fopen($file_loc, 'w+');
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_TIMEOUT, 0);
    curl_setopt($ch, CURLOPT_FILE, $fp);
    curl_exec($ch);
    curl_close($ch);
    fclose($fp);
}

3 个答案:

答案 0 :(得分:0)

我怀疑脚本可能会超时。如果我没记错的话默认是30秒。您的主机也可能限制脚本运行时间。您可以使用ini_set(' max_execution_time',nnn)来增加超时。

编辑:更好的是,使用set_time_limit(),这将引发错误:

Warning: set_time_limit(): Cannot set time limit in safe mode

如果你的主人限制你。

答案 1 :(得分:0)

正如Luke所说,您的脚本在下载完成之前会超时。 设置max_execution_time的问题是只影响上传。

您的解决方案应由readfile()或file_get_contents()处理。这里有很好的资料来源:http://www.ibm.com/developerworks/library/os-php-readfiles/index.html?ca=drs

编辑:Max_execution_time和max_input_time之间的轻微混淆。

编辑二:示例,

<?php
$file = $_GET['file'];
header ("Content-type: octet/stream");
header ("Content-disposition: attachment; filename=".$file.";");
header("Content-Length: ".filesize($file));
readfile($file);
exit;
?>


<a href="direct_download.php?file=batman.mkv">Download the batman</a>

答案 2 :(得分:0)

检查此脚本。下载大于500mb的文件对我来说效果很好。

Light Weight PHP Script To Download Remote File To Local Server                    

<?php
// maximum execution time in seconds
set_time_limit (24 * 60 * 60);
if (!isset($_POST['submit'])) die();
// folder to save downloaded files to. must end with slash
$destination_folder = 'files/';
$url = $_POST['url'];
$newfname = $destination_folder . basename($url);
$file = fopen ($url, "rb");
if ($file) {
  $newf = fopen ($newfname, "wb");
if ($newf)
  while(!feof($file)) {
    fwrite($newf, fread($file, 1024 * 8 ), 1024 * 8 );
  }
}
if ($file) {
  fclose($file);
}
if ($newf) {
  fclose($newf);
}
?>