0

PHP経由でファイルをダウンロードするのに問題があります。

面白いのは、問題を追跡できないことです。このコードは、一部のWebサイトでは機能しますが、他のWebサイトでは機能しません。WebサイトからバックアップファイルをダウンロードするのはPHPのループです(リクエストの前にスリープで遅延が発生します)。

問題を追跡できないのはなぜですか?コードを手動で実行すると、機能する(ファイルをダウンロードする)ためです。また、CRONで実行すると、ファイルがダウンロードされる場合と、ファイルがダウンロードされない場合があります(2つの空の新しい行のみがダウンロードされます)。

ダウンロードはcurlを使用します(fsockopenとfreadを使用して別のコードで試しました)。

誰かが私がこれをどのように解決できるかについての考えを持っていますか?

正しいオプションを設定することにより、CURLでヘッダーが削除されます。

function fetch_url($url) {
    $c = curl_init();
    curl_setopt($c, CURLOPT_URL, $url);
    curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($c, CURLOPT_TIMEOUT, 20);

    if ($cookiejar != '')  {
        curl_setopt($c, CURLOPT_COOKIEJAR, $cookiejar);
        curl_setopt($c, CURLOPT_COOKIEFILE, $cookiejar);
    }

    curl_setopt($c, CURLOPT_HEADER , false);
    curl_setopt($c, CURLOPT_SSL_VERIFYHOST , false);
    curl_setopt($c, CURLOPT_SSL_VERIFYPEER , false);
    curl_setopt($c, CURLOPT_FOLLOWLOCATION , true);
    curl_setopt($c, CURLOPT_AUTOREFERER , true);
    curl_setopt($c, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12');
    $con = curl_exec($c);
    curl_close($c);
    return $con;
}

echo fetch_url('http://www.example.com/zip.zip');
4

1 に答える 1

3

http://www.php.net/manual/en/function.curl-getinfo.phpを使用して、curlリクエストに関する情報を表示してみてください

echo curl_errno($c);
print_r(curl_getinfo($c));

また、おそらくそれは他の場所のコードにありますが、ファイルのエコー用のコンテンツタイプヘッダーが表示されません

$file = fetch_url('http://www.example.com/zip.zip');
header('Content-type: application/zip');
header('Content-Disposition: attachment; filename="zip.zip"');
header("Content-length: " . strlen($file));
echo $file;
于 2012-04-19T21:35:09.000 に答える