2015-11-02 28 views
0

我試圖寫一個SQL查詢到PHP中的CSV文件。 [在前一個問題中] [1],我已經有了這個工作。不過,我試圖減少我的代碼中的重複可能從前面的例子。PHP:寫入到一個CSV文件,而流標題是在一個函數

我在一個函數創建頁眉/流包裝在這裏:

function csvCreate($filename){ 
    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'); 
} 

我打電話,然後在條件語句中的函數並傳遞$文件名作爲參數的位置:

if(isset($_POST["Submit"]) && ($_POST['Weight'] == 'Weight')) 
{ 
    //csvCreate->$fileName .= 'OutputWeightNull.csv'; 
    csvCreate('OutputWeightNull.csv'); 
    $query = mysqli_query($conn, 'SELECT * FROM `bfi_product_volumne_data` WHERE weight = 0 OR weight IS NULL') or die(mysqli_error($conn)); 
    if ($result = mysqli_fetch_array($query,MYSQLI_ASSOC)) 
    { 
     fputcsv($fh, array_keys($result)); 
     fputcsv($fh, $result); 
     while ($result = mysqli_fetch_array($query,MYSQLI_ASSOC)) 
     { 
      fputcsv($fh, $result); 
     } 
    } 
} 

問題是數據沒有寫入CSV。我的感覺是我需要將'fputcsv'調用指向該函數。我嘗試過使用'csvCreate-> fputcsv',它看起來不起作用。任何人都可以提出什麼問題可以在這裏。謝謝

[1]: http://stackoverflow.com/questions/33433737/php-writing-a-mysql-query-to-cs 

回答

1

問題是你在函數裏面創建文件指針$fh。所以它只在函數內部可見,而不在函數外部(因爲它可能在將代碼放入函數之前)。你需要將該變量從函數傳遞給外部世界。它可以用return完成。然後在'外部'的世界裏,你需要把這個返回的值賦給'外部'範圍中的變量並使用它。

您需要通過$fh以外的功能。即

function csvCreate($filename){ 
    // .. rest of the code 
    $fh = @fopen('php://output', 'w'); 
    return $fh; 
} 

然後在您寫入輸出的代碼中執行以下操作,使$fh在該範圍內可見。

// .. rest of the code 
$fh = csvCreate('OutputWeightNull.csv'); 
// .. rest of the code 
+0

這很有效,非常感謝。當它變得可用時,我會標記爲正確。我必須承認,我不確定爲什麼這會起作用,如果你有時間你會介意解釋爲什麼?非常感謝。 –

+1

查看更新的答案。 – Stepashka

+0

謝謝@Stepashka –

相關問題