如何在PHP上传时设置最大文件上传大小并仅允许某些文件类型?

时间:2011-08-05 02:59:23

标签: php file-upload max

我制作了一个PHP上传文件脚本。现在,我不希望人们上传巨大的文件,我也不希望他们上传PHP文件。这是我当前的PHP脚本:

<?php
// Where the file is going to be placed 
$target_path = "files/";

/* Add the original filename to our target path.  
Result is "uploads/filename.extension" */
    $length = 10;
    $characters = '123456789abcdefghijklmnopqrstuvwxyz';
    $string="";
    for($p = 0; $p < $length; $p++) {
        $string .= $characters[mt_rand(0, strlen($characters))];
    }
$pos = strrpos(basename( $_FILES['uploadedfile']['name']), ".");
$ext = str_split(basename( $_FILES['uploadedfile']['name']), $pos);
$target_path = $target_path.$string.$ext[1]; 
if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
    echo "<h2>Your file has been uploaded!</h2><br /><p>Your file has been uploaded successfully. <a href='".$target_path."'>Click here</a> to see the file you uploaded.
    <br /><br /><br />
    <h2>A link to your file</h2><br />The full link to your file is:
    <br /><br />
    <code>http://www.americaspoeticsoul.com/extras/upload/".$target_path."</code></p>";
} else{
    echo "<span class='error'>There was an error uploading the file, please try again.</span>";
}
?>

如何设置最大文件上传大小并仅允许某些文件类型,例如仅包含JPEG,GIF,PNG和HTML文件?

提前致谢,

2 个答案:

答案 0 :(得分:2)

您可以使用$_FILES['uploadedfile']["size"]检查文件大小。客户端提供的文件类型在...["type"]

中可用

但是对于您的代码,您需要针对白名单探测$ext变量(仅查找禁止的扩展名可能不是一个好主意):

if (in_array($ext, array("jpeg","gif","png","txt","html"))) {
    if (move_uploaded_file(...

此时,建议考虑使用现成的帮助程序类/脚本进行所有上载检查。你的代码已经完全不可读了。

答案 1 :(得分:0)

请不要用连词开始句子。

首先,内容:

简短的回答是,您无法限制人们上传的文件类型。

更长的答案是,您可以检查人们上传的文件类型,如果不符合您的要求,则将其丢弃。请注意,检查用户提供的mimetype或文件扩展名不能提供很多保护。有一个很好的讨论问题和how to solve it here

接下来的尺寸:

参见http://www.php.net/manual/en/features.file-upload.post-method.php上的示例#1 请注意,并非所有浏览器都遵循MAX_FILE_SIZE输入标记。文件大小也将受到该页面上列出的php.ini指令以及Web服务器上配置的请求和POST大小和超时限制的约束。

顺便说一句,你生成文件名的方法相当冗长。使用uniqid()可能会快得多,代码也少得多。使用md5_file()将具有相同的好处并防止重复。