【问题标题】:PHP uploaded file exist in TMP name, but in fact its not uploadedPHP上传的文件存在于TMP名称中,但实际上它没有上传
【发布时间】:2016-03-16 06:23:20
【问题描述】:

我在PHP中上传了一个文件,它在数组$_FILES中,tmp_name里面填的是他的名字,但实际上文件并没有上传,为什么会这样?如果 tmp_name 已填满,是否意味着它应该已上传?因为我什至将文件夹设置为 0777,仍然无法上传,在 phpinfo(); - 一切都在...请帮助

foreach($_FILES as $file)
{

    foreach($file['tmp_name']['new'] as $name) {

        echo '<br />'.$name.'<br />';
        if(is_uploaded_file($name))
        {
            echo '1';
        }
        else
        {
            echo '0'; // shows this
        }
        //$res = move_uploaded_file($name, "/uploads");
        //echo $res;
    }
    exit;
}
//exit;

is_uploaded_file - 返回 false

Array
(
    [name] => Array
        (
            [new] => Array
                (
                    [prikrepit_fajl] => 
                    [prikrepit_fajl1] => 
                    [prikrepit_fajl3] => ava.png
                    [prikrepit_fajl333] => ava.png
                    [prikrepit_fajl55555555] => 
                )

        )

    [type] => Array
        (
            [new] => Array
                (
                    [prikrepit_fajl] => 
                    [prikrepit_fajl1] => 
                    [prikrepit_fajl3] => image/png
                    [prikrepit_fajl333] => image/png
                    [prikrepit_fajl55555555] => 
                )

        )

    [tmp_name] => Array
        (
            [new] => Array
                (
                    [prikrepit_fajl] => 
                    [prikrepit_fajl1] => 
                    [prikrepit_fajl3] => /home/users1/v/vizitka77/tmp/phppOtsIp
                    [prikrepit_fajl333] => /home/users1/v/vizitka77/tmp/phpgY6RQ9
                    [prikrepit_fajl55555555] => 
                )

        )

    [error] => Array
        (
            [new] => Array
                (
                    [prikrepit_fajl] => 4
                    [prikrepit_fajl1] => 4
                    [prikrepit_fajl3] => 0
                    [prikrepit_fajl333] => 0
                    [prikrepit_fajl55555555] => 4
                )

        )

    [size] => Array
        (
            [new] => Array
                (
                    [prikrepit_fajl] => 0
                    [prikrepit_fajl1] => 0
                    [prikrepit_fajl3] => 25352
                    [prikrepit_fajl333] => 25352
                    [prikrepit_fajl55555555] => 0
                )

        )

)

【问题讨论】:

  • 向我们展示您尝试过的代码。
  • 你为什么说它没有上传?您是否真的检查了上传文件夹或发生了其他事情并且您假设它没有上传?发布所有代码和任何错误消息或显示文件未上传的日志文件条目。
  • is_uploaded_file - 返回 false,我将 tmp_name 传递给它
  • @Divakarcool 更新
  • @Yash 更新代码

标签: php apache


【解决方案1】:

需要指出的重要一点:如果您在请求期间不保存上传的文件,PHP 会在请求终止时将其删除,因此文件将消失。

其次,您正在错误地循环数组。您应该尝试使用 for 循环:

for ($i = 0; $i < sizeof($_FILES['new']['tmp_name']); ++$i) {
    $name = $_FILES['new']['name'][$i];
    $path = $_FILES['new']['tmp_name'][$i];
    $err  = $_FILES['new']['error'][$i];

    if ($err != UPLOAD_ERR_OK) {
        // check error code
        // report error
        continue;
    }

    if (is_uploaded_file($path)) {
        // do something with the file
    }
}

编辑:在您的注释代码中,move_uploaded_file($name, "/uploads"); 不是移动文件的正确语法。

它应该看起来更像:

move_uploaded_file($path, "uploads/{$name}");

注意:如果您没有检查文件内容和扩展名,上述内容是危险的。非常小心,不允许上传带有 .php 或其他可执行扩展名的文件。

【讨论】:

  • 当然我会在请求期间保存它,我想这是我可以保存它的唯一方法)
  • is_uploaded_file 返回 false,因为传递给它的值有误。在您的输出中,有 3 个文件有错误 UPLOAD_ERR_NO_FILE 表示没有文件被传递到输入。 @BlurryScript 也请查看我的最后一次编辑。
  • 是的,我检查了 UPLOAD_ERR_OK - 它为零....即使很难,我已经添加了 /uploads/{$name} - 它不起作用,文件夹是 0777(可写),没有错误,我的猜测是基于is_file_uploaded - 返回false,所以看起来tmp文件夹中没有上传文件......它也是0777......我做错了什么?
  • $name 在我上面的例子中被假定为$_FILES['new']['name'][$i];。您可以使用您现在拥有的代码更新您的问题,以便我知道您在使用什么吗?部分问题可能是move_uploaded_file 中的目标目录应该是绝对路径或相对路径。 /uploads 不是正确的路径。
  • 神圣的代码.....$_FILES 数组被 umi cms 更改了一些,我不知道它到底是什么,但我只是更改了输入 html 的默认名称文件,它的工作...
【解决方案2】:

您应该阅读以下内容:http://php.net/manual/en/function.is-uploaded-file.php

还有这个:http://php.net/manual/en/features.file-upload.php

您似乎错误地访问了 $_FILES。

foreach($_FILES['tmp_name']['new'] as $inputName => $file)
{
    // $inputName is the name attribute from the HTML form
    echo '<br />'.$file.'<br />';
    if( is_uploaded_file($file) )
    {
        echo '1';
    }
    else
    {
        echo '0';
    }
    //$file = umiImageFile::upload('uploads',$name,'uploads','new');
    //$res = move_uploaded_file($name, "/uploads");
    //echo $res;
}

【讨论】:

  • 没有$file['upload_file_name']这样的东西
  • 我的错。我没有注意不必要的内部循环。
  • 根据您的数组输出,应该这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-07
  • 2019-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多