我正在尝试使用post表单来选择从MySQL数据库中获取哪些数据后生成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
似乎是一个线索。但最初的研究对我没有帮助,部分是因为,正如我所提到的,我迷失了。
有什么想法吗?
谢谢! -Jeremy
答案 0 :(得分:0)
我相信CURLOPT_HTTPHEADER
设置请求的标头...而不是响应。就$_POST
而言,你的意思是什么不起作用?您是否为帖子请求设置了CURLOPT
(默认为get)?
答案 1 :(得分:0)
我认为你从根本上误解了内容的传递方式。内容类型标题只是指出了预期的格式,但您仍然必须以该格式生成数据。
查看Excel文件格式,这不是一项简单的任务。有一个基于PHP的类使用COM编写Excel文件(仅适用于Windows服务器):here我自己没有使用它。
然后有PHPExcel使用新的基于XML的Excel格式并独立工作平台。我也不知道,但它看起来不错。
请记住,总是有可能提供普通的旧CSV,并在Excel中打开它。它留下了很少的选项(没有列设计等),但是可以在没有任何库或扩展的情况下开箱即用。
另外,我不确定在这种情况下你想用cURL做什么?你不是试图在服务器端下载任何东西,如果我理解正确的,是吗?