【发布时间】:2014-02-26 07:13:54
【问题描述】:
我可以使用此代码上传任何图片,但是当我尝试上传 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($_FILES)
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
更新:
这发生在 .gif 大于 1MB 的情况下。我能够上传
更新 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 文件。
【问题讨论】:
-
打印 $_FILES['userfile']['type'],它可能不是允许的
-
这种情况发生在 .gif 大于 1MB 的情况下。我能够上传