2010-01-31 95 views
0

我想在選擇從MySQL數據庫中抓取哪些數據後使用一個表單來生成一個excel文件。我正在使用cURL,因爲我基本上想要雙重張貼:首先保存使用哪些字段的任何設置,然後使用一個按鈕生成Excel文件。爲什麼我無法通過cURL/PHP生成Excel文件?

我有一個PHP頁面設置正確的標題,以生成一個簡單的Excel文件從標籤分隔的內容(不處理w /行結尾或字段中的標籤,只是保持簡單)。如果我直接用瀏覽器打開該頁面(並在PHP中包含虛擬數據),我的瀏覽器會下載一個Excel文件。

我通過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"); 

當我通過捲曲設置他們,而不是,我這樣做(當然,這些都是我的捲曲選項):

$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

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

看着Excel文件格式,這不是一項簡單的任務。有一個基於PHP的類使用COM來編寫一個Excel文件(僅適用於Windows服務器):here雖然我自己並沒有使用它。

然後是PHPExcel,它使用新的基於XML的Excel格式並獨立運行平臺。我也不知道,但它看起來不錯。

請記住,總是有可能提供普通的舊CSV,並在Excel中打開它。它留給你很少的選擇(沒有列設計等)。),但無需任何庫或擴展即可使用。

此外,我不確定你想在這種情況下使用cURL?如果我理解正確,你不是想在服務器端下載任何東西,對嗎?

+0

謝謝 - 是的,我真的只是生成一個CSV(實際上,它是製表符分隔)。通過添加標題,瀏覽器自動生成文件。當我直接訪問頁面時,這工作正常。 – 2010-01-31 21:01:33

+1

啊。但是,我不明白這個問題是什麼?你在用CURL做什麼? – 2010-01-31 21:02:32

+0

您是否在尋找如何在CURL請求中包含文件?然後,也許這可以幫助你:http://dtbaker.com.au/random-bits/uploading-a-file-using-curl-in-php.html – 2010-01-31 21:03:40

0

那麼我相信CURLOPT_HTTPHEADER設置請求的標題...不是響應。至於$_POST是什麼意思,它不工作?您是否爲CURLOPT設置了發佈請求(默認爲獲取)?

+0

感謝您的快速響應! - 我正在編輯我的問題以包含我的整個'CURLOPT'設置。 當我包含'CURLOPT_HTTPHEADER'(和'CURLOPT_HEADER')時,$ _POST數據不會顯示在回顯的'$ response_code'中。但是,當我跳過cURL頭文件時,$ _POST數據確實顯示在響應中。 – 2010-01-31 21:04:40

+0

如果您手動設置標頭,您可以手動設置帖子標題以及我認爲。正如我之前所說的,你不能控制響應頭,這些頭由服務器提供的響應決定。如果你試圖上傳文件 - 我很確定這個文件的頭文件不重要,因爲它不會把它寫成文件元數據 - 這個MIME類型只會被接收客戶端使用 - 在這裏是服務器。他們不會對在上傳到服務器上的文件進行訪問時發生的情況產生任何影響。 – prodigitalson 2010-01-31 21:07:46

相關問題