Php 上载GIF时出错
我可以上传任何带有此代码的图像,但当我尝试上传gif时,我得到了一个错误。 下面是我如何尝试的,我得到的错误是Php 上载GIF时出错,php,mysql,upload,Php,Mysql,Upload,我可以上传任何带有此代码的图像,但当我尝试上传gif时,我得到了一个错误。 下面是我如何尝试的,我得到的错误是错误2:错误上传文件。这是在第二个IF块上。这里有什么问题 define('MAX_FILE_SIZE', 20000000000); $permitted = array('image/jpeg', 'image/jpeg', 'image/png', 'image/gif'); if (isset($_POST['upload'])) { $caption = $_POST['ca
错误2:错误上传文件
。这是在第二个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';
}
更新:
这是发生在大于1MB的.gif上的。。我能够上传<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:错误上载文件
块
if (in_array($fileType, $permitted) && $fileSize > 0
&& $fileSize <= MAX_FILE_SIZE) {
if(在数组中($fileType,$allowed)&&$fileSize>0
&&$fileSize检查您的php.ini文件和phpinfo()
将返回什么以及它们是否相等。检查您是否有多个php.ini文件
我以前也遇到过同样的问题,结果证明这就是原因。打印$\u文件['userfile']['type'],这可能是不允许的。gif大于1MB时会发生这种情况。我可以上载<1MB gif。我不知道为什么这部分失败,因为$filetype
和$allowed
是可以的。我编辑了我的问题并从var_dump添加了结果。请看$filetype
只是一个空变量,这就是为什么您的代码是空的失败。此外,您不需要var\u dump
我们通过代码已经知道的$allowed
变量(它的内部内容)。您实际上也需要var\u dump
的$fileSize
。var\u dump($fileSize)
返回0int 0
0>0
条件仍然失败。最好是var\u dump
您的$\u文件
数组本身。用var\u dump($\u文件)
更新了我的问题,但仍然不知道这是为什么
if (in_array($fileType, $permitted) && $fileSize > 0
&& $fileSize <= MAX_FILE_SIZE) {