检查文件是否大于1 MB

时间:2015-06-20 13:17:24

标签: php mysql file size

我想请你帮忙。我编写了一个代码,用于检查是否填写了所有字段以及文件是否大于1 MB。如果一切正确,文件会成功上传到MySQL数据库。但是,如果文件大小超过1 MB,代码将停止工作。错误没有显示,所有字段都变空。这是代码(其中一些是立陶宛语,对不起):

<?php
error_reporting(E_ERROR);
session_start();
if (isset($_SESSION['login'])){ 
    include 'config.php';
    $username = $_SESSION['login'];
    $result = mysqli_query($db,"SELECT * FROM users WHERE username='$username'");
    $rws = mysqli_fetch_array($result);
    if($_SERVER['REQUEST_METHOD'] == 'POST') {
    $autorius = mysqli_real_escape_string($db,$_POST['autorius']);$pavadinimas = mysqli_real_escape_string($db,$_POST['pavadinimas']);$puslapiai = mysqli_real_escape_string($db,$_POST['puslapiai']);$tema = mysqli_real_escape_string($db,$_POST['tema']);$pmintis = mysqli_real_escape_string($db,$_POST['pmintis']);$pveikejai = mysqli_real_escape_string($db,$_POST['pveikejai']);$aveikejai = mysqli_real_escape_string($db,$_POST['aveikejai']);$epizodas = mysqli_real_escape_string($db,$_POST['epizodas']);$nuomone = mysqli_real_escape_string($db,$_POST['nuomone']);$apie = mysqli_real_escape_string($db,$_POST['apie']);$foto = mysqli_real_escape_string($db,$_POST['foto']);$user_id = $rws['id'];
    if (!empty($autorius) && !empty($pavadinimas) && !empty($puslapiai) && !empty($tema) && !empty($pmintis) && !empty($pveikejai) && !empty($aveikejai) && !empty($epizodas) && !empty($nuomone) && !empty($apie) && isset($foto) && $_FILES['foto']['size'] > 0 && $_FILES['foto']['size'] < 1000001) {
        $fileName = $_FILES['foto']['name'];$tmpName  = $_FILES['foto']['tmp_name'];$fileSize = $_FILES['foto']['size'];$fileType = $_FILES['foto']['type'];
        $fp = fopen($tmpName, 'r');
        $foto = fread($fp, filesize($tmpName));
        $foto = addslashes($foto);
        fclose($fp);
        $query = "INSERT INTO books (id_user, autorius, pavadinimas, puslapiai, tema, pmintis, pveikejai, aveikejai, epizodas, nuomone, apie, foto, name, type, size) ".
        "VALUES ('$user_id', '$autorius', '$pavadinimas', '$puslapiai', '$tema', '$pmintis', '$pveikejai', '$aveikejai', '$epizodas', '$nuomone', '$apie', '$foto', '$fileName', '$fileType', '$fileSize')";
        $result = mysqli_query($db,$query);
        $success = "Knygos aprašymas įkeltas";
        echo $_FILES['foto']['size'];
    }
    else if (empty($autorius) || empty($pavadinimas) || empty($puslapiai) || empty($tema) || empty($pmintis) || empty($pveikejai) || empty($aveikejai) || empty($epizodas) || empty($nuomone) || empty($apie)) {
        $error = "Užpildykite visus laukelius!";
    }
    else if (empty($foto)){
        $error = "Pasirinkite viršelio nuotrauką!";
    }
    else if ($_FILES['foto']['size'] > 1000001){
        $error = "Viršelio nuotraukos dydid neturi viršyti 1 MB!";
    }
    }
?>
<?php include 'bin/includes/header.html'; ?>
    <div class="container">

        <div class="row">
            <div class="col-lg-12">
                <h1 class="page-header">Įkelti knygos aprašymą
                    <small>Ikelkite savo knygos aprašymą</small>
                </h1>
                <ol class="breadcrumb">
                    <li><a href="index.php">Pagrindinis</a>
                    </li>
                    <li class="active">Įkelti knygos aprašymą</li>
                </ol>
            </div>
        </div>

        <div class="row">
            <div class="col-md-8">
                <form name="upload" id="upload" method="post" enctype="multipart/form-data">
                    <div class="control-group form-group">
                        <?php
                        if(isset($success)) {
                            echo '<label style="color: #44FF00;">';
                            echo $success;
                            echo '</label>';
                        }
                        else {
                            echo '<label style="color: #FF3700;">';
                            echo $error;
                            echo '</label>';
                        } ?>
                        <div class="controls">
                            <input type="text" class="form-control" name="autorius" maxlength="60" placeholder="Autorius" value="<?php if(!empty($_POST['autorius'])) echo $_POST['autorius'];?>">
                            <p class="help-block"></p>
                        </div>
                        <div class="controls">
                            <input type="text" class="form-control" name="pavadinimas" maxlength="255" placeholder="Pavadinimas" value="<?php if(!empty($_POST['pavadinimas'])) echo $_POST['pavadinimas'];?>">
                            <p class="help-block"></p>
                        </div>
                        <div class="controls">
                            <input type="text" class="form-control" name="puslapiai" placeholder="Puslapių skaičius" value="<?php if(!empty($_POST['puslapiai'])) echo $_POST['puslapiai'];?>">
                            <p class="help-block"></p>
                        </div>
                        <div class="controls">
                            <input type="text" class="form-control" name="pveikejai" maxlength="999" placeholder="Pagrindiniai veikėjai" value="<?php if(!empty($_POST['pveikejai'])) echo $_POST['pveikejai'];?>">
                            <p class="help-block"></p>
                        </div>
                        <div class="controls">
                            <input type="text" class="form-control" name="aveikejai" maxlength="999" placeholder="Antraeiliai veikėjai" value="<?php if(!empty($_POST['aveikejai'])) echo $_POST['aveikejai'];?>">
                            <p class="help-block"></p>
                        </div>
                        <div class="controls">
                            <textarea placeholder="Tema" rows="2" class="form-control" name="tema" maxlength="999" style="resize:none"><?php if(!empty($_POST['tema'])) echo $_POST['tema'];?></textarea>
                            <p class="help-block"></p>
                        </div>
                        <div class="controls">
                            <textarea placeholder="Pagrindinė mintis" rows="2" class="form-control" name="pmintis" maxlength="999" style="resize:none"><?php if(!empty($_POST['pmintis'])) echo $_POST['pmintis'];?></textarea>
                            <p class="help-block"></p>
                        </div>
                        <div class="controls">
                            <textarea placeholder="Siužetas" rows="5" class="form-control" name="apie" maxlength="2999" style="resize:none"><?php if(!empty($_POST['apie'])) echo $_POST['apie'];?></textarea>
                            <p class="help-block"></p>
                        </div>
                        <div class="controls">
                            <textarea placeholder="Įsimintiniausias epizodas" rows="3" class="form-control" name="epizodas" maxlength="2999" style="resize:none"><?php if(!empty($_POST['epizodas'])) echo $_POST['epizodas'];?></textarea>
                            <p class="help-block"></p>
                        </div>
                        <div class="controls">
                            <textarea placeholder="Nuomonė apie knygą" rows="3" class="form-control" name="nuomone" maxlength="999" style="resize:none"><?php if(!empty($_POST['nuomone'])) echo $_POST['nuomone'];?></textarea>
                            <p class="help-block"></p>
                        </div>
                        <div class="controls">
                            <label>Įkelti viršelį (max 1MB)</label>
                            <input name="foto" type="file" id="foto"> 
                            <p class="help-block"></p>
                        </div>
                        <button type="submit" class="btn btn-primary">Įkelti</button>
                    </div>
                </form>
            </div>
        </div>

<?php include 'bin/includes/footer.html'; ?>
<?php } else {
    header("location: index.php");
}

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您应该使用它来获取文件大小:

$size = filesize($_FILES['foto']['tmp_name']);

这将返回字节中的文件大小。一个MB 1048576 个字节。您应该检查函数是否返回false。

一般情况下:您应该为此目的使用异常,检查条件然后再次检查要简单得多。如果你只想使用if-else-statements,你应该重新排列它(首先检查错误,然后在else-case中上传)。

为什么不保存文件系统中的文件?这更容易......