文件类型过滤器在php文件上传

时间:2015-08-17 08:31:33

标签: php ajax file upload

我想让我的用户以PNG和JPG以及JPEG文件类型上传图片。 所以我在我的html文件中使用这段代码:

<!DOCTYPE html>
<html lang="fa" dir="rtl">
<head>
    <meta charset="utf-8" />
    <link href="assets/css/style.css" rel="stylesheet" />
    <script type="text/javascript" src='jquery.min.js' ></script>
    <script type="text/javascript">
    //<![CDATA[
        function upload_start(){
              document.getElementById('upload-process').style.visibility = 'visible';
              return true;
        }

        function upload_end(check_upload){
          var server_response = '';
          if (check_upload == 1){
             server_response = '<span class="ok">File Uploaded<\/span>';
          }
          else {
             server_response = '<span class="error">file Upload error<\/span>';
          }
          document.getElementById('upload-process').style.visibility = 'hidden';
          document.getElementById('upload-form').innerHTML = server_response;
          return true;   
    }
    //]]>
    </script>
</head>
<body>

            <form action="php-ajax-upload.php" method="post" enctype="multipart/form-data" target="upload-target" onsubmit="upload_start();">
            <label for="user-file"></label>
            <input type="file" id="user-file" name="user-file" />
            <input type="hidden" name="customer_id"  value="6000" />
            <input type="submit" value="Upload File" />
            </form>

php-ajax-upload.php内容为:

<html>
<head>
<link href="assets/css/style.css" rel="stylesheet" />
</head>
<body>
<?php
$customer_id = $_POST['customer_id'] ;

if ( ($_FILES["user-file"]["type"] == "image/jpeg" )|| ($_FILES["user-file"]["type"] == "image/jpg" )|| ($_FILES["user-file"]["type"] == "image/png" ) ) 
{
    if ($_FILES["user-file"]["error"] > 0){
        echo "<div class=\"server\">Error: " . $_FILES["user-file"]["error"] . "</div><br />";
        $check_result = 0;
        }
    else{
        if (file_exists("user-upload/" . $_FILES["user-file"]["name"])){
            echo "<div class=\"server\">This file exists <br /><br />".$_FILES["user-file"]["name"]. "</div><br />";
            $check_result = 0;      
            }
        else{
                if(isset($_POST['customer_id']) && !empty($_POST['customer_id'])  )
                {
                    $customer_id = trim($_POST['customer_id']);

                    $filename  = basename($_FILES['user-file']['name']);
                    $format = pathinfo($filename, PATHINFO_EXTENSION);
                    $saved_file_name = $customer_id.'.'.$format ;
                    if(is_writable(dirname(__FILE__) . './admin-upload/'. $saved_file_name))
                    {
                      unlink(dirname(__FILE__) . './admin-upload/'. $saved_file_name ); 
                    }

                    if(is_writable(dirname(__FILE__) . './admin-upload/'.$customer_id.'.jpeg'))
                    {
                      unlink(dirname(__FILE__) . './admin-upload/'.$customer_id.'.jpeg' ); 
                    }

                    if(is_writable(dirname(__FILE__) . './admin-upload/'.$customer_id.'.jpg'))
                    {
                      unlink(dirname(__FILE__) . './admin-upload/'.$customer_id.'.jpg' ); 
                    }

                    if(is_writable(dirname(__FILE__) . './admin-upload/'.$customer_id.'.png'))
                    {
                      unlink(dirname(__FILE__) . './admin-upload/'.$customer_id.'.png' ); 
                    }
                    move_uploaded_file($_FILES["user-file"]["tmp_name"],"admin-upload/".$customer_id.'.'.$format ) ;
                    $check_result = 1;

                }
                else
                {
                    echo 'Id not found !';
                    $check_result = 0;  
                }
            }
    }
}

else{
    if($_FILES["user-file"]["size"] > 1000000){
        echo "<div class='server red bold'>File is Large</div>";
    }
    else{
        echo "<div class='server red bold'> File Type is not Valid !</div>";
    }
    $check_result = 0;
}

?>


<script type="text/javascript">
window.top.window.upload_end(<?php echo $check_result; ?>);
</script>

</body>
</html>

现在,当我想检查我的代码时,当我选择Imange时效果很好,当我选择其他文件类型时,例如:pdf,doc,srt,....代码运行良好并会说: 文件类型无效! 但只有当我选择mp3文件时,php-ajax-upload.php文件错误:

  

注意:未定义的索引:第7行的D:\ Software \ wamp \ www \ garanti \ php-ajax-upload.php中的customer_id

     

注意:未定义索引:用户文件   第9行的D:\ Software \ wamp \ www \ garanti \ php-ajax-upload.php

     

注意:未定义索引:用户文件   第9行的D:\ Software \ wamp \ www \ garanti \ php-ajax-upload.php

     

注意:未定义索引:用户文件   第9行的D:\ Software \ wamp \ www \ garanti \ php-ajax-upload.php

     

注意:未定义索引:用户文件   第64行的D:\ Software \ wamp \ www \ garanti \ php-ajax-upload.php

最后在页面末尾说:

文件类型无效!

我不知道为什么这个错误只会发生在mp3文件中?

1 个答案:

答案 0 :(得分:1)

这听起来可能与你的一个php.ini设置有关。

我假设mp3文件比您尝试成功上传的任何其他文件都要大。如果文件的大小大于php.ini设置post_max_size,那么PHP将从帖子中丢失数据,我认为这就是这里发生的事情。 mp3文件可能已经上传,但POST中的其他变量也会丢失。

检查post_max_size,其默认值为3Meg,您可能需要增加它。请记住,它需要&gt; upload_max_filesize以确保您不会丢失其他POST变量。