2013-03-16 21 views
1

我試圖寫一些php代碼,將$ _GET數據作爲輸入並將其保存到csv文件中。 運行代碼時不止一次我的CSV文件更是這樣的:php文件()函數創建引號和逗號

Date,Time,Temperature,"Air Humidity","Soil Humidity",Light,"Wind Direction","Wind Speed",Rain 
2013-03-16,16:24:27,12,80,40,82,255,10,0 
"2013-03-16,16:24:26,12,80,40,82,255,10,0 
","""2013-03-16,16:24:26,12,80,40,82,255,10,0 
",""",""""""2013-03-16,16:24:25,12,80,40,82,255,10,0 
",""","""""","""" 
",""","""""" 
",""" 
" 

正如你所看到的,程序添加引號和逗號到我,我不想要的數據。這顯然是通過'file(「weather_data.csv」)'完成的,但我不知道如何禁用或解決此問題。

這是我的代碼現在:

<?php 

// Save received data into variables: 
$temperature = $_GET["t"]; 
$airHumidity = $_GET["ha"]; 
$soilHumidity = $_GET["hs"]; 
$light  = $_GET["l"]; 
$windDir  = $_GET["wd"]; 
$windSpeed = $_GET["ws"]; 
$rain   = $_GET["r"]; 

// Arrays for the column descriptor (first line in the csv-file) and the recent data: 
$columnDescriptor = array("Date","Time","Temperature","Air Humidity","Soil Humidity","Light","Wind Direction","Wind Speed","Rain"); 
$recentData  = array(date("Y-m-d"),date("H:i:s"),$temperature,$airHumidity,$soilHumidity,$light,$windDir,$windSpeed,$rain); 

$fileContents = file("weather_data.csv"); 
array_shift($fileContents); // removes first field of $fileContents 

$file = fopen("weather_data.csv","w"); 

fputcsv($file,$columnDescriptor); 
fputcsv($file,$recentData); 
fputcsv($file,$fileContents); 

fclose($file); 

?> 
+0

看起來你有一些問題,你的代碼的邏輯。正如你所看到的,第一行沒有問題,它只在第二行之後纔開始報價。 – mavili 2013-03-16 15:46:29

回答

0

$ fileContents讀爲字符串數組,每行的CSV文件,但實際的CSV數據一個條目不會被解析。最後一個fputcsv嘗試將這些數據寫入CSV並將其轉義(添加引號和內容)。您需要將舊文件的內容($ fileContents)與fwrite代替fputcsv添加到您的文件:

fwrite($file, implode("\n", $fileContents)); 
+0

也使用'$ fileContents = file(「weather_data.csv」,FILE_IGNORE_NEW_LINES);'而不是,所以不會有空行添加到文件中。 – Smuuf 2013-03-16 16:18:00

+0

好點!或者將'implode'改爲'implode($ fileContents)' – wldsvc 2013-03-16 16:39:51