К сожалению, я не могу использовать 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-файл, который возвращается в браузер.
Благодарю.
Хорошо, может быть несколько мест, которые поступили не так, скорее всего, переменная $ 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);
Можете дать вам представление о том, что происходит не так
По умолчанию curl_exec
возвращает логическое значение. Вам нужно установить для параметра CURLOPT_RETURNTRANSFER
значение 1
или true
чтобы вернуть возвращаемую полезную нагрузку.
Установите CURLOPT_RETURNTRANSFER в 1, чтобы получить что-то в $ tmp, иначе curl_exec выводит csv напрямую (и перед отправкой заголовков). См. http://www.php.net/manual/en/function.curl-setopt.php
Я считаю, что curl_exec($ch)
не вернет строку, если вы curl_setopt($ch,CURLOPT_RETURNTRANSFER,true)
не используете curl_setopt($ch,CURLOPT_RETURNTRANSFER,true)
.