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

如何设置最大文件上传大小并只允许PHP上传某些文件类型?,php,file-upload,max,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;

我制作了一个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文件

提前感谢,

Nathan

您可以使用
$\u FILES['uploadedfile'][“size”]
检查文件大小。客户机提供的文件类型在
…[“type”]
中提供

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


在这一点上,考虑一个现成的助手类/脚本对于所有的上传检查都是可取的。您的代码已经很难阅读。

请不要以连词开头

第一,内容:

简而言之,你不能限制人们上传的文件类型

一个较长的答案是,你可以检查人们上传的文件类型,如果不符合你的要求,就放弃它。请注意,检查用户提供的mimetype或文件扩展名不会提供太多保护。对这个问题进行了很好的讨论

其次是尺寸:

请参见上的示例#1 请注意,并非所有浏览器都尊重MAX_FILE_SIZE输入标记。文件大小还将受到该页面上列出的php.ini指令以及Web服务器上配置的请求、发布大小和超时的限制


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

我从未尝试过这种方法,但是如果我在将扩展名重命名为
.jpg
后上载任意文件,谢谢,mario。我看看这是否管用。我是PHP新手,所以在将上面提供的内容输入我的代码时可能会遇到一些问题:/@Kumar我不知道任意文件可以使用
.jpg
扩展名?@Kumar这确实是一个问题。但至少服务器上的.jpg扩展名不会触发CGI执行或PHP解释器对上传的文件进行调用。应通过上载文件夹中的
.htaccess
设置NTL相应的
选项。(另外,一个更复杂的上传脚本会检查魔法字节,并至少验证一些文件类型。)@nathan想一想,我只是下定决心要破坏这个系统,我把一个随机文件重命名为
picture.jpg
,然后上传,
$\u文件['uploadedfile']['type']
根据扩展名或文件内容识别它吗?别担心,孩子,这只是一个连词。别这样Picky@symcbean这不是英语课,这是一个开发者论坛,这意味着我不应该被纠正我的问题。谢谢你的回答,但我很确定PHP有一种方法可以限制文件的类型。关于大小,用户可以使用Chrome中的开发者工具更改
MAZ_FILE_size
input标签,如果我使用该标签,他们可以将max FILE upload更改为他们想要的大小。我宁愿使用PHP,因为它会更安全。我会查看你发布的链接。
if (in_array($ext, array("jpeg","gif","png","txt","html"))) {
    if (move_uploaded_file(...