2012-04-19 143 views
0

我有通过PHP下载文件的问题。通过PHP下载文件

有趣的是,我无法追查这个问题。该代码适用于某些网站,并不适合其他网站。它是PHP中的循环,从网站下载备份文件(在请求前有睡眠延迟)。

为什么我找不到问题? 因为当我手动运行代码时,它工作(下载文件)。当它由CRON运行时,它有时会下载文件,有时它不下载文件(只下载2个空的新行)。

下载是卷曲(我也尝试了与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'); 
+0

好的。非常感谢你。 – BetterMan21 2012-04-19 21:31:59

+0

安全问题:包含这些备份的Web服务器是否有办法授予您作为合法用户的访问权限 - 或者Joe Public是否下载这些备份的副本并不重要? – halfer 2012-04-19 21:37:48

+0

您应该使用curl_error并将其记录到txt文件或其他东西,然后您将能够跟踪为什么它不能正常工作,可能有多种原因(文件太大,主要是超过2GB,文件头错误,文件损坏或数据不完整,gzip编码或超时)...记录每个卷曲请求并将一些安全设置到位 – 2012-04-19 21:44:45

回答

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; 
+0

嗨,谢谢你会尝试。如果它不起作用,将再次将问题与转储的信息一起发布。 – BetterMan21 2012-04-19 21:36:53

+0

问题不在标题中,因为我实际上将下载的内容保存到文件中。 – BetterMan21 2012-04-19 21:39:03