我不知道问题出在哪里。从post表单上传文件后,我用以下方法检查:
if(!is_uploaded_file($_FILES['pic']['tmp_name'])){
$pic_error="<p>file upload error</p>";
}
else{
do something
};它没有do something,这意味着文件没有上传。当我回显$_FILES['pic']['tmp_name']时,它会打印文件tmp_name,甚至打印文件的大小。
我在我的表格上使用multipart/form-data。
这里有什么问题?主机有问题吗?(比如文件上传停用什么的?)
问题仍然存在,我激活了显示错误,它说:
Warning: is_uploaded_file() expects parameter 1 to be string但是,当我回显$_ files‘’pic‘’0‘时,这意味着上传文件没有错误!如果是相对的,我应该说我有几个文件输入:
if(!is_uploaded_file($_FILES['pic-1']['tmp_name'])){
$pic_1_error="<p>error</p>";
};
if(!is_uploaded_file($_FILES['pic-2']['tmp_name'])){
$pic_2_error="<p>error</p>";
};
if(!is_uploaded_file($_FILES['pic-3']['tmp_name'])){
$pic_3_error="<p>error</p>";
};编辑:通过使用var_dump($_FILES);我得到了以下内容:
["pic-1"]=> array(5) { ["name"]=> array(1) { [0]=> string(15) "33333333333.jpg" } ["type"]=> array(1) { [0]=> string(10) "image/jpeg" } ["tmp_name"]=> array(1) { [0]=> string(14) "/tmp/php3ggYlE" } ["error"]=> array(1) { [0]=> int(0) } ["size"]=> array(1) { [0]=> int(81200) } } ["pic-2"]=> array(5) { ["name"]=> array(1) { [0]=> string(7) "728.jpg" } ["type"]=> array(1) { [0]=> string(10) "image/jpeg" } ["tmp_name"]=> array(1) { [0]=> string(14) "/tmp/phpucuBbg" } ["error"]=> array(1) { [0]=> int(0) } ["size"]=> array(1) { [0]=> int(32639) } } ["pic-3"]=> array(5) { ["name"]=> array(1) { [0]=> string(15) "33333333333.jpg" } ["type"]=> array(1) { [0]=> string(10) "image/jpeg" } ["tmp_name"]=> array(1) { [0]=> string(14) "/tmp/phpz6vehT" } ["error"]=> array(1) { [0]=> int(0) } ["size"]=> array(1) { [0]=> int(81200) } } 这意味着所有文件都已正确上传(不是吗?)
发布于 2015-09-11 11:41:23
我发现了问题。上传前我使用JQuery进行图像预览。它在改变文件输入,但我不知道。例如:来自
<input type="file" name="pic1" />至
<input type="file" name="pic1-[]" />这是我在PHP中所有问题的根源。
发布于 2015-09-11 09:48:27
您编写的“if-colon”条件应该是,而不是以分号(;)结束。
最好使用for循环来实现这一点。不加任何安全措施.
define('FILE_UPLOAD_LIMIT', 5);
$numFiles = null;
$errors = [];
/*I do not have time to do a complete validation here. I would use loops, anyway.*/
try
{
if(is_array($_FILES) && !empty($_FILES) &&
isset($_FILES['files']) && is_array($_FILES['files']) && !empty($_FILES['files']) &&
isset($_FILES['files']['tmp_name']) && is_array($_FILES['files']['tmp_name']) && !empty($_FILES['files']['tmp_name']) &&
isset($_FILES['files']['error']) && is_array($_FILES['files']['error']) && !empty($_FILES['files']['error']))
{
$numFiles = count($_FILES['files']['tmp_name']);
if($numFiles > FILE_UPLOAD_LIMIT)
{
$_FILES = [];
throw new DomainException("Too many files uploaded");
}
}
else
{
throw new DomainException("No files were uploaded.");
}
}
catch(DomainException de)
{
//Handle it.
}
for($i = 0; $i < $numFiles; $i++)
{
if(is_uploaded_file($_FILES['files']['tmp_name'][$i]) && ($_FILES['files']['error'][$i] === 0))
{
//Do something security related.
//Do something with the file.
}
else
{
$errors[$i] = "<p>File upload error on file #" . ($i + 1) . "</p>";
}//<------No semi-colon here.
}此外,请检查php.ini中的$_POST、文件、处理限制相关设置。检查临时文件夹和要将文件移动到的文件夹中的所有必要文件权限。最重要的是,如果您同时上载多个文件,则在[]属性值旁边添加HTML5。也要确保使用multiple="multiple"属性。
<form id="fileUploadForm" name="fileUploadForm_" enctype="multipart/form-data" method="post" action="foo.php">
<input type="file" name="files[]" multiple="multiple">
<input type="file" name="files[]" multiple="multiple">
<!--blah-->
</form>http://php.net/manual/en/features.file-upload.multiple.php
发布于 2015-09-11 10:32:37
正如您在var_dump输出中所看到的,每个数组都包含一个进一步的数组。实际上是:
$_FILES['pic-1']['tmp_name'][0]您是否有机会用name="pic-1[]"声明表单中的输入?这就解释了多余的内部阵列。
https://stackoverflow.com/questions/32506982
复制相似问题