如何处理上传和下载PHP生成的CSV文件

时间:2014-09-08 18:45:24

标签: php linux

我正在运行以下代码(稍微缩写)以在屏幕上呈现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的符号链接吗?如何最好地接近?

1 个答案:

答案 0 :(得分:1)

首先,如果您将文件从文档根符号链接到/tmp,您也可以直接将其放入docroot。

如果您说该文件是保密的,但必须是可下载的,则可以执行以下操作:

使用非常长且随机的文件名(如pvYLLHuGmnJnQ3LBkanQky8oh6eUkhH.csv)将文件存储在文档根目录之外的目录中。

创建某种“调度程序”:这基本上是一个PHP文件,它接受请求,验证它(确保删除任何非法字符,尤其是点和斜线!)并返回该文件(如果存在)。 / p>

然后找到一种方法告诉合法用户文件名。这可以通过返回该名称(或下载URL)而不是作为PHP请求的结果的文件内容来完成。或者例如通过电子邮件。

这当然是一种相当简单的方法,但对于大多数情况来说它应该足够安全。顺便说一下,确保使用HTTPS进行传输,否则所有这些都没有意义。