PHP将文件上载到不使用gif、jpeg和其他文件类型的数据库

PHP将文件上载到不使用gif、jpeg和其他文件类型的数据库,php,mysql,file-upload,blob,Php,Mysql,File Upload,Blob,我有一个PHP/MySQL不工作的问题。我可以完美地上传.docx和.sql之类的文件,但是当我尝试使用.gif、.jpg.zip和.rar时,它不起作用 以下是上传表单代码: <?php if (isset($_GET['uploadError'])) { echo '<div id="error">There was an error uploading the file. Please try again</div>'; } elseif ((!is

我有一个PHP/MySQL不工作的问题。我可以完美地上传.docx和.sql之类的文件,但是当我尝试使用.gif、.jpg.zip和.rar时,它不起作用

以下是上传表单代码:

<?php 
if (isset($_GET['uploadError']))
{
    echo '<div id="error">There was an error uploading the file. Please try again</div>';
}
elseif ((!isset($_SESSION['dbusername']))&&(!isset($_SESSION['dbpassword'])))
{
    header('Location: ?page=login&uploadAttempt=true&attemptedSite=upload');
}
else
{
    echo '
    <center>
    <form class="form" enctype="multipart/form-data" action="uploadaction.php" method="POST">
    <input type="hidden" name="MAX_FILE_SIZE" value="30720" />
    <p class="uploadfile">
        <input name="uploadedfile" type="file" />
    </p>
    <p class="submit">
        <input type="hidden" name="upload" value="start" />
        <input type="submit" value="Upload File" />
    </p>
    </form></center>';
}
?>

以下是uploadaction.php代码:

    <?php
require('lib.php');
localhost_con('filehunt');
session_start();

if(isset($_POST['upload']) && $_FILES['uploadedfile']['size'] > 0)
{
    $fileName = $_FILES['uploadedfile']['name'];
    $tmpName  = $_FILES['uploadedfile']['tmp_name'];
    $fileSize = $_FILES['uploadedfile']['size'];
    $fileType = $_FILES['uploadedfile']['type'];

    $fp      = fopen($tmpName, 'r');
    $content = fread($fp, filesize($tmpName));
    $content = addslashes($content);
    fclose($fp);

    if(!get_magic_quotes_gpc())
    {
        $fileName = addslashes($fileName);
    }
    /*$fh = fopen($_FILES['uploadedfile']['tmp_name'], 'r');
    $theData = fread($fh, filesize($_FILES['uploadedfile']['tmp_name']));
    $theData = mysql_real_escape_string($theData);
    fclose($fh); */
    $date = date("y/m/d : H:i:s", time());

    $sql = "INSERT INTO files (rowID, file, mimetype, data, uploaded_by, uploaded_date, size, times_downloaded) 
    VALUES (NULL, '$fileName', '$fileType', '$content', '$user', '$date', $fileSize, 0);";

    if (mysql_query($sql,$con))
    {
        header('Location: index.php?page=search&uploadSucces=true');
    } 
    else echo mysql_error();
}
else header('Location: index.php?page=upload&uploadError=true');

?>

不太像舒尔,但这:

$fileType = $_FILES['uploadedfile']['type'];
必须是这样的:

$finfo = new finfo();
$fileType = $finfo->file($_FILES['uploadedfile']['tmp_name'], FILEINFO_MIME);

我对其他类型的文件也有同样的问题。解决方法是使用base64对文件进行编码,这样传输更安全(不要包含可能截断流的无效字符)。

旁注:
addslashes
转义不够,需要使用
mysql\u real\u escape\u string
,并且应该在每个
头()之后
die()
。。。但是+1的代码总体上不会让我的眼睛流血。看看这篇文章:[[1]:嗨,谢谢!我为什么要在header()之后运行die(),当它重定向到脚本之外时?谢谢,AdamAre
$fileName
$fileSize
成功输入?检查您在数据库中输入的数据类型。您好,用户1207792,我尝试过,但代码不太有效。我编写了一点额外的代码来指定错误消息,因此我现在有了确切的错误消息。MAX\u文件_大小为30720,我尝试上载的文件大小为180 kb。我收到的错误消息是“值:2;上载的文件超过了HTML表单中指定的MAX_file_SIZE指令”这是wierd,因为im上传的文件小于30MB,你可以在你的php.ini中尝试以下选项:
upload\u max\u filesize=10M post\u max\u size=10M
…或者你可以根据自己的意愿进行调整。嗯……我将upload\u max\u filesize改为31457280字节,post\u max\u size改为31457280字节,我仍然收到错误,但我认为错误来自来自的HTML,即使我将最大文件大小设置为30MB,您的HTML表单中是否有任何限制/代码规范?就像
我看到的
…只需将此处的值增加到您需要的值即可。