Загрузка файла с помощью PHP: ограничение размера

1

У меня проблема при загрузке файлов с PHP с ограничением по размеру. Я установил максимальный размер для загрузки: 5 МБ, но когда я загружаю файл более 5 МБ, ему все же предоставляется продолжение процесса, но файл не загружается, как я могу решить проблему, поэтому будет некоторая ошибка, если кто-то загрузит больше чем 5 МБ. Вот мой код:

Форма ввода:

    <form action="kegiatan_upload_tambah.php" method="post" enctype="multipart/form-data">
    <div class="box-body">
      <div class="form-group"><label>ID Kegiatan</label>
        <input type="text" name="id_kgt" class="form-control">
      </div>
      <div class="form-group"><label>Nama Kegiatan</label>
        <input type="text" name="nama_kgt" class="form-control">
      </div>
      <div class="form-group"><label>Keterangan</label>
        <textarea name="ket" class="form-control"></textarea>
      </div>
      <div class="row">
        <div class="col-xs-5"><label>Tanggal Mulai</label>
          <input type="text" name="tg_mulai" id="tg_mulai" class="form-control" >
        </div>
        <div class="col-xs-5"><label>Tanggal Akhir</label>
          <input type="text" name="tg_akhir" id="tg_akhir" class="form-control" >
        </div>
      </div>
      <br/>
      <div class="form-group"><label>Pilih File</label>
        <input type="file" name="file" required>
      </div>
    </div></form>

PHP-скрипт:

    $allowed_ext  = array('doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'pdf', 'rar', 'zip');
    $file_name    = $_FILES['file']['name']; // File adalah nama_kgt dari tombol input pada form
    $file_ext     = strtolower(end(explode('.', $file_name)));
    $file_size    = $_FILES['file']['size'];
    $file_tmp     = $_FILES['file']['tmp_name'];

    $lokasi       = 'file/kegiatan/'.$nama_kgt.'-'.$file_name;

    if(in_array($file_ext, $allowed_ext) === true)
    {
      if($file_size > 5000000)
      {
        echo "<script>alert('ERROR: Max File only 5 Mb!');history.go(-1)</script>";
      }
      else
      {
        move_uploaded_file($file_tmp, $lokasi);

        $sql = "INSERT INTO kegiatan (id_kgt,nama_kgt,ket,tg_mulai,tg_akhir,nm_pengirim,type,size,file,jamlog,buatlog) 
        VALUES('$id_kgt','$nama_kgt','$ket','$tg_mulai','$tg_akhir','{$_SESSION['nama']}','$file_ext','$file_size','$lokasi',now(),now() )";

Любая помощь будет так высоко оценена.

  • 0
    Хорошо, какое значение находится внутри $ file_size ?
  • 0
    Можете ли вы показать мне <input> а также распечатать $file_name , $file_ext , $file_size и $file_tmp потому что я думаю, что файл на самом деле не загружен.
Показать ещё 8 комментариев
Теги:

2 ответа

1

Попробуйте это сейчас:

$file_exts = array('doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'pdf', 'rar', 'zip');
    $upload_exts = end(explode(".", $_FILES["file"]["name"]));
                if ((($_FILES["file"]["type"] == "file/doc")
                || ($_FILES["file"]["type"] == "file/docx")
                || ($_FILES["file"]["type"] == "file/xls")
                || ($_FILES["file"]["type"] == "file/xlsx"))
                || ($_FILES["file"]["type"] == "file/ppt"))
                    || ($_FILES["file"]["type"] == "file/pptx"))
                        || ($_FILES["file"]["type"] == "file/pdf"))
                            || ($_FILES["file"]["type"] == "file/rar"))
                            || ($_FILES["file"]["type"] == "file/zip"))

                && ($_FILES["file"]["size"] < 5000000)
                && in_array($upload_exts, $file_exts))
                        {
                            if ($_FILES["file"]["error"] > 0)
                            {
                                header("Location:index.php?err=filepro1");
                                //echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
                            }
                            else
                            {
                                $tempupname = time().$_FILES["file"]["name"];
                                $imgpathtostore="files/".$tempupname;
                                $imgpathtostoreDB="files/".$tempupname;
                                //Query

                                }

                                }
                                else
                                {
                                    echo "file err";
                                }
  • 0
    до сих пор не работает, сэр
  • 0
    @AzmiColeJr. попробуй мой отредактированный код, я хочу, чтобы он тебе помог.
0

Попробуйте изменить логику...

Вместо того, чтобы говорить

if($file_size > 5000000)
{
   //do something...
}
else 
    die("File cannot exceed 5MB in size");

сказать....

if($file_size <= 5000000)
{
  //do something....
}
else
    die("File cannot exceed 5MB in size");

Кроме того, убедитесь, что ваши теги формы имеют атрибуты method = "POST" enctype = "multipart/form-data". Вы также можете проверить, нет ли ошибок в файле перед его загрузкой. Сделать это...

$file_error = $_FILES['file']['error'];
if($file_error === 0)
{
  //upload file and do more cool things here....
}

Надеюсь это поможет...

  • 0
    до сих пор не работает, сэр

Ещё вопросы

Сообщество Overcoder
Наверх
Меню