【问题标题】:Downloading files via PHP通过 PHP 下载文件
【发布时间】:2012-04-19 21:28:18
【问题描述】:

我在通过 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');

【问题讨论】:

  • 好的。非常感谢。
  • 安全问题:包含这些备份的网络服务器是否有办法授予您作为合法用户的访问权限 - 或者 Joe Public 下载这些备份的副本是否无关紧要?
  • 您应该使用 curl_error 并将其记录到 txt 文件或其他文件中,然后您将能够追踪它为什么不起作用,可能有很多原因(文件太大,主要超过 2GB,标题错误、损坏或不完整的数据、gzip 编码或超时)...记录每个 curl 请求并采取一些安全措施

标签: php curl cron


【解决方案1】:

尝试使用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;

【讨论】:

  • 嗨,谢谢,我会试试的。如果它不起作用,将使用转储的信息再次发布问题。
  • 问题不在于标题,因为我实际上将下载的内容保存到文件中。
猜你喜欢
  • 2015-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-19
  • 2011-10-03
  • 2013-05-27
  • 1970-01-01
相关资源
最近更新 更多