【问题标题】:How to display error for uploading file with unwanted extension?上传带有不需要的扩展名的文件时如何显示错误?
【发布时间】:2015-02-26 16:05:27
【问题描述】:

我正在编写一个脚本,该脚本将文件上传到特定文件夹并在所有条件都为真且一切正常的情况下将数据提交到数据库。该脚本检查文件大小,如果文件大小超过要求,它会显示错误(工作正常)。

该脚本还会检查上传的文件是否具有所需的扩展名,如果正常,则上传文件,如果是不需要的扩展名,则不会上传(工作正常),但如果文件不是预期的扩展名,则它还应该显示错误。

例如,如果有人上传 .exe 或 zip 或 mp3 或任何文件,则应显示“文件类型无效。只允许 JPG、PNG、GIF、JPEG、PDF 和 DOC 文件。这是我遇到错误的地方. 我怎样才能显示这个消息?我应该把什么代码放在哪里?

这是我的脚本。

<?php error_reporting(0);

include'db.php';
if(isset($_POST['submit'])!=""){

$extension = substr($_FILES['photo']['name'], strrpos($_FILES['photo']['name'], '.'));

 $extension = strtolower($extension);


if( $extension == ".jpg" || $extension == ".jpeg" || $extension == ".gif" ||$extension == ".png" ||$extension == ".pdf" ||$extension == ".doc" ||$extension == ".docx" )
{

$name=$_FILES['photo']['name'];
$size=$_FILES['photo']['size'];
$type=$_FILES['photo']['type'];
$temp=$_FILES['photo']['tmp_name'];
$caption1=$_POST['caption'];
$link=$_POST['link'];

$limit_size=512000; // Define file size limit in Bytes.
$size_in_kb=1024; // File size in KB
$divide=$limit_size/$size_in_kb; // Dividing both the variables to get the size in KB.


if($size > $limit_size){
echo "<center>Your file size is over limit. Max upload size $divide KB.</center><BR>";
echo "<center><a href='form.php'>Try Again</a></center>";

}

else {
move_uploaded_file($temp,"admin/files/".$name);

$insert=mysql_query("insert into upload(name, fname, phone, email, message)values('$name','$_POST[fname]','$_POST[phone]','$_POST[email]','$_POST[message]')");
}

if($insert){
echo "<center><BR>Data submitted successfully.</center>";
}
else{ 
die(mysql_error());
}
}
}
?>
<html>
<head>
<title>Upload and Download</title>
</head>

