我正在尝试使用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);
}
答案 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);
}
?>