Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何防止php上载文件:_Php - Fatal编程技术网

如何防止php上载文件:

如何防止php上载文件:,php,Php,如果文件类型不正确,如何防止php将文件上载到./tmp/文件夹中 例如,w3school网站上给出的示例代码使用以下代码检查文件长度: if ((($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"] == "image/jpeg") || ($_FILES["file"]["type"] == "image/pjpeg")) 但这是在文件已经上传到temp之后,对吗? 有什么方法可以在php中实现这一点,或者

如果文件类型不正确,如何防止php将文件上载到./tmp/文件夹中

例如,w3school网站上给出的示例代码使用以下代码检查文件长度:

if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
但这是在文件已经上传到temp之后,对吗?
有什么方法可以在php中实现这一点,或者我必须在客户端实现这一点吗?

我认为在客户端或服务器端都不可能实现这一点。文件上载将上载到一个临时目录,您可以在那里对其进行解析。

在上载到服务器之前,PHP无法知道文件的类型,因此PHP可以得到它。为此,需要将文件存储在临时文件夹中。此外,PHP不会为您执行任何检查,您必须签入脚本(为此,需要将文件保存在某个位置)

为了防止上传无效文件,您需要检查客户端。这通常涉及Flash或其他插件,因为Javascript是沙盒,无法访问硬盘上的文件(在这个网站上搜索此规则的例外情况)


但是,任何客户端验证都是毫无意义的,因为它是客户端的,所以服务器不能信任客户端信息。因此,
$\u FILES['file']['type']
信息也完全是客户端提供的信息,您不应该信任这些信息。自己检查文件的MIME类型以进行验证。有关如何执行此操作的示例,请参见

,正如其他人所说,在上传文件之前,您无法访问文件类型。假设这是出于“用户体验”目的(而非安全目的),您可以使用javascript检查文件名并查看其扩展名:

document.getElementById("file-input").file
将返回文件名,您可以分析“.”后面的所有内容,以查看它是否是gif、jpg等。显然,此扩展名只是一个容器(甚至可能被恶意用户错误标记),不是“真实”文件类型

如果您真的想在PHP中实现这一点,您可以使用javascript将名称值作为隐藏输入传递到表单中,并且您的PHP可以通过基于此值的文件上传来停止。但在Javascript中这样做会更有意义,因为这又不是一种安全措施