【问题标题】:Restricting all but one file format to be uploaded限制上传除一种文件格式外的所有文件格式
【发布时间】:2014-06-19 10:38:36
【问题描述】:

我正在研究 MySQL 和 PHP,对于我的第一部作品,我已经开始在审查小组工作。您可以简单地将您的产品评论上传到数据库,稍后直接从​​面板(在本例中为本地网站)浏览它们。

问题是,我不知道如何在上传时控制所有文件格式,除了 .pdf!更清楚地说:我只希望我的上传表单接受要上传的 .pdf 文件。目前它没有任何限制,这是我的代码:

<?php
  if(isset($_POST['upload']) && $_FILES['userfile']['size'] > 0)
  {                                      
    $revName = $_POST['revname'];
    $revRating = $_POST['rating'];
    $revRecommend = $_POST['recommend'];
    $fileName = $_FILES['userfile']['name'];
    $tmpName = $_FILES['userfile']['tmp_name'];
    $fileSize = $_FILES['userfile']['size'];
    $fileType = $_FILES['userfile']['type'];

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

    if(!get_magic_quotes_gpc())
    {
      $fileName = addslashes($fileName);
    }

    rename($tmpName,"C:\\xampp\\htdocs\\ReviewArchieve\\files\\reviews\\".$fileName);

    include 'include/config.php';
    include 'include/opendb.php';

    $query = "INSERT INTO files (revname, rating, recommend, name, size, type, content)".
    "VALUES ('$revName', '$revRating', '$revRecommend', '$fileName', '$fileSize', '$fileType', '$content')";

    mysql_query($query) or die('Error, query failed'.mysql_error());
    include 'include/closedb.php';

    echo "<br>File $fileName uploaded<br>";
  }
?>

搞定了!

感谢 MIME 推荐,我设法学到了一些新东西,并通过一点调查完成了我的任务!这不是正确答案中提供的代码部分,在我的情况下根本不起作用,无论我做什么,而是我使用了这种方法:

我注意到我已经包含了文件类型。 $fileType = $_FILES['userfile']['type'];

所以现在我只需要从中创建一个 if,如下所示:

if($fileType == 'application/pdf') {
   *** Code to be driven here, same as above on the original code ***
}
else {
   echo "Invalid file, upload interrupted!";
}

【问题讨论】:

  • 对这个系统的任何整体改进也将受到高度赞赏!我知道它看起来很乱,而且文件路径有点笨,但我仍在寻找使它们更...可操作的方法?

标签: php mysql


【解决方案1】:

答案:

....
if(isset($_POST['upload']) && $_FILES['userfile']['size'] > 0)
{
    $tmpName = $_FILES['userfile']['tmp_name'];
    if (mime_content_type($tmpname) != 'application/pdf') { 
        die("uploaded file not valid");
    }                              
....

这里有很多问题,最大的有:

  1. SQL 注入。您必须清理您的用户输入,否则小鲍比桌会拜访您。考虑使用参数化查询

  2. 您应该检查文件的 mimetype。 http://www.php.net//manual/en/function.mime-content-type.php 虽然已被弃用,但可以开箱即用。你应该使用文件信息。

【讨论】:

  • 谢谢你的回复,我很期待第一个案例,但对于第二个,我已经知道它是“应用程序/pdf”,但我可以举个例子如何把它放在那里以及确切的位置。
  • if (mime_content_type($tmpname) != 'application/pdf') { die("uploaded file not valid"); } 行中的某事
  • 没有让它直接工作,但这给了我一个很好的线索,我正在寻找我正在寻找的功能,所以谢谢,问题回答了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-03
  • 2015-01-25
  • 2011-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多