所以这就是问题所在。我从我的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;
}
?>
答案 0 :(得分:1)
您必须增加upload_max_filesize
中的post_max_size
和php.ini
值。
似乎所提供的图片太大而无法上传,因此您没有上传图片,例如你可以在foreach中循环使用noh值。
修改强>
关于你的评论,我认为我发现了错误:
您在formdata = new FormData();
之前实例化onChange-Handler
。
因此,在输入更改后,将img-path附加到数组。在您上传图像后,添加下一个图像。但formData-Array也包含前一个并且未清除。因此,当您在没有页面刷新的情况下上传新图像时,它会相加,并且所有以前上传的图像也会被传输。每次。