由于服务器延迟,文件下载PHP脚本无法正常工作

时间:2012-04-05 10:31:11

标签: php download

我有这个代码来下载文件,但是在sourceforge.net服务器上,文件开始下载前有5秒的延迟(如果你试图在浏览器中加载这个链接,你可以看到它)。脚本完成后,我的文件大小为零。我该如何下载此文件? Thanx提前!

$url = 'http://downloads.sourceforge.net/project/gnucash/gnucash%20%28stable%29/2.4.9/gnucash-2.4.9-setup.exe';
$ch = curl_init($url);
$fp = fopen('/home/content/11/8564211/html/'.substr($url,strrpos($url,'/'),strlen($url)), 'w'); 
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
fclose($fp);

4 个答案:

答案 0 :(得分:1)

Sourceforge使用元刷新标记来开始下载,因为CURLOPT_FOLLOWLOCATION响应Location:标题,它很可能无法帮助。

我认为您将不得不进行som HTML解析以实现您想要做的事情。你必须找到这一行:

<meta http-equiv="refresh" content="5; url=http://downloads.sourceforge.net/project/gnucash/gnucash%20%28stable%29/2.4.9/gnucash-2.4.9-setup.exe?r=&amp;ts=1333621946&amp;use_mirror=switch">

然后你必须从该行获取url并加载它。 Sourceforge可能会使用一些基于cookie或会话的限制器进行此类下载,因此您可能需要对此进行补偿。

我还没有对此进行过测试,但看起来这很接近你必须这样做。

答案 1 :(得分:0)

为了避免PHP中的超时,您可以使用:

set_time_limit($hugetimeout);
在脚本之前

。您可以阅读更多文档here

答案 2 :(得分:0)

你可以试试这个:

$url = 'http://downloads.sourceforge.net/project/gnucash/gnucash%20%28stable%29/2.4.9/gnucash-2.4.9-setup.exe';
$ch = curl_init($url);
$fp = fopen('/home/content/11/8564211/html/'.substr($url,strrpos($url,'/'),strlen($url)), 'w'); 
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_exec($ch);
curl_close($ch);
fclose($fp);

答案 3 :(得分:0)

在下载页面上,有一个直接链接,您可以尝试使用它吗?