代码之家  ›  专栏  ›  技术社区  ›  SpeedCrunch

php file()函数创建引号和逗号

  •  1
  • SpeedCrunch  · 技术社区  · 12 年前

    我正在尝试编写一些php代码,将$_GET-data作为输入,并将其保存到csv文件中。 当多次运行代码时,我的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);
    
    ?>
    
    1 回复  |  直到 12 年前
        1
  •  0
  •   wldsvc    12 年前

    $fileContents被读取为字符串数组,CSV文件的每行一个条目,但实际的CSV数据不会被解析。最后一个fputcsv试图将此数据写入CSV并对其进行转义(添加引号和其他内容)。您需要使用将旧文件内容($fileContents)添加到您的文件中 fwrite 而不是 fputcsv :

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