我可以使用此代码上传任何图像但是当我尝试上传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文件。
答案 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文件。
之前我遇到过同样的问题,事实证明这就是原因。