Php 什么';我的文件上传代码有什么问题?
我不知道是什么问题。从post表单上传文件后,我检查:Php 什么';我的文件上传代码有什么问题?,php,Php,我不知道是什么问题。从post表单上传文件后,我检查: if(!is_uploaded_file($_FILES['pic']['tmp_name'])){ $pic_error="<p>file upload error</p>"; } else{ do something }; 但是当我回显$_文件['pic']['error']['0']时;它表示上传文件时没有错误! 如果是相对的,我应该说我有几个文件输入: if(!is_uploaded
if(!is_uploaded_file($_FILES['pic']['tmp_name'])){
$pic_error="<p>file upload error</p>";
}
else{
do something
};
但是当我回显$_文件['pic']['error']['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>";
};
这意味着所有文件都已正确上载(是否?)。您编写的“if-else”条件不应以分号(;)结尾 这最好通过
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.
}
正如您在
var\u dump
输出中看到的,每个数组都包含一个进一步的数组。实际上是:
$_FILES['pic-1']['tmp_name'][0]
您是否有机会使用
name=“pic-1[]”
在表单中声明输入?这就解释了多余的内部数组。我发现了问题。在上传之前,我使用JQuery进行图像预览。它正在改变文件输入,但我不知道。例如:
从
到
这就是我在PHP中遇到的所有问题的根源。^请检查错误,但我几乎可以保证,您上载到的目录没有授予写入权限to@samrap在这种情况下,它应该运行
do something code
,因为我首先检查文件是否已上载,然后检查文件类型是否有效,然后使用move_uploaded_file。是否检查了错误?为什么$_FILES['pic']['error']['0']?您是否在错误报告中打开了通知和警告?是的,var\u转储($\u文件)
非常欢迎。当然,它比问题中的要好。对不起,我没听清楚,你是说最后一个“;”之后“}”?我认为这将使代码更加优化。显示代码的结尾。“错了吗?”110男孩说,我必须研究它才能给出一个明确的答案,但据我所知,这在PHP中是无效的语法。语句以分号结尾,但块语句不应以分号结尾。好的基本答案。“很好地回答了这个问题。嗯,我希望我帮助缩小了可能性。”AnthonyRutledge肯定是这样。
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.
}
<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>
$_FILES['pic-1']['tmp_name'][0]
<input type="file" name="pic1" />
<input type="file" name="pic1-[]" />