我正在运行以下代码(略有缩写)以在屏幕上呈现 MySQL 查询并将每一行存储到存储在/tmp/中的 csv
$fileName = $username . date('Ymdhis') . '.csv';
$fp = fopen('/tmp/' . $fileName, 'w');
while ($row = $result->fetch_assoc())
{
if ($count % 2 == 0)
{
echo "blah";
fputcsv($fp, $row);
$count++;
}
else
{
echo "blah 2";
fputcsv($fp, $row);
$count++;
}
}
fclose($fp);
工作正常,没有投诉。现在文件存储在/tmp 中,我想创建一个指向它的 html 链接,以便可以从同一页面下载它。我知道足以将 .csv 保留在 www 文档根目录之外,但是从/tmp 检索此文件的最安全方法是什么?我应该设置一个从 www 到/tmp 的符号链接(symbolic link)吗?如何最好地接近?
最佳答案
首先,如果您将文件从文档根目录符号链接(symbolic link)到 /tmp
,您也可以直接将其放入文档根目录。
如果您说该文件是 secret 文件,但必须可以下载,您可以执行以下操作:
将具有非常长且随机文件名的文件(如 pvYLLHuGmnJnQ3LBkanQky8oh6eUkhH.csv)存储在文档根目录之外的目录中。
创建某种“调度程序”:这基本上是一个 PHP 文件,它接受请求、验证它(一定要删除任何非法字符,尤其是点和斜杠!)并返回文件(如果存在)。
然后想办法告诉合法用户文件名。这可以通过返回该名称(或下载 URL)而不是作为 PHP 请求结果的文件内容来完成。或者例如通过电子邮件。
这当然是一种相当简单的方法,但对于大多数情况来说应该足够安全。顺便说一下,确保使用 HTTPS 进行传输,否则这一切都没有意义。
关于php - 如何处理上传和下载 PHP 生成的 CSV 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25731029/