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

ダウンロード ページに直接リンクがあります。代わりにそれを使用してみてください。

于 2012-04-05T11:29:43.147 に答える
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 に答える