1

$_GET-data を入力として取り、それを csv ファイルに保存する php コードを書き込もうとしています。コードを複数回実行すると、csv ファイルは次のようになります。

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);

?>
4

1 に答える 1

0

$fileContents は文字列の配列として読み取られ、CSV ファイルの行ごとに 1 つのエントリが読み取られますが、実際の CSV データは解析されません。最後の fputcsv は、このデータを CSV として書き込もうとし、エスケープします (引用符などを追加します)。fwrite次の代わりに、古いファイルの内容 ($fileContents) をファイルに追加する必要がありますfputcsv

fwrite($file, implode("\n", $fileContents));
于 2013-03-16T16:08:22.097 に答える