Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 限制上载除一种文件格式以外的所有文件格式_Php_Mysql - Fatal编程技术网

Php 限制上载除一种文件格式以外的所有文件格式

Php 限制上载除一种文件格式以外的所有文件格式,php,mysql,Php,Mysql,我正在学习MySQL和PHP,在我的第一部作品中,我开始在一个评审小组中工作。您只需将产品评论上传到数据库,然后直接从面板(本例中为本地网站)进行浏览 问题是,除了.pdf,我不知道如何控制上传时的所有文件格式!更清楚地说:我只希望我的上传表单接受要上传的.pdf文件。目前它没有任何限制,以下是我的代码: <?php if(isset($_POST['upload']) && $_FILES['userfile']['size'] > 0) {

我正在学习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>";
  }
?>
答复:

....
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");
    }                              
....
这里有很多问题,最大的问题是:

SQL注入。您必须清理用户输入,否则小bobby表将访问您。考虑使用参数化查询

您应该检查文件的mimetype。 尽管已弃用,但仍能解决此问题。你应该使用fileinfo


对该系统的任何改进都将受到高度赞赏!我知道它看起来很凌乱,文件路径有点哑,但我仍在寻找方法使它们更。。。功能正常?感谢您的回复,我期待第一种情况,但对于第二种情况,我已经知道它是application/pdf,但我可以使用一个示例,说明如何将它放在那里以及确切的位置。如果mime\u content\u type$tmpname!='application/pdf“{dieuploaded file not valid;}并没有通过此直接使其工作,但这为我寻找的函数提供了一个很好的线索,所以谢谢,问题得到了回答!
....
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");
    }                              
....