php-基于上载文件大小显示错误消息无效

php-基于上载文件大小显示错误消息无效,php,file-upload,Php,File Upload,我正在制作基本的上传文件代码。用户只允许上传word和excel两种文件,上传文件大小限制为2MB 我尝试上传word文件,文件大小为1MB,已成功上传到数据库。当我测试代码时,会显示基于错误文件格式的错误消息,因此它可以工作 现在问题来了。当我试图通过上传文件5MB(即超过2MB限制)来测试它时,它显示消息“合同表单已成功提交!”!,但该文件未上载到数据库。它可以工作,但当它应该道歉时,它显示的信息是错误的。你的文件太大了。只允许2MB 这是怎么回事 PHP: if ($_FILES['upl

我正在制作基本的上传文件代码。用户只允许上传word和excel两种文件,上传文件大小限制为2MB

我尝试上传word文件,文件大小为1MB,已成功上传到数据库。当我测试代码时,会显示基于错误文件格式的错误消息,因此它可以工作

现在问题来了。当我试图通过上传文件5MB(即超过2MB限制)来测试它时,它显示消息“合同表单已成功提交!”!,但该文件未上载到数据库。它可以工作,但当它应该道歉时,它显示的信息是错误的。你的文件太大了。只允许2MB

这是怎么回事

PHP:
if ($_FILES['upload']['size'] != 0 ){

    $filename = mysqli_real_escape_string($con,$_FILES['upload']['name']);
    $filedata= mysqli_real_escape_string($con,file_get_contents($_FILES['upload']['tmp_name']));
    $filetype = mysqli_real_escape_string($con,$_FILES['upload']['type']);
    $filesize = intval($_FILES['upload']['size']);

    $created = date("Y-m-d H:i:s"); 

    $allowed =  array('zip','rar', 'pdf', 'doc', 'docx');
    $ext = pathinfo($filename, PATHINFO_EXTENSION);

    if(in_array($ext, $allowed)){ 

        if($filesize < 2097152) {

            $query = "INSERT INTO contracts( `filename`,`filedata`,`filetype`,`filesize`,`created`) 
                            VALUES (?,?,?,?,?)";
            $stmt = $con->prepare($query);
            $null = NULL;
            $stmt->bind_param("sbsis", $filename, $filedata, $filetype,$filesize,$created);
            $fp = fopen($_FILES['upload']['tmp_name'], "r");

                while (!feof($fp)) {
                $stmt->send_long_data(18, fread($fp,$filesize));
                }
                fclose($fp);
            $stmt->execute();

                if ($stmt->errno){
                    echo "ERROR!!! " . $stmt->error;
                    } else {
                    $successMsg = "Contract Form Sucessfully Submitted!";
                    }
            $stmt->close(); 

        } else {
            $errorMsg = "Sorry. Your file is too large. Only 2MB is allowed.";
        }       
    } else {
        $errorMsg = "Sorry. Only zip, rar, pdf, doc & docx are allowed.";        
    }
} else {
        $created = date("Y-m-d H:i:s"); 
        $query = "INSERT INTO contracts(`created`) 
                        VALUES (?)" ;

        $stmt = $con->prepare($query);
        $stmt->bind_param("s", $created);
        $stmt->execute();

        if ($stmt->errno){
        echo "ERROR!!! " . $stmt->error;

        } else {
       $successMsg = "Contract Form Sucessfully Submitted!";
        }
        $stmt->close();         
    }           
}   

$con->close(); 

?>
HTML格式:

<html>
<body>

<form role="form" method="post" action="" enctype="multipart/form-data">    
                <?php
                if(isset($errorMsg)){
                ?>
                <?php echo $errorMsg; ?>

                <?php
                } else if(isset($successMsg)){
                ?>

                 <?php echo $successMsg; ?>

                <?php
                }
                ?>   

<label>Upload File</label>
                    <input type="file" name="upload" />

                <button type="submit" class="btn btn-primary btn-md" name="submit">
                    <span class="glyphicon glyphicon-plus"></span> Submit New Contract
                    </button>
</form>
</body>
</html>
选中php.ini中的upload_max_filesize和post_max_size,并将它们设置为如下所示

memory_limit = 32M
upload_max_filesize = 24M
post_max_size = 32M
然后重新启动web服务器和php

你可以看到他们的眼睛

<?php
phpinfo();

另外

您是否尝试在文件输入上方添加此代码:

<html>
<body>

<form role="form" method="post" action="" enctype="multipart/form-data">    
                <?php
                if(isset($errorMsg)){
                ?>
                <?php echo $errorMsg; ?>

                <?php
                } else if(isset($successMsg)){
                ?>

                 <?php echo $successMsg; ?>

                <?php
                }
                ?>   

<label>Upload File</label>
                    <!-- the added code is here just above the input file type -->
                    <input type="hidden" name="MAX_FILE_SIZE" value="2097152">
                    <input type="file" name="upload" />

                <button type="submit" class="btn btn-primary btn-md" name="submit">
                    <span class="glyphicon glyphicon-plus"></span> Submit New Contract
                    </button>
</form>
</body>


祝你好运

@EbrahimPoursadeqi我找到了max_file_size和post_max_size,但没有找到max_post_file_size。post_max_size=max_post_file_size吗?它们是相同的@Hazirah_HalimI将post_max_size=2M,但仍然不起作用。为什么会这样?这与@Hazirah_Halim相同,请重新启动php和apache或nginxchange,并将大小设置为大于实际文件大小显示警告:第0行的POST内容长度5603302字节超出了未知中2097152字节的限制,但不抱歉。你的文件太大了。只允许2MB。您重新启动了web服务器吗?是的,我将两者都更改,并将大小设置为大于实际文件大小。它起作用了。谢谢。当我遇到这个问题时,我完全忘记了这个方法。