PHP 上传的文件存在于 TMP 名称中,但实际上它没有上传


PHP uploaded file exist in TMP name, but in fact its not uploaded

我在 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 - 返回假

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
                )
        )
)

需要指出的重要一点是:如果您在请求期间没有保存上传的文件,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或其他可执行扩展名的文件。

你应该阅读以下内容: 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;
}