上传图片时出现php foreach错误

时间:2014-03-03 09:09:40

标签: php jquery ajax foreach image-uploading

所以这就是问题所在。我从我的PHP脚本中得到一些奇怪的行为,我用它上传图像而不刷新网站。 Bellow有2个脚本,jquery / ajax和php。实际上它工作得很好,但我发现了一个错误。这就是发生的事情。

我选择的图像小于5 MB - 图像上传 - 正确 我选择了一个7 MB的图像 - 我得到一个错误“图像很大” - 正确 我选择的图像小于5 MB - 图像上传 - 正确 我选择7 MB的图像(同一个) - 我得到“为foreach提供的无效参数”和“不是图像”

当我按照该顺序选择图像时会发生这种情况。每次尝试时我都尝试选择小于5mb的图像。我不知道发生了什么事。请记住,我是PHP的初学者,所以代码可能不是“应该是”,我打开了关于改进或做不同的建议

HTML

<form class="uploadImageForm" method="post" enctype="multipart/form-data">
<input type="file" name="userImage" id="images">
<input type="submit" name="submitImage">  
</form>

Jquery / ajax代码

if (window.FormData) {
    formdata = new FormData();
    $('#images').on("change", function(evt) {

        var reader, file;   
        file = this.files[0];

        if (window.FileReader) {
            reader = new FileReader();
            reader.readAsDataURL(file);
        }

        if (formdata) {
            formdata.append("userImage[]", file);
        }

        if (formdata) {
            $.ajax({
            url: "includes/upload.php",
            type: "POST",
            data: formdata,
            processData: false,
            contentType: false,
            success: function (res) {

                var result = res;
                if(result == "not an image"){
                    console.log("error - this is not an image");
                }else if(result == "image too big"){
                    console.log("error - image to big")
                }else{
                    console.log("result", result);
                    $('img.userImage').attr("src", result);
                }
            }
            });     
        }   

    });
}else{
    $('input[name="userImage"]').on("change", function(){
        $('input[name="submitImage"]').trigger("click");
    });
}  

PHP代码

<?php
session_start();
$sessionId = session_id();

foreach ($_FILES["userImage"]["name"] as $key => $value) {
    $name = $_FILES["userImage"]["name"][$key];
    $size = $_FILES["userImage"]["size"][$key];
    $tmpName = $_FILES["userImage"]["tmp_name"][$key];
    $type = explode("/", $_FILES["userImage"]["type"][$key]);
    $type = $type[1];
}
$possibleTypes = array("jpeg", "jpg", "gif", "png", "JPEG", "JPG");
$maxSize = 5000000;

if($size > $maxSize){
    echo "image too big";
    die();
}
else if(!in_array($type, $possibleTypes)){
    echo "not an image, this type is: " .$type;
    die();
}
else{
    $directory = ("../user_img/".$sessionId);
    if(!file_exists($directory)){
        mkdir($directory, 0777);
    }
    else{
        foreach(glob($directory ."/*.*") as $file) {
            unlink($file);
        }
    }
    move_uploaded_file( $tmpName, $directory."/" . $sessionId."_img.".$type);   

$img_src =  "user_img/".$sessionId."/".$sessionId."_img.".$type;
echo $img_src;
}
?>

1 个答案:

答案 0 :(得分:1)

您必须增加upload_max_filesize中的post_max_sizephp.ini值。

似乎所提供的图片太大而无法上传,因此您没有上传图片,例如你可以在foreach中循环使用noh值。

修改

关于你的评论,我认为我发现了错误:

您在formdata = new FormData();之前实例化onChange-Handler。 因此,在输入更改后,将img-path附加到数组。在您上传图像后,添加下一个图像。但formData-Array也包含前一个并且未清除。因此,当您在没有页面刷新的情况下上传新图像时,它会相加,并且所有以前上传的图像也会被传输。每次。