2012-07-18 47 views
1

在我的網站,我從mysql數據創建一個表,然後現在我想添加一個表的導出按鈕buttom,以便用戶將能夠將數據下載爲CSV文件。fputcsv不寫入CSV文件中的任何數據

要做到這一點,我寫的虛擬形式:

<form action="<?=$_SERVER['PHP_SELF'];?>" method="post"> 
    <input type="submit" name="submit" value="Click Me"> 
</form> 

,並在PHP文件的頂部,我有:

if(isset($_POST['submit'])) { 
    export(); 
} 

在我的導出功能,我有一些MySQL的東西,我創建一個數組並向其中推入數據,然後:

$header = array('name', 'date', 'total', 'success', 'opens', 'clicks', 'success_rate', 'open_rate', 'CTO', 'CTR') 
$fp = fopen('exportme2.csv', 'w'); 
fputcsv($fp, $header); 

foreach ($data as $lines) { 
     fputcsv($fp, $lines); 
} 
fclose($fp); 

當我點擊導出按鈕後,我將exportme2.csv文件,然而它是空的! 數據可能是錯誤的,這樣就不會有任何東西,但至少我應該有標題名稱。

你能幫我解決這個問題嗎?

謝謝。

+0

標題行是否存在於數據文件中,還是整個文件爲空? – 2012-07-18 20:10:34

+0

你檢查過'fputcsv'的返回值嗎? – jeroen 2012-07-18 20:13:35

+0

你是否檢查文件是否打開?失敗時'$ fp'將會布爾錯誤。 – 2012-07-18 20:15:23

回答

0

它沒有發佈任何內容,因爲它提交頁面,所以當頁面刷新時,我的所有數組都變爲空的。

1

首先,改變

$fp = fopen('exportme2.csv', 'w'); 

$fp = fopen('exportme2.csv', 'a'); 

'w'截斷的文件,其中'a'創建或追加該文件。

那麼你應該使用flock(),以確保兩個不同的用戶(線程)不要試圖在同一時間寫入文件:

if (!flock($fp, LOCK_EX)) { 
    error_log('Cannot get lock!'); 
} else { 
    fputcsv($fp, $header); 

    foreach ($data as $lines) { 
     fputcsv($fp, $lines); 
    } 
} 

如果不解決的事情,那麼你有在你的代碼中有一個對我來說不明顯的錯字。

1

這是運行好我:FCLOSE前

$header = array('name', 'date', 'total', 'success', 'opens', 'clicks', 'success_rate', 'open_rate', 'CTO', 'CTR'); 
$fp = fopen('exportme2.csv', 'w'); 
fputcsv($fp, $header); 

/*foreach ($data as $lines) { 
    fputcsv($fp, $lines); 
}*/ 
fclose($fp); 

你上面的腳本停止,所以竊聽你的文件... 您應該啓用E_ALL E_STRICT發展!