上传GIF时出错

时间:2014-02-26 07:13:54

标签: php mysql upload

我可以使用此代码上传任何图像但是当我尝试上传gif时出现错误。 这是我尝试的方式,我得到的错误是Error 2: ERROR upload file。这是在第二个IF块上。这可能有什么问题?

define('MAX_FILE_SIZE', 20000000000);
$permitted = array('image/jpeg', 'image/jpeg', 'image/png', 'image/gif');
if (isset($_POST['upload'])) {

$caption = $_POST['caption'];
$fileName = $_FILES['userfile']['name'];
$tmpName = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
$fileType = $_FILES['userfile']['type'];
$category = $_POST['gif_cat'];

$ext = substr(strrchr($fileName, "."), 1);
// generate the random file name
$randName = md5(rand() * time());

// gif name with extension
$myFile = $randName . '.' . $ext;
// save gif path
$path = "../upload/gifs/" . $myFile;

if (in_array($fileType, $permitted) && $fileSize > 0
    && $fileSize <= MAX_FILE_SIZE) {

    $result = move_uploaded_file($tmpName, $path);

    if (!$result) {
        echo "Error uploading gif file";
        exit;
    } else {
        $db = new mysqli("localhost", "user", "pass", "table");

        if (mysqli_connect_errno()) {
            printf("Connect failed: %s<br/>", mysqli_connect_error());
        }
        mysqli_set_charset($db, "UTF8");

        $query = "INSERT INTO gifs (caption, name, size, type, file_path, gif_cat) VALUES (?,?,?,?,?,?)";
        $conn = $db->prepare($query);
        if ($conn == TRUE) {
            $conn->bind_param("ssisss",$caption, $myFile, $fileSize, $fileType, $path, $category);
            if (!$conn->execute()) {
                echo 'error insert';
            } else {
                echo "Gif {$_FILES['userfile']['name']} was successfully uploaded<br />
                <a href='index.php'>Add another gif</a><br />";
                exit;
            }
        } else {
            die("Error 1: ERROR preparing Statement");
        }
    }
} else {
    echo 'Error 2: ERROR upload file';
}
} else {
echo 'Error 3';
}

的var_dump($ _文件)

array (size=1)
'userfile' => 
array (size=5)
  'name' => string 'azbRWYK_460sa.gif' (length=17)
  'type' => string '' (length=0)
  'tmp_name' => string '' (length=0)
  'error' => int 1
  'size' => int 0

更新:

当.gifs大于1MB时会发生这种情况。我能够上传&lt; 1MB gif。

更新2: 那很奇怪。在phpinfo()上结果是

max_file_uploads    20  20
post_max_size   8M  8M
upload_max_filesize 2M  2M

但在我的php.ini中我有

upload_max_filesize = 20M
post_max_size = 20M
max_file_uploads - I don't have this in php.ini?!

我如何有这种差异?哪里可以找到第二个php.ini?

更新3:

好的,我在apache文件夹中找到了另一个php.ini,之后我改变了值就行了。我从未想过第二个php.ini文件。

2 个答案:

答案 0 :(得分:2)

实际上,if语句的这部分内容正在失败,而您正在访问Error 2: ERROR upload file块。

  if (in_array($fileType, $permitted) && $fileSize > 0
        && $fileSize <= MAX_FILE_SIZE) {

制作var_dump()变量$fileType$fileSize,看看它们是否满足您的if条件。

答案 1 :(得分:0)

检查你的php.ini文件和phpinfo()将返回什么以及它们是否相等。检查你是否有多个php.ini文件。

之前我遇到过同样的问题,事实证明这就是原因。