javascript - 即使在我们失去对文件的访问权限后,如何继续使用 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 文件的访问权限?
解决方案
您有两个通用选项:
- 使用javascript处理前端表格的操作
- 将 CSV 数据复制到后端某处,您可以在后续请求中引用它
如果您唯一的要求是显示和隐藏列,那么#1 可能是最容易实现的解决方案。如果您稍后需要对数据做更多的事情,或者在用户在初始提交后离开页面后返回它,您必须使用#2。
如果您决定保留 CSV 供以后使用,则需要使用move_uploaded_file函数将文件移动到以后可以再次阅读的位置,然后在 HTML 的隐藏字段中设置某种引用(只需文件名将起作用),然后可以在后续请求中将其转发回服务器,以便服务器知道要读取哪个文件。
您希望将文件移动到 Web 服务器文档根目录之外的目录,以便 HTTP 请求无法访问这些文件,这可能会带来严重的安全风险。
推荐阅读
- c++ - 如何停止 QTimer?
- python - “OSError:2”使用 Python 图像库将 TIFF 图像转换为 PNG 时
- javascript - 使用 NodeJS 提出 Discord 请求(更改 Vanity Discord)
- python - 我不知道为什么它不读取我的 Mac 地址
- javascript - 使用 switch JavaScript 显示不同类型的表单
- javascript - chart js 停止图表区域功能
- architecture - 在分布式程序中,进程崩溃时如何恢复其对应的数据
- android - Android AltBeacon 库中 BLE 背景扫描的间隔限制?
- java - 如何在java中的每次迭代中打印变量的值(下一个,上一个,当前,当前下一个)?
- python - 如何在不修改第一行的情况下使用 pandas 将 excel 文件转换为 csv 文件?