首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的文件上传代码怎么了?

我的文件上传代码怎么了?
EN

Stack Overflow用户
提问于 2015-09-10 16:17:55
回答 3查看 322关注 0票数 0

我不知道问题出在哪里。从post表单上传文件后,我用以下方法检查:

代码语言:javascript
复制
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

这里有什么问题?主机有问题吗?(比如文件上传停用什么的?)

问题仍然存在,我激活了显示错误,它说:

代码语言:javascript
复制
Warning: is_uploaded_file() expects parameter 1 to be string

但是,当我回显$_ files‘’pic‘’0‘时,这意味着上传文件没有错误!如果是相对的,我应该说我有几个文件输入:

代码语言:javascript
复制
            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);我得到了以下内容:

代码语言:javascript
复制
 ["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) } } 

这意味着所有文件都已正确上传(不是吗?)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-09-11 11:41:23

我发现了问题。上传前我使用JQuery进行图像预览。它在改变文件输入,但我不知道。例如:来自

代码语言:javascript
复制
<input type="file" name="pic1" />

代码语言:javascript
复制
<input type="file" name="pic1-[]" />

这是我在PHP中所有问题的根源。

票数 2
EN

Stack Overflow用户

发布于 2015-09-11 09:48:27

您编写的“if-colon”条件应该是,而不是以分号(;)结束

最好使用for循环来实现这一点。不加任何安全措施.

代码语言:javascript
复制
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"属性。

代码语言:javascript
复制
<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

票数 1
EN

Stack Overflow用户

发布于 2015-09-11 10:32:37

正如您在var_dump输出中所看到的,每个数组都包含一个进一步的数组。实际上是:

代码语言:javascript
复制
$_FILES['pic-1']['tmp_name'][0]

您是否有机会用name="pic-1[]"声明表单中的输入?这就解释了多余的内部阵列。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32506982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档