我制作了一个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文件?
提前致谢,
森
答案 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()将具有相同的好处并防止重复。