我有以下代码用于上传图片文件:
<?php
session_start();
If (!$_SESSION['logged_in']) {
header("location:login.php");
}
include "ConnectToDb.php";
$action = $_GET['method'];
$soruid = mysql_real_escape_string($_POST['question']);
If ($action == "image") {
If ($_FILES['image'][name] != "") {
$allowedExts = array("gif", "jpeg", "jpg", "png");
$extension = end(explode(".", $_FILES["image"]["name"]));
$unique = md5(microtime());
$date = date("Y-m-d H:i:s");
$who = $_SESSION['username'];
If ((($_FILES["image"]["type"] == "image/gif")
|| ($_FILES["image"]["type"] == "image/jpeg")
|| ($_FILES["image"]["type"] == "image/jpg")
|| ($_FILES["image"]["type"] == "image/pjpeg")
|| ($_FILES["image"]["type"] == "image/x-png")
|| ($_FILES["image"]["type"] == "image/png"))
&& ($_FILES["image"]["size"] < 500000000)
&& in_array($extension, $allowedExts)) {
$pic = $unique. "." .$extension;
move_uploaded_file($_FILES["image"]["tmp_name"], "answers/" . $pic);
$ekle = "INSERT INTO `answers` (who, question_id, image, date) values('$who', '$soruid', '$pic', '$date')";
$ok = mysql_query($ekle) or die (mysql_error());
header("location:question.php?s=$soruid");
}
}
} elseif ($action == "text") {
$text = mysql_real_escape_string($_POST['text']);
$date = date("Y-m-d H:i:s");
$who = $_SESSION['username'];
$ekle = "INSERT INTO `answers` (who, question_id, comment, date) values('$who', '$soruid', '$text', '$date')";
$ok = mysql_query($ekle) or die (mysql_error());
header("location:question.php?s=$soruid");
}
?>
如果图像的大小很小,例如10kb或类似的东西,上传过程可以正常工作,但是当我尝试上传大小为3 mb的文件时,脚本会顺利停止。
我检查了php限制,例如max_post_size,memory_limit等,似乎没问题。
我希望脚本上传图片然后重定向页面。
有什么问题?
编辑:
如果我使用下面的代码,它就可以了。
$pic = "sercan.jpg";
move_uploaded_file($_FILES["image"]["tmp_name"], "answers/" . $pic);
所以,我想这意味着问题在于代码。但是,它在哪里?
编辑2:
似乎问题在于if / else条件。当我删除它时,我可以上传大尺寸的图像。
If ((($_FILES["image"]["type"] == "image/gif")
|| ($_FILES["image"]["type"] == "image/jpeg")
|| ($_FILES["image"]["type"] == "image/jpg")
|| ($_FILES["image"]["type"] == "image/pjpeg")
|| ($_FILES["image"]["type"] == "image/x-png")
|| ($_FILES["image"]["type"] == "image/png"))
&& in_array($extension, $allowedExts)) {
..............
}
答案 0 :(得分:0)
如果文件太大,则$ _FILES为空。
所以,你的if语句:
if ($_FILES['image']) ...
不会开火。你的其他人也不会,因为这个条件没有得到满足。因此,脚本完成无错误,即使图像尺寸太大,也没有上传。
答案 1 :(得分:0)
更改此代码:
$allowedExts = array("gif", "jpeg", "jpg", "png");
$extension = end(explode(".", $_FILES["image"]["name"]));
对此:
$allowedExts = array("gif", "jpeg", "jpg", "png");
$bits = explode(".", $_FILES["image"]["name"]);
$extension = strtolower(end($bits));
解决了这个问题。
仍然不确定,如何在使用大尺寸上传失败的情况下使用小尺寸上传。
无论..