【发布时间】:2017-11-17 13:27:33
【问题描述】:
我正在尝试验证我所有上传的文件,实际上我进行了文件大小和文件类型验证。如果任何文件的验证失败,我会记录该特定文件以获取错误消息。我将每个循环用于文件处理以及用于文件大小和文件类型验证的 if 条件,但问题仅在评估条件时首先出现,如果块在第二次出现未经测试。两个 if 都位于每个循环的内部。任何帮助将不胜感激...
代码
public function validate_my_files(){
foreach($this->files_from_user_validateit['name'] as $key => $value){
$name = $this->files_from_user_validateit['name'][$key];
$size = $this->files_from_user_validateit['size'][$key];
$type = $this->files_from_user_validateit['type'][$key];
//$error[$key] = $this->files_from_user_validateit['error'][$key];
//$tmp_name[$key] = $this->files_from_user_validateit['tmp_name'][$key];
//not allowed file extensions
$not_allowed_ext = array('php','js','asp','aspx','py','c','c++','jsp','perl','cfg','css','java',
'json');
//lets find the extension of the filename
$est = explode('.',$name);
$ext = $est[count($est)-1];
if(in_array($ext,$not_allowed_ext)){
//putting in session for later message
$_SESSION['ext'][] = $name;
}
//lets check for file size now, lets not allow file greater than 50MB
if($size > 47185920){
$_SESSION['size'][] = $name;
}
}
print_r($_SESSION);die();
}
仅测试文件扩展名,而如果大小条件不起作用...
编辑
很遗憾,我的上传表单存在很大问题。稍后选择的文件仅由 $_FILES 处理,我正在使用多个文件上传并使用 java 脚本在同一页面的表上显示选定的文件。假设我首先选择了 5 个文件(表上显示的 5 个文件),然后再次选择 3 个文件,现在表上总共有 8 个文件。但是我第二次选择的最后 3 个文件在 $_FILES 数组中可用。请任何人对此有解决方案...
重新编辑
Id 'myfiles' 用于保存来自输入文件字段的多个文件。 Id 'dataS' 是由下面给定 JS 创建的表的 div。 IF 'tot' 是表中文件总大小的跨度。 输入形式:
<form id="uploadform" method="post" action="" enctype="multipart/form-data">
<div id="datas"></div>
<div id="tot"><h3>TOTAL SIZE:</h3> <span id="zise">0 MB</span></div>
<div id="addfiles"><input type="file" name="addfiles[]" value="Add Files" multiple="multiple" id="myfiles" ></div>
<input type="submit" name="sbmtfile" style="color:green;font-size: 17px;">
</form>
我的 JS:
<script type="text/javascript">
var s = 1;
var totsize = 0;
myfiles.onchange = function(){
var a = document.getElementById('myfiles').files;
var b = document.getElementById('datas');
var total = document.getElementById('tot');//for table title
var c = document.createElement('TABLE');
c.className = 'showtable';
c.border = '1px';
c.cellspacing = '0';
c.cellpadding = '2';
c.width = '100%'
for(var i = 0; i < a.length; i++){
var f = document.createElement('TR');
c.appendChild(f);
//for total file size
totsize = totsize + a[i].size;
var r = document.createElement('TD');
r.align = 'center';
r.width = '152px';
f.appendChild(r);
r.appendChild(document.createTextNode(s++));
var y = document.createElement('TD');
y.align = 'left';
y.width = '610px';
y.appendChild(document.createTextNode(a[i].name));
f.appendChild(y);
var z = document.createElement('TD');
z.align = 'center';
r.width = '152px';
z.appendChild(document.createTextNode(Math.round((a[i].size)/1024)));
f.appendChild(z);
var x = document.createElement('TD');
x.align = 'center';
x.width = '152px';
x.appendChild(document.createTextNode('DELETE'));
f.appendChild(x);
}
b.appendChild(c);
document.getElementById('zise').innerHTML = Math.round((totsize/(1024*1024)))+ ' MB';
}
</script>
【问题讨论】:
-
files_from_user_validateit()是自定义函数吗?由于您正在检查if($size > 47185920),基本上是if($this->files_from_user_validateit['size'][$key]; > 47185920),因此您需要检查它返回的值。 -
@Sean ($this->files_from_user_validateit) 保存了我所有上传的文件,我从表单中获取,即它是一个文件数组并且工作正常,我可以获取我上传的所有文件文件在这里...
标签: php mysql file-upload upload