【问题标题】:Grabbing CSV over cURL in PHP在 PHP 中通过 cURL 抓取 CSV
【发布时间】:2011-08-23 12:08:14
【问题描述】:

不幸的是,我无法使用 fopen 或 file_get_contents,所以我的工作脚本使用 cURL 已损坏:

$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$tmp = curl_exec($ch);
curl_close($ch);
header("Content-type: application/csv");
header(Content-Disposition: attachment; filename=$start.csv");
header("Pragma: no-cache");
header("Expires: 0");
echo $tmp;

进入的 URL 是一个 CSV 文件 - 之前的 fopen 版本也有效。我得到的只是一个返回到浏览器的空 CSV 文件。

谢谢。

【问题讨论】:

  • 在发送csv headers之前先试试看有没有输出

标签: php curl csv fopen


【解决方案1】:

默认情况下curl_exec 返回一个布尔值。您需要将CURLOPT_RETURNTRANSFER 选项设置为1true 以获取返回的传输负载。

【讨论】:

  • 这个选项可能是原因
【解决方案2】:

好吧,可能有几个地方出了问题,很可能 $tmp 变量是你的关键。

我假设 $url 和 $start 变量已正确声明

我建议的第一件事是按照以下方式做一些事情:

    if( ! $tmp = curl_exec($ch))
        {
           echo curl_error($ch);
        } 

    else
    {

        header("Content-type: application/csv");
        header("Content-Disposition: attachment; filename=$start.csv");
        header("Pragma: no-cache");
        header("Expires: 0");
        echo $tmp;
    }
    curl_close($ch);

可能会让你知道出了什么问题

【讨论】:

  • 以上代码是获取 CSV 还是只是显示 curl 请求的更多信息?
【解决方案3】:

将 CURLOPT_RETURNTRANSFER 设置为 1,这样您就可以在 $tmp 中输入一些内容,否则 curl_exec 会直接输出 csv(在您发送标头之前)。见http://www.php.net/manual/en/function.curl-setopt.php

【讨论】:

    【解决方案4】:

    我相信curl_exec($ch) 不会返回字符串,除非你先使用curl_setopt($ch,CURLOPT_RETURNTRANSFER,true)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-14
      • 2012-02-22
      相关资源
      最近更新 更多