0

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

$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

4 回答 4

1

Sourceforge 使用元刷新标签开始下载,因为 CURLOPT_FOLLOWLOCATION 响应 Location: 标头,它很可能无济于事。

我认为你将不得不做一些 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 或会话的阻止程序,因此您可能必须对此进行补偿。

我尚未对此进行测试,但看起来这与您必须执行此操作的方式很接近。

于 2012-04-05T10:48:54.257 回答
0

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

set_time_limit($hugetimeout);

在你的脚本之前。您可以在此处阅读更多文档。

于 2012-04-05T10:34:44.490 回答
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);
于 2012-04-05T10:45:10.423 回答
0

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

于 2012-04-05T11:29:43.147 回答