Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 什么';我的文件上传代码有什么问题?_Php - Fatal编程技术网

Php 什么';我的文件上传代码有什么问题?

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

我不知道是什么问题。从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_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-[]" />