Получение CSV через CURL в PHP - PullRequest
       28

Получение CSV через CURL в PHP

0 голосов
/ 23 августа 2011

К сожалению, я не могу использовать ни 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-файл, возвращаемый в браузер.

Спасибо.

Ответы [ 4 ]

4 голосов
/ 23 августа 2011

По умолчанию curl_exec возвращает логическое значение. Вам нужно установить для параметра CURLOPT_RETURNTRANSFER значение 1 или true, чтобы получить возвращенную полезную нагрузку.

1 голос
/ 23 августа 2011

Я считаю, что curl_exec($ch) не вернет строку, если вы сначала не используете curl_setopt($ch,CURLOPT_RETURNTRANSFER,true).

1 голос
/ 23 августа 2011

Установите для CURLOPT_RETURNTRANSFER значение 1, чтобы получить что-то в $ tmp, в противном случае curl_exec выводит csv напрямую (и перед отправкой заголовков). Смотри http://www.php.net/manual/en/function.curl-setopt.php

1 голос
/ 23 августа 2011

Хорошо, может быть пара мест, которые пошли не так, скорее всего, ключом будет переменная $ 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);

Может дать вам представление о том, что идет не так

...