【问题标题】:Handling upload file with file_get_contents()使用 file_get_contents() 处理上传文件
【发布时间】:2016-04-15 11:31:17
【问题描述】:

我有一个 PHP 脚本可以将上传的 CSV 处理到一个临时目录中,然后我有 5 行代码可以将 CSV 转换为 JSON。

我的 PHP 脚本:

if (isset($_FILES['csvList']['type'])) {

  $validExtensions = array("csv");
  $temporary = explode(".", $_FILES["csvList"]["name"]);
  $file_extension = end($temporary);

  if (in_array($file_extension, $validExtensions)) {

    if ($_FILES["csvList"]["error"] > 0) {

      echo "Return Code: " . $_FILES["csvList"]["error"] . "<br/><br/>";
    } else {

      if (file_exists("/var/www/tmp/" . $_FILES["csvList"]["name"])) {

        echo $_FILES["csvList"]["name"] . " <span id='invalid'><b>already exists.</b></span> ";

      } else {

        $sourcePath = $_FILES['csvList']['tmp_name']; // Storing source path of the file in a variable
        $targetPath = "/var/www/tmp/".$_FILES['csvList']['name']; // Target path where file is to be stored

        move_uploaded_file($sourcePath,$targetPath) ; // Moving Uploaded file

        $csvFile = $sourcePath;
        $csv = file_get_contents($csvFile);
        $csvArray = array_map("str_getcsv", explode("\n", $csvFile));
        $csvToJson = json_encode($csvArray);
        print_r($csvToJson);
      }
    }
  }
}
$sourcePath = $_FILES['csvList']['tmp_name'];       // Storing source path of the file in a variable
$targetPath = "/var/www/tmp/".$_FILES['csvList']['name']; // Target path where file is to be stored
move_uploaded_file($sourcePath,$targetPath) ;    // Moving Uploaded file

问题出在这一行: print_r($csvToJson);这是输出:

[["\/tmp\/phpYeuuBB"]]

这是我的临时文件的文件路径,我做错了什么?

这是我的 CSV 的样子 -

CSV Demo

更新:我的 JSON 格式不正确,名称旁边有 " 和 \

{"data":["[[\"Debra Brown\"],[\"Jacqueline Garza\"],[\"Kenneth Foster\"],[\"Antonio Howell\"],[\"Fred Rogers\"],[\"Robert Stanley\"],[\"Jesse Price\"],[\"Henry Bishop\"],[\"Marilyn Phillips\"],[\"Charles White\"],[\"Dennis Lawrence\"],[\"Nicholas Thompson\"],[\"Chris Graham\"],[\"Louis Dean\"],[\"Katherine Green\"],[\"Janice Peters\"],[\"Bobby Wood\"],[\"Bruce King\"],[\"Diane Mills\"],[\"Jane Fields\"],[\"Amanda Gutierrez\"],[\"Russell Cunningham\"],[\"Judith Matthews\"],[\"Carol Franklin\"],[\"Jose Murray\"],[\"Kathryn Cole\"],[\"Katherine Gardner\"],[\"Lois Woods\"],[\"Andrew Bryant\"],[\"Victor Wright\"],[\"Adam Russell\"],[\"Tina Gilbert\"],[\"Shawn Boyd\"],[\"Wanda Porter\"],[\"Rose Morris\"],[\"John Mccoy\"],[\"Frances Gibson\"],[\"Willie Lopez\"],[\"Chris Reyes\"],[\"Craig Vasquez\"],[\"Diane Simmons\"],[\"Mary Little\"],[\"Patricia Fowler\"],[\"Jane Perkins\"],[\"Juan Brooks\"],[\"Bruce Howard\"],[\"Tammy Richardson\"],[\"Jane Gomez\"],[\"Tammy Matthews\"],[\"Matthew Fox\"],[null]]"]}

应该怎样——

{"data":[["Debra Brown"]]}

当我打印$csv

【问题讨论】:

    标签: php csv


    【解决方案1】:

    看起来您正在将 CSV 的路径输入到 str_getcsv

    $csvArray = array_map("str_getcsv", explode("\n", $csvFile));
    

    而不是您的实际 CSV 内容

    $csvArray = array_map("str_getcsv", explode("\n", $csv));
    

    【讨论】:

      【解决方案2】:

      您正在将文件分配给变量$csv,但是您正在这样做:

      $csvArray = array_map("str_getcsv", explode("\n", $csvFile));
      

      变量$csvFile 仍然包含您之前设置为$sourcePath 的文件的文件路径。从file_get_contents() 返回的实际文件字符串在$csv 中。如果你把它改成这样:

      $csvArray = array_map("str_getcsv", explode("\n", $csv));
      

      您可能会发现这可以解决您的问题。

      这里是the docs 代表file_get_contents()

      【讨论】:

      • 工作得很好,谢谢,你有没有机会知道为什么我的 JSON 在它之前有 \ 和引号?检查我更新的帖子。
      • @Kieron606 首先,如果您打印,这些斜杠是否存在于$csv 中?其次,str_getcsv() 发生了什么?也许这是您遇到的问题的一部分。
      • $csv 看起来很完美
      • 那么在 `str_getcsv() 中会发生什么?如果这完全不相关,可能值得提出一个新问题......
      猜你喜欢
      • 2011-04-29
      • 1970-01-01
      • 2013-08-31
      • 1970-01-01
      • 2016-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多