當然經過幾個小時的思考這個問題,我的問題的第一個評論讓我立即解決它。PHP fopen包含不需要的內容
問題是,儘管我在頁面頂部的自己的函數中包含了這段代碼,但我只是在$ _POST數組中設置了某個標誌時才調用它。我直到PHP文件結束時才檢查標誌。我在該功能之前移動了該檢查,並且它工作正常。
原來的問題是如下:
我試圖使用則fopen()函數在PHP輸出CSV文件,雖然它包含了我想要的數據,它也包含了整個在我真正想要輸出的內容之前,頁面的HTML結構以及內聯樣式表。我使用此代碼(從here)幾乎沒有改變。我很熟悉PHP流和輸出,所以我從我的希望是一個堅實的基礎開始:
$fileName = 'somefile.csv';
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header('Content-Description: File Transfer');
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename={$fileName}");
header("Expires: 0");
header("Pragma: public");
$fh = @fopen('php://output', 'w');
global $wpdb;
$query = "SELECT * FROM `{$wpdb->prefix}my_table`";
$results = $wpdb->get_results($query, ARRAY_A);
$headerDisplayed = false;
foreach ($results as $data) {
// Add a header row if it hasn't been added yet
if (!$headerDisplayed) {
// Use the keys from $data as the titles
fputcsv($fh, array_keys($data));
$headerDisplayed = true;
}
// Put the data into the stream
fputcsv($fh, $data);
}
// Close the file
fclose($fh);
// Make sure nothing else is sent, our file is done
exit;
我的假設是,這個例子的目的是要被包含在其自己的外部PHP文件,但由於對於我正在處理的約束,我試圖將其包含在內聯中。我用輸出緩衝了一下,但沒有獲得積極的結果,但是這些PHP文檔相當稀少,所以可能會丟失一些東西。
內聯如何?你能告訴我們這個代碼是如何包含在你的其他代碼中的嗎? – webbiedave 2012-03-08 17:35:47
相信與否,你的問題實際上解決了這個問題:) 問題是,儘管我在頁面的頂部包含了它自己的函數中的這段代碼,但我只是在設置了某個標誌$ _POST數組。我直到PHP文件結束時才檢查標誌。我在該功能之前移動了該檢查,並且它工作正常。 非常感謝! – Peter 2012-03-08 17:44:09