图像未上传(可能与其大小有关)

时间:2014-02-23 00:05:44

标签: php file-upload filesize

我有以下代码用于上传图片文件:

<?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)) {

..............
}

2 个答案:

答案 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));

解决了这个问题。

仍然不确定,如何在使用大尺寸上传失败的情况下使用小尺寸上传。

无论..