用PHP保护文件上传的好方法 - php

编写一个小应用程序(除其他外)使用户可以在发布/提交内容时上传文件(例如图像,.doc或文本文件)。

我们当前的原型只是将文件转储到/ {app_root} / files /中,但是,当然,即使没有登录或使用系统,任何人都可以做到这一点。目标是仅在用户登录并且实际上有权访问文件所属的帖子时才授予对文件的访问权限(查看访问权限)。

因此,简而言之,我正在寻找一种实现此目标的好方法。

我正在考虑在/ web /(http)文件夹之外创建一个文件夹,然后让PHP使用header()逗号以某种方式呈现它,或者只是将文件转储到数据库中?但是,我从未做过任何一个。

虽然我怀疑我最终能弄清楚,但这里有太多聪明的人,我想知道有人会知道某种已有的类或函数库吗?

参考方案

您必须执行以下操作:

将所有文件移出webroot。您可以使用.htaccess禁用对文件夹的访问,但这不值得麻烦和潜在的安全风险。只是将其移到那里。
保留一张上传文件的表,在其中存储用户的原始文件名。将文件重命名为$id.$ext,依此类推。简而言之,您不想在系统中使用用户的文件名。
使用脚本,download.php或其他命令,获取文件的ID,验证谁登录,如果一切都检出,则提取文件,将其读出到浏览器,然后发送适当的下载头。

这些标头类似于:

header('Content-type: application/octet-stream');
header('Content-disposition: attachment; filename=usersuppliedname.txt');
header("Content-Length: " . filesize('../safefiles/1.txt'));
header("Content-Transfer-Encoding:  binary");
readfile('../safefiles/1.txt');
exit;

如果要允许恢复文件等,则可以get more fancy,但是上面应该这样做。

PHP-将日期插入日期时间字段 - php

我已在数据库中使用datetime字段存储日期,使用PHP将“今天的日期”插入该字段的正确方法是什么?干杯, 参考方案 我认为您可以使用php date()函数

如何在基于PHP的视频转换器中处理大文件? - php

我有一个视频转换器。它的工作原理是,将视频的URL提供给视频,然后将其下载到服务器,然后将其转换为mp3。这样就可以了,但是问题出在10 MB以上(仅约30秒)而导致服务器崩溃。我需要知道如何分批上传它,以免使服务器崩溃。file_put_contents($dest,file_get_contents($url)); 参考方案 最好的方法是分批下载内容。一…

为什么jQuery多重上传插件无法上传? - php

我正在使用以下位置的多上传插件:http://www.fyneworks.com/jquery/multiple-file-upload/这就是我在做什么:这些步骤将重现该问题:创建一个文件输入字段,添加“ multi-upload”作为类,并添加“ images []”作为名称使用输入字段选择图像,然后通过表单字段上的action参数重定向到upload.…

PHP getallheaders替代 - php

我正在尝试从服务器上的apache切换到nginx。唯一的问题是我在PHP脚本中使用的getallheaders()函数,该函数不适用于Nginx。我已经尝试过用户在getallheaders函数上的php站点上提供的注释,但这并不返回所有请求标头。请告诉我如何解决这个问题。我真的想切换到Nginx。 参考方案 您仍然可以使用它,但是您必须像这里一样重新定义…

php Singleton类实例将在多个会话中保留吗? - php

举一个简单的例子,如果我想计算一个不使用磁盘存储的脚本的命中次数,我可以使用静态类成员来执行此操作吗?用户1:<?php $test = Example::singleton(); $test->visits++; ?> 用户2:<?php $test = Example::singleton(); $test->visits+…