簡體   English   中英

為什么不能通過cURL / PHP生成Excel文件?

[英]Why can't I generate Excel file through cURL/PHP?

在選擇要從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似乎是一個線索。 但是最初的研究沒有幫助我,部分原因是因為我迷路了。

有任何想法嗎?

謝謝!
-傑里米

好吧,我相信CURLOPT_HTTPHEADER為請求設置標題,而不是響應。 至於$_POST去,你是什么意思它不起作用? 您是否為發布請求設置了CURLOPT (默認為get)?

我認為您從根本上誤解了內容交付的方式。 內容類型標題只是指出了期望的格式,但是您仍然必須實際生成該格式的數據。

查看Excel文件格式,這不是一件容易的事。 有一個基於PHP的類,該類使用COM編寫Excel文件(並且僅在Windows服務器上有效): 在這里,我自己並未使用過它。

然后是PHPExcel ,它使用了新的基於XML的Excel格式並獨立於平台工作。 我也不知道,但是看起來不錯。

請記住,始終有可能提供簡單的舊CSV並在Excel中打開它。 它為您提供了更少的選擇(沒有專欄設計等),但是無需任何庫或擴展即可立即使用。

另外,我不確定在這種情況下您想使用cURL嗎? 您沒有嘗試在服務器端下載任何內容,如果我理解正確的話,是嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM