警告:为 foreach() 提供的参数无效 - 上传照片表单

Warning: Invalid argument supplied for foreach() - uploading photos form

嗨,我是 php 的新手,一直收到此错误:“警告:为 /home/site/folder/upload 中的 foreach() 提供的参数无效。php第 61 行。"

我正在尝试构建一个表单,用户可以在其中自动将一张或多张照片上传到目录,然后在其他位置显示。

每当我使用此表单时,我创建的它都会在我的网站上正常运行,但不幸的是,它一直打印出该错误并希望它消失。这是我正在使用的代码:

 <div>
        <form action="upload.php" enctype="multipart/form-data" method="POST">
            <input type="file" name="images[]" multiple="multiple"/>
            <input type="submit" name="submit" value="upload images"/>
        <form/>
        <?php
                    // check if uploads directory exists
            $dir = "images/";
            if(!is_dir($dir))
            {
                            echo "Directory not found, let's create the folder.";
                            mkdir($dir,"0777", true);
            }

            $countimg = 0;
            $allimg = 0;
            foreach($_FILES["images"]["name"] as $k=>$name)
            {
                         $allimg++;
                         $imgname = $_FILES["images"]["name"][$k];
                         $sizeimg = $_FILES["images"]["size"][$k];
                         $tmpname = $_FILES["images"]["tmp_name"][$k];
                                 //2.
                         $extension = strtolower(pathinfo($dir.$imgname, PATHINFO_EXTENSION));
                    if($extension=='png' || $extension=='jpg' ||$extension=='jpeg' ||$extension=='gif')
                                 {
                                        if($sizeimg < 2097152){
                                                        if(!file_exists($dir.$imgname)){
                                                                            //1.
                                                                    if(move_uploaded_file($tmpname,$dir.$imgname))
                                                                    {
                                                                                         $countimg++;
                                                                    }
                                                     }
                                        }
                         }
            }
            echo "You are trying to upload $allimg images".'<br>';
            echo "From $allimg image(s) - $countimg was/were uploaded with success".'<br>';
            $z = $allimg - $countimg;
            echo "$z image(s) were not uploaded: Not an image, over 2MB, or already uploaded.";

        ?>
    </div>

我测试了你的脚本,它工作正常。出现错误消息是因为您在启动 foreach 之前没有检查文件是否已上传。如果我登陆该页面,PHP 代码仍将被触发。要解决此问题,您可以使用以下方法:

<div>
        <form action="upload.php" enctype="multipart/form-data" method="POST">
            <input type="file" name="images[]" multiple="multiple"/>
            <input type="submit" name="submit" value="upload images"/>
        <form/>
        <?php

            if( $_POST['submit'] ) {

                $dir = "images/";
                if(!is_dir($dir))
                {
                                echo "Directory not found, let's create the folder.";
                                mkdir($dir,"0777", true);
                }

                $countimg = 0;
                $allimg = 0;
                foreach($_FILES["images"]["name"] as $k=>$name)
                {
                             $allimg++;
                             $imgname = $_FILES["images"]["name"][$k];
                             $sizeimg = $_FILES["images"]["size"][$k];
                             $tmpname = $_FILES["images"]["tmp_name"][$k];
                                     //2.
                             $extension = strtolower(pathinfo($dir.$imgname, PATHINFO_EXTENSION));
                        if($extension=='png' || $extension=='jpg' ||$extension=='jpeg' ||$extension=='gif')
                                     {
                                            if($sizeimg < 2097152){
                                                            if(!file_exists($dir.$imgname)){
                                                                                //1.
                                                                        if(move_uploaded_file($tmpname,$dir.$imgname))
                                                                        {
                                                                                             $countimg++;
                                                                        }
                                                         }
                                            }
                             }
                }
                echo "You are trying to upload $allimg images".'<br>';
                echo "From $allimg image(s) - $countimg was/were uploaded with success".'<br>';
                $z = $allimg - $countimg;
                echo "$z image(s) were not uploaded: Not an image, over 2MB, or already uploaded.";

            }

        ?>
    </div>

if( $_POST['submit'] ) 将确保在 运行 其余 PHP 代码之前提交表单。

尝试

if (count($_FILES)) {
    foreach($_FILES["images"]["name"] as $k=>$name) {
        ....
    }
}