如果文件不正确,如何阻止php将文件上传到./tmp/文件夹。
例如,w3school网站上提供的示例代码使用以下代码检查文件长度:
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
但这是在文件已经上传到temp之后,我是否正确? 有什么方法可以在PHP中执行此操作,还是必须在客户端执行此操作?
答案 0 :(得分:2)
PHP在上传到服务器之前无法知道文件的类型,因此PHP可以得到它。为此,文件需要存储在临时文件夹中。此外,PHP不会检查您,您将不得不检查您的脚本(为此目的,文件需要保存在某处)。
要阻止上传无效文件,您需要检查客户端。这通常涉及Flash或其他插件,因为Javascript是沙盒的,无法访问硬盘上的文件(在此网站上搜索此规则的例外情况)。
任何客户端验证都没有意义,因为它是客户端,您的服务器无法信任客户端信息。就此而言,$_FILES['file']['type']
信息也完全是客户提供的信息,您不应该信任。自己检查文件的MIME类型以进行验证。有关如何执行此操作的示例,请参阅How to get the content-type of a file in PHP?
答案 1 :(得分:0)
我不认为这可以在客户端或服务器端执行。文件上传将上传到临时目录,并在那里解析它。
答案 2 :(得分:0)
正如其他人所说,在上传文件之前,您无法访问文件类型。假设这是出于“用户体验”目的(而非安全目的),您可以使用javascript检查文件名并查看其扩展名:
document.getElementById("file-input").file
将返回文件名,您可以解析'。'之后的所有内容。看看它是否是gif,jpg等。显然,这个扩展只是一个容器(甚至可能被恶意用户误标),并且不是'真正'的文件类型。
如果真的希望在PHP中执行此操作,则可以使用javascript将名称值作为表单中的隐藏输入传递,并且您的PHP可以通过基于此的文件上载来停止值。但是,在Javascript中执行此操作会更有意义,因为这不是一种安全措施。