文件上传 php $_FILES 未定义索引错误

Posted

技术标签:

【中文标题】文件上传 php $_FILES 未定义索引错误【英文标题】:file upload php $_FILES undefined index error 【发布时间】:2014-02-11 19:26:54 【问题描述】:
<?php

$name = $_FILES["file"]["name"];
//$size = $_FILES['file']['size']
//$type = $_FILES['file']['type']


$tmp_name = $_FILES['file']['tmp_name'];

$error = $_FILES['file']['error'];

if (isset ($name)) 
    if (!empty($name)) 

    $location = 'uploads/';

    if  (move_uploaded_file($tmp_name, $location.$name))
        echo 'Uploaded';    
        

         else 
          echo 'please choose a file';
          
    
?>

<form action="upload.php" method="POST" enctype="multipart/form-data">
    <input type="file" name="file"><br><br>
    <input type="submit" value="Submit">
</form>

我收到“通知:未定义索引”错误消息。 enctype 包含在表单标签中,所以我不知道它是什么.. 谁能帮帮我??

【问题讨论】:

您的整个代码是在一个文件中,还是分成两个单独的文件? @Fred -ii- 单人,200% 我同意。我正要发布对这种影响的答案,但它已经在下面得到了处理。 @voodoo417 其实我改变了主意。我在下面发布了一份工作副本。 @voodoo417 【参考方案1】:

如果没有上传任何内容并且 isset 测试有点没用,第一个作业会引发警告..

您可以按如下方式更改您的代码

<?php

if (isset($_FILES["file"]["name"])) 

    $name = $_FILES["file"]["name"];
    $tmp_name = $_FILES['file']['tmp_name'];
    $error = $_FILES['file']['error'];

    if (!empty($name)) 
        $location = 'uploads/';

        if  (move_uploaded_file($tmp_name, $location.$name))
            echo 'Uploaded';
        

     else 
        echo 'please choose a file';
    

?>

<form action="test.php" method="POST" enctype="multipart/form-data">
    <input type="file" name="file"><br><br>
    <input type="submit" value="Submit">
</form>

【讨论】:

谢谢!未定义的索引错误消失了,但现在我得到了这个错误: 警告:move_uploaded_file(uploads/testhoes.jpg):无法打开流:第 14 行的 /var/www/upload.php 中没有此类文件或目录。警告:move_uploaded_file():无法在第 14 行的 /var/www/upload.php 中将“/tmp/phpnvksz8”移动到“uploads/testhoes.jpg” 对不起,上面的错误是 2 个错误,但我不知道如何在它们之间放置空格 上传目录必须存在且有写权限(即755)【参考方案2】:

上传文件时解决 php 中未定义的索引 由于最大文件大小限制php.ini 的变化

`max_execution_time` = 300  
`max_input_time` = 240  
`post_max_size` = 128M
`upload_max_filesize` = 128M

根据你的要求改变

【讨论】:

谢谢@Randeep Singh xampp内部位置:xampp/php/php.ini【参考方案3】:
<form action="test.php" method="POST" enctype="multipart/form-data"> /* mistake here: change test.php to your source: upload.php */
    <input type="file" name="file"><br><br>
    <input type="submit" value="Submit">
</form>

【讨论】:

【参考方案4】:

如果您将整个代码用作一个文件(我怀疑您是这样),那么您需要使用条件语句执行以下操作,我在发布之前对其进行了测试(和工作) .

另外,请确保您的 uploads 文件夹设置了正确的写入权限并且它存在。

<?php

if(isset($_POST['submit']))
$name = $_FILES["file"]["name"];
//$size = $_FILES['file']['size']
//$type = $_FILES['file']['type']

$tmp_name = $_FILES['file']['tmp_name'];
$error = $_FILES['file']['error'];

if (isset ($name)) 
    if (!empty($name)) 

    $location = 'uploads/';

    if  (move_uploaded_file($tmp_name, $location.$name))
        echo 'Uploaded';    
        

         else 
          echo 'please choose a file';
          
    

?>

<form action="" method="POST" enctype="multipart/form-data">
    <input type="file" name="file"><br><br>
    <input type="submit" name="submit" value="Submit">
</form>

脚注:

我添加了一个条件语句:

if(isset($_POST['submit']))

我将提交按钮命名为:(与isset() 条件语句一起使用)

<input type="submit" name="submit" value="Submit">

注意:如果您实际上将发布的代码用作两个单独的文件,那么您可以简单地复制此答案中的 PHP,并以单​​独的 html 表单命名您当前的提交按钮集正如我上面所示的name="submit"(例如调用您的表单upload_form.htm),但保留action="upload.php" 并相应地命名PHP 上传处理程序文件。

【讨论】:

就像菲利普的答案一样,未定义的索引错误消失了。谢谢! 但现在我收到此错误:警告:move_uploaded_file(uploads/testhoes.jpg): failed to open stream: No such file or directory in /var/www/upload.php on line 14. 警告: move_uploaded_file(): 无法在第 14 行的 /var/www/upload.php 中将“/tmp/phpnvksz8”移动到“uploads/testhoes.jpg” 文件夹是否存在,是否可写? @user3221348 意思是,它是否具有适当的写权限? 你还没有回答我的问题。 @user3221348 tmp/文件夹还是upload/文件夹?【参考方案5】:
// Count total files
$countfiles = count($_FILES['event_Img']['name']);
for($i=0;$i<$countfiles;$i++)
    $filename = $_FILES['event_Img']['name'][$i];

    // Get extension
    $ext = end((explode(".", $filename)));
    move_uploaded_file($_FILES['event_Img']['tmp_name'][$i], "uploads/".$filename);
    $sqlBrand = 'INSERT INTO ot_event_images 
                SET 
                event_id=:event_id, 
                imagepath=:imagepath, 
                imagemimetype=:imagemimetype';
    $query2 = $conn->prepare($sqlBrand);
    $query2->bindParam(':event_id', $eventid);
    $query2->bindParam(':imagepath', $filename);
    $query2->bindParam(':imagemimetype', $ext);
    $status2 = $query2->execute();

if($status2)


    echo "File upload successfully";

else

    echo "error";

【讨论】:

【参考方案6】:
1. You hadn't mention name value in your submit button.
2. Use isset function.

<html>
<body>

<form action="" method="POST" enctype="multipart/form-data">
    <input type="file" name="file"><br><br>
    <input type="submit" value="Submit" name="submit">
</form>

</body>
</html>



<?php

if(isset($_POST['submit']))

$name = $_FILES["file"]["name"];

echo $name;


//$size = $_FILES['file']['size']
//$type = $_FILES['file']['type']


$tmp_name = $_FILES['file']['tmp_name'];

$error = $_FILES['file']['error'];

if (isset ($name)) 
    if (!empty($name)) 

    $location = 'uploads/';

    if  (move_uploaded_file($tmp_name, $location.$name))
        echo 'Uploaded';    
        

         else 
          echo 'please choose a file';
          
    
       
?>

【讨论】:

以上是关于文件上传 php $_FILES 未定义索引错误的主要内容,如果未能解决你的问题,请参考以下文章

未定义 FormData 时如何在 Web Workers 中上传文件

php 文件上传 $_FILES 错误码

检查PHP中是否超出了最大上传文件数

PHP文件上传error的错误类型 - $_FILES['file']['error']

PHP 错误 - 上传文件

php如何实现一次性上传多个文件