首页 > 解决方案 > 即使在我们失去对文件的访问权限后,如何继续使用 csv 数据?

问题描述

对不起,如果标题令人困惑。让我解释。

我有一个函数可以在下面的 csv 文件中显示数据。

 <?php
function readCsv($filename, $header=false) {
    $handle = fopen($filename, "r");
    echo "<form method='post' action=''>";

    echo '<table class="table table-hover table-bordered ">';
    if ($header) {
        $csvcontents = fgetcsv($handle);
        echo '<tr>';
        foreach ($csvcontents as $headercolumn) {


            echo "
                <th> <div class='form-check' style='float: right; position: relative'>
                          <input class='form-check-input' type='checkbox' id='check$headercolumn' name='check$headercolumn' />
                 </div>$headercolumn</th>
                 ";

           
    $flag = 0; // show only 5 results from the csv file
    while (($csvcontents = fgetcsv($handle)) && $flag < 5) {
        $flag++;
        echo '<tr>';

        foreach ($csvcontents as $column) {
            echo "<td>$column</td>";
        }
        echo '</tr>';
    }
    echo '</table>';

    echo "<button type='submit' id='submitbut' class='btn'>Submit</button>";
    echo "</form>";



    fclose($handle);
}


 

我在这里称之为:

 <form>
    <input type='submit' name='csvsubmit' value='Upload File' class="btn">

</form>


<?php if(isset($_POST['csvsubmit'])){

    readCsv($_FILES['filename']['tmp_name'] , true);

}?>

这给了我一张这样的桌子在此处输入图像描述

现在的问题:

我希望能够单击每个复选框并仅显示选定的列。问题是,提交后,我收到路径为空的错误(我无法访问该文件)。我怎么能绕过呢?我怎样才能再次提交而不失去对 csv 文件的访问权限?

标签: javascriptphphtmlcsvfgetcsv

解决方案


您有两个通用选项:

  1. 使用javascript处理前端表格的操作
  2. 将 CSV 数据复制到后端某处,您可以在后续请求中引用它

如果您唯一的要求是显示和隐藏列,那么#1 可能是最容易实现的解决方案。如果您稍后需要对数据做更多的事情,或者在用户在初始提交后离开页面后返回它,您必须使用#2。

如果您决定保留 CSV 供以后使用,则需要使用move_uploaded_file函数将文件移动到以后可以再次阅读的位置,然后在 HTML 的隐藏字段中设置某种引用(只需文件名将起作用),然后可以在后续请求中将其转发回服务器,以便服务器知道要读取哪个文件。

您希望将文件移动到 Web 服务器文档根目录之外的目录,以便 HTTP 请求无法访问这些文件,这可能会带来严重的安全风险。


推荐阅读