通过PHP下载文件

时间:2012-04-19 21:28:18

标签: php curl cron

我在通过PHP下载文件时遇到问题。

有趣的是,我无法追查问题。该代码适用于某些网站,而不适用于其他网站。在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');

1 个答案:

答案 0 :(得分:3)

尝试使用http://www.php.net/manual/en/function.curl-getinfo.php显示有关卷曲请求的信息

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;