PHP 文件上传:有效限制文件类型和大小
在 PHP 中,控制文件上传并确保特定文件类型的接受至关重要。一位用户最近遇到了现有验证代码的问题:
<code class="php">//check file extension and size $resume= ($_FILES['resume']['name']); $reference= ($_FILES['reference']['name']); $ext = strrchr($resume, "."); $ext1 = strrchr($reference, "."); if (!(($_FILES["resume"]["type"] == "application/doc") || ($_FILES["resume"]["type"] == "application/docx") || ($_FILES["resume"]["type"] == "application/pdf" )) && (($_FILES["reference"]["type"] == "application/doc") || ($_FILES["reference"]["type"] == "application/docx") || ($_FILES["reference"]["type"] == "application/pdf")) && (($ext == ".pdf") || ($ext == ".doc") || ($ext == ".docx")) && (($ext1 == ".pdf") || ($ext1 == ".doc") || ($ext1 == ".docx")) && ($_FILES["resume"]["size"] < 400000) //accept upto 500 kb && ($_FILES["reference"]["size"] < 400000)) { //stop user } else { // allow files to upload }</code>
据该用户称,此代码允许未经授权的文件类型(例如 TXT)通过,并且不强制执行大小限制。
解决方案:依靠 MIME 类型和适当的大小检查
为了解决这些问题,建议采用更强大的方法:
<code class="php">function allowed_file(){ //Allowed mime-type files $allowed = array('application/doc', 'application/pdf', 'another/type'); //Validate uploaded file type if(in_array($_FILES['resume']['type'], $allowed) AND in_array($_FILES['reference']['type'], $allowed)){ //Check file size if($_FILES["resume"]["size"] < 400000 AND $_FILES["reference"]["size"] < 400000 ){ //File types and size are accepted, proceed with file processing } } }</code>
解释:
此改进的代码使用 MIME(多用途互联网邮件扩展)类型而不是文件扩展名。 MIME 类型准确地表示文件格式并且不易被操纵。此外,它还会独立检查简历和参考文件的文件大小,确保限制得到执行。
以上是如何限制 PHP 文件上传的文件类型和大小?的详细内容。更多信息请关注PHP中文网其他相关文章!