在选择从 MySQL 数据库中获取哪些数据后,我正在尝试使用 post 表单生成一个 excel 文件。我使用 cURL 是因为我本质上想要双重发布:首先保存正在使用的字段的任何设置,然后生成 Excel 文件,所有这些都只需一个按钮。
我有一个 PHP 页面设置了正确的标题,可以从制表符分隔的内容生成一个简单的 Excel 文件(不处理字段中的行尾或制表符,只是保持简单)。如果我直接使用浏览器访问该页面(并在 PHP 中包含虚拟数据),我的浏览器会下载一个 Excel 文件。
我通过 cURL 帖子将数据传递到此页面(如果我不通过 cURL 发送标题--??)。
这是关于我迷路的地方:
如何通过 cURL 将数据创建/下载为 Excel 文件?
我的猜测是与标题有关吗?
在 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
似乎是一个线索。但最初的研究对我没有帮助,部分原因是,正如我所提到的,我迷路了。
有任何想法吗?
谢谢!
-杰里米