当前位置: 首页 > 面试题库 >

如何在php中上传和解析CSV文件

东门秦迟
2023-03-14
问题内容

我想用php上传一个csv文件。上传文件后,我想显示CSV文件的数据。我想举一个如何完成这项任务的例子。


问题答案:

尽管您可以轻松找到如何使用php处理文件上传的教程,并且有一些功能(手动)可以处理CSV,但是我将发布一些代码,因为几天前我从事一个项目,其中包括一些代码,您可以采用…

HTML:

<table width="600">
<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post" enctype="multipart/form-data">

<tr>
<td width="20%">Select file</td>
<td width="80%"><input type="file" name="file" id="file" /></td>
</tr>

<tr>
<td>Submit</td>
<td><input type="submit" name="submit" /></td>
</tr>

</form>
</table>

PHP:

if ( isset($_POST["submit"]) ) {

   if ( isset($_FILES["file"])) {

            //if there was an error uploading the file
        if ($_FILES["file"]["error"] > 0) {
            echo "Return Code: " . $_FILES["file"]["error"] . "<br />";

        }
        else {
                 //Print file details
             echo "Upload: " . $_FILES["file"]["name"] . "<br />";
             echo "Type: " . $_FILES["file"]["type"] . "<br />";
             echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
             echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";

                 //if file already exists
             if (file_exists("upload/" . $_FILES["file"]["name"])) {
            echo $_FILES["file"]["name"] . " already exists. ";
             }
             else {
                    //Store file in directory "upload" with the name of "uploaded_file.txt"
            $storagename = "uploaded_file.txt";
            move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $storagename);
            echo "Stored in: " . "upload/" . $_FILES["file"]["name"] . "<br />";
            }
        }
     } else {
             echo "No file selected <br />";
     }
}

我知道必须有一种更简单的方法来执行此操作,但是我读取了CSV文件并将每个记录的单个单元格存储在二维数组中。

if ( isset($storagename) && $file = fopen( "upload/" . $storagename , r ) ) {

    echo "File opened.<br />";

    $firstline = fgets ($file, 4096 );
        //Gets the number of fields, in CSV-files the names of the fields are mostly given in the first line
    $num = strlen($firstline) - strlen(str_replace(";", "", $firstline));

        //save the different fields of the firstline in an array called fields
    $fields = array();
    $fields = explode( ";", $firstline, ($num+1) );

    $line = array();
    $i = 0;

        //CSV: one line is one record and the cells/fields are seperated by ";"
        //so $dsatz is an two dimensional array saving the records like this: $dsatz[number of record][number of cell]
    while ( $line[$i] = fgets ($file, 4096) ) {

        $dsatz[$i] = array();
        $dsatz[$i] = explode( ";", $line[$i], ($num+1) );

        $i++;
    }

        echo "<table>";
        echo "<tr>";
    for ( $k = 0; $k != ($num+1); $k++ ) {
        echo "<td>" . $fields[$k] . "</td>";
    }
        echo "</tr>";

    foreach ($dsatz as $key => $number) {
                //new table row for every record
        echo "<tr>";
        foreach ($number as $k => $content) {
                        //new table cell for every field of the record
            echo "<td>" . $content . "</td>";
        }
    }

    echo "</table>";
}

因此,我希望这会有所帮助,这只是一小段代码,并且我尚未对其进行测试,因为我使用的代码略有不同。评论应解释一切。



 类似资料:
  • 在客户端,我使用AngularJS: 并呼叫: 在服务器端我使用WebAPI2:

  • 问题内容: 假设我有一个包含以下内容的文件: 如何通过PHP解析内容? 问题答案: 只需使用该功能即可解析CSV文件

  • 问题内容: 我希望用户上传一个.csv文件,然后让浏览器能够解析该文件中的数据。我正在使用ReactJS。这将如何运作?谢谢。 问题答案: 弄清楚了。的组合反应文件阅读器和HTML5的的FileReader(见本页)。 将react-file-reader位放在render内部: 然后在上面。

  • 问题内容: 我正在研究一个很长的Bash脚本。我想将CSV文件中的单元格读取到Bash变量中。我可以解析行和第一列,但不能解析其他任何列。到目前为止,这是我的代码: 它仅打印第一列。作为附加测试,我尝试了以下操作: $ y是空的。所以我尝试了: $ y是。为什么? 问题答案: 您需要使用而不是: 请注意,对于一般用途的CSV解析,您应该使用专门的工具,该工具可以处理带有内部逗号的带引号的字段,以及

  • 问题内容: 如何在Linux命令行上解析CSV文件? 做类似的事情: 从所有行的第2、5和6列中提取字段。 它应该能够处理csv文件格式:http : //tools.ietf.org/html/rfc4180,这意味着要对 字段进行引用并适当地转义内部引号 ,因此对于具有3个字段的示例行: 这样,如果我在上面的行中请求字段2,我得到: 我赞赏有很多解决方案,例如Perl,Awk(等等),但是我想

  • 问题内容: 应用启动时,我需要将数据预加载到tableView中。所以我通过解析.csv文件来使用核心数据。为此,我正在关注本教程。这是我的parseCSV函数 这是我的示例.csv文件 但我在这条线上出现错误 致命错误:数组索引超出范围 我究竟做错了什么 ?请帮我。 问题答案: 您正在尝试解析文件路径而不是文件内容。 如果您更换 与: 那么代码将适用于您的示例文件。