Я пытаюсь использовать почтовую форму для создания файла Excel после выбора данных, которые нужно извлечь из базы данных MySQL. Я использую cURL, потому что по сути хочу сделать двойной пост: сначала сохранить все настройки используемых полей, а затем создать файл Excel, все с помощью одной кнопки.
У меня есть страница PHP, настроенная с правильными заголовками, чтобы генерировать простой файл Excel из содержимого, разделенного табуляцией (не имея дело с окончаниями строк или табуляциями в полях, просто сохраняя это простым). Если я попаду на эту страницу напрямую из браузера (и включу фиктивные данные в PHP), мой браузер загрузит файл Excel.
Я передаю данные на эту страницу через сообщение cURL (если я не отправляю заголовки через cURL - ??).
А вот где я заблудился:
Как мне создать / загрузить данные в виде файла Excel через cURL?
Полагаю, это что-то делать с заголовками?
Настройка заголовков в PHP работала довольно хорошо:
header("Content-Disposition: attachment; filename=\"$filename\"");
header("Content-Type: application/vnd.ms-excel; charset=UTF-8");
header("Pragma: public");
header("Cache-control: max-age=0");
Когда я установил их через cURL, я сделал это (ну, это все мои варианты cURL):
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $foo);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Disposition: attachment; filename=test.xls',
'Content-Type: application/vnd.ms-excel; charset=UTF-8',
'Pragma: public',
'Cache-control: max-age=0'
));
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$post);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
$response_code = curl_exec($ch);
if ($response_code!== false) {
echo 'response: '.$response_code;
} else {
echo 'error: '.curl_error($ch);
}
curl_close ($ch);
Когда я делаю это, код cURL $ response_code, который я получаю на странице отправки, выглядит следующим образом (я разбил строки - все это одна строка):
HTTP/1.1 200 OK
Date: Sun, 31 Jan 2010 20:43:38 GMT
Server: Apache
Transfer-Encoding: chunked
Content-Type: text/html
Когда я не включаю заголовки через cURL, работает $ _POST. Но когда я включаю заголовки, $ _POST не работает.
Это Transfer-Encoding: chunked
похоже на ключ. Но первоначальные исследования мне не помогли, отчасти потому, что, как я уже говорил, я потерялся.
Есть идеи?
Спасибо!
-Jeremy