<body>
<style>
h1 {font-family:Georgia, "Times New Roman", Times, serif; font-size:36px; color:#000000}
.formdesign {width: 350px; height: 300px; border:1px solid black; border-radius: 5px; margin-top: 75px; box-shadow: 10px 10px 5px #888888;}
.testbox {width:300px; height: 50px; border: 1px solid grey}
</style>
<center>
<div class="formdesign">

<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="post" enctype="multipart/form-data" name="form">
<table style="padding:7px; line-height:1;">
<tr>
<th><label for="fname">Name</label></th>
<td><input type="text" name="fname" id="fname" required maxlength="30"  style="width: 220px; height:30px;  font-size: 14px; font-family: georgia; text-indent: 15px;" placeholder="Your First Name"/></td>
</tr>

<tr>
<th><label for="phone">Phone</label></th>
<td><input type="text" name="phone" id="phone" required maxlength="15" style="width: 220px; height:30px;  font-size: 14px; font-family: georgia; text-indent: 15px;" placeholder="Your Phone Number"/></td>
</tr>

<tr>
<th>  <label for="email">Email</label></th>
<td>  <input type="text" name="email" style="width: 220px; height:30px;  font-size: 14px; font-family: georgia; text-indent: 15px;" placeholder="Your Email ID">
   </td>
</tr>

<tr>
<th><label for="message">Message</label></th>
<td> <textarea name="message" rows="4" cols="25" placeholder="Your message here!" maxlength="200">
</textarea> </td>
</tr>
</table><table border="0" cellspacing="0" cellpadding="5" id="table">
<tr>
<th >Chosse Files (Max 500KB)</th>
<td ><label for="photo"></label><input type="file" name="photo" id="photo" /></td>
</tr>
<tr>
<th colspan="2" scope="row"><input type="submit" name="submit" id="submit" value="Submit" /></th>
</tr>
</table>
</form>
</div></center>
<br />
<br />




</body>
</html> 

【问题讨论】:

标签: javascript php mysql database file-upload


【解决方案1】:

您省略了扩展名不正确的 else { } 部分

    <?php error_reporting(0);

        include'db.php';
        if(isset($_POST['submit'])!="")
        {

        $extension = substr($_FILES['photo']['name'], strrpos($_FILES['photo']['name'], '.'));

         $extension = strtolower($extension);


            if( $extension == ".jpg" || $extension == ".jpeg" || $extension == ".gif" ||$extension == ".png" ||$extension == ".pdf" ||$extension == ".doc" ||$extension == ".docx" )
            {

            $name=$_FILES['photo']['name'];
            $size=$_FILES['photo']['size'];
            $type=$_FILES['photo']['type'];
            $temp=$_FILES['photo']['tmp_name'];
            $caption1=$_POST['caption'];
            $link=$_POST['link'];

            $limit_size=512000; // Define file size limit in Bytes.
            $size_in_kb=1024; // File size in KB
            $divide=$limit_size/$size_in_kb; // Dividing both the variables to get the size in KB.


                if($size > $limit_size)
                {
                echo "<center>Your file size is over limit. Max upload size $divide KB.</center><BR>";
                echo "<center><a href='form.php'>Try Again</a></center>";

                }

                else 
                {
                move_uploaded_file($temp,"admin/files/".$name);

                $insert=mysql_query("insert into upload(name, fname, phone, email, message)values('$name','$_POST[fname]','$_POST[phone]','$_POST[email]','$_POST[message]')");
                }

                if($insert)
                {
                echo "<center><BR>Data submitted successfully.</center>";
                }
                else
                { 
                die(mysql_error());
                }
            }
            else
            {
                echo " wrong file type";
            }
        }
        ?>

【讨论】:

  • 您省略了扩展名不正确的 else { } 部分
【解决方案2】:

与抓到过大尺码时做同样的事情。 在您的 else 中,获取相同的代码和另一个错误消息,例如上传错误的文件,只有这些格式...

【讨论】:

    【解决方案3】:

    编辑“文件大小”条件,并替换:

    $allowed_ext = explode(",", 'jpg,jpeg,gif'); //Extensions separated by coma
    
    if($size > $limit_size){
    echo "<center>Your file size is over limit. Max upload size $divide KB.</center><BR>";
    echo "<center><a href='form.php'>Try Again</a></center>";
    
    } else if(!in_array(pathinfo($name, PATHINFO_EXTENSION), $allowed_ext)) {
    echo "<center>Your file is not allowed.</center><BR>";
    echo "<center><a href='form.php'>Try Again</a></center>";
    }
    

    您只需替换此代码:

    if($size > $limit_size){
    echo "<center>Your file size is over limit. Max upload size $divide KB.</center><BR>";
    echo "<center><a href='form.php'>Try Again</a></center>";
    
    }
    

    对不起,我的英语不好。

    再见

    【讨论】:

      【解决方案4】:

      您只需要填写一个包含错误的数组并将其显示在表单顶部。未经测试,但您的代码应该或多或少类似于此示例。

      <?php
      $allowedExt = array("jpg", "pdf"); // Add others allowed extenstions here
      $errors = array();
      if( !in_array($extension, $allowedExt)
      {
          $errors[] = "Invalid file ext";
      }
      else {
          // Normal process
      }
      ?>
      
      <!--Inside the "View" at the top of form show errors-->    
      <div class="formdesign">
          <?php
          if( !empty($errors)) :
              foreach($errors as $error) :
                  echo "<p>{$error}</p>";
              endforeach;        
          endif;
          ?>
      </div>
      

      【讨论】:

      • 我可能错了,但不应该是array("jpg", "pdf");["jpg", "pdf"]吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-19
      • 1970-01-01
      • 1970-01-01
      • 2013-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多