Input type File превышает байты в PHP


если я загружаю небольшой аудиофайл (15seg), он работает нормально, но когда я делаю это с песней (4min), он перебора:

Warning: POST Content-Length of 9042845 bytes exceeds the limit of 8388608 bytes in Unknown on line 0

в представлении:

<h2>Agregar Categoría</h2> 
<hr/>
<div class="container">
    <form action="AgregarCategoria" method="POST" enctype="multipart/form-data">
        {!! csrf_field() !!}
        <div class="form-group" style="margin-top: 20px;"> 
            <label for="Nombre Categoría">Nombre Categoría:</label>
            <input type="text" placeholder="Nombre de la categoría" name="txtcategoria" id='idtxtcategoria' class="form-control" required>
        </div>    
        <div class="form-group">
            <label for="Imagen Categoría">Imagen/Pictograma:</label><br>
            <input type="file" placeholder="Subir la Imagen" name="fileImg"  id='idfileimg' class="form-control"  accept="image/png, .jpeg, .jpg, image/gif"  required>
        </div>
        <div class="form-group">
            <label for="Audio Categoría">Sonido/Audio:</label><br>
            <input type="hidden" name="MAX_FILE_SIZE" value="100000" />
            <input type="file" placeholder="Audio" name="fileAudio"   id='idfileaudio'  class="form-control"  required accept=".mp3,audio/*">
        </div>    
        <div class="form-group" >
            <label for="colorin">Elige el color de la categoría:</label><br>
            <input name="color" type="color" id="colorin" value=""/>
        </div>
        <div class="form-group" >    
            <input type="submit" class="btn btn-primary" name="btnEnviarCategoria" value="Agregar">
            <input type="button" name="volver" value="Limpiar" onclick="LimpiarDatos();" class="btn btn-primary"><br><br>
        </div>
    </form>
</div>
<!-- Fin Agregar Categoría --> 

в контроллере:

 public function AgregarCategoria(Request $req) {

    $conexion = new Conexion();

    $NombreCategoria = $req->get('txtcategoria');
    $img = $req->file('fileImg');
    $audio = $req->file('fileAudio');

    $ruta_img = $img->getClientOriginalName();
    $ruta_audio = $audio->getClientOriginalName();

    \Storage::disk('local')->put('categorias/pictogramas/' . $ruta_img, \File::get($img));
    \Storage::disk('local')->put('categorias/audios/' . $ruta_audio, \File::get($audio));

    $color = $req->get('color');

    $conexion->insertar_categoria($NombreCategoria, $this->CarpetaCategoria . $this->CarpetaCategoriaPictograma . $ruta_img, $this->CarpetaCategoria . $this->CarpetaCategoriaAudios . $ruta_audio, $color);

    $this->Cerrar_Conexion($conexion);

    return view('admin/administrador');
}

загрузить его, загрузить его хорошо, но если это тяжелые файлы, перебора приложения я уже поставил <input type="hidden" name="MAX_FILE_SIZE" value="100000" /> перед полем file и ничего.

 1
Author: EduBw, 2018-02-28

2 answers

Проблема

Сообщение:

POST Content-Length of XXXXXXX bytes exceeds the limit of 8388608 байт

Происходит при попытке отправить POST файл, размер которого превышает максимально допустимый размер для файла, который должен быть отправлен POST, установленный на 8 Мб или 8388608 байт, в соответствии с руководством PHP.

Решение

Изменить значение post_max_size на большее значение, но принимая во внимание то, что в руководстве PHP говорится о значении, которое должны иметь другие переменные, связанные с post_max_size:

post_max_size определяет максимально допустимый размер данных POST. Этот параметр также влияет на загрузку файлов. Для загрузить большие файлы, это значение должно быть больше, чем upload_max_filesize. По общему правилу, memory_limit он должен быть больше, чем post_max_size. При использовании integer его значение измеряется в байтах. Его также можно использовать уменьшенная нотация, как описано в этом FAQ.

Если размер данных POST больше post_max_size, суперглобальные $_POST и $_FILES будут пустыми. Это можно отслеживать несколькими способами, например, передавая переменную $_GET к скрипту, который обрабатывает данные, то есть, <form action="edit.php?procesado=1">, а затем проверить, если переменная $_GET['procesado'] существует.

Как его настроить?

Может быть сделано через php.ini , а в некоторых случаях через .htaccess. По крайней мере, когда это делается php.ini, необходимо перезапустить сервер, чтобы изменения вступили в силу.

Пример использования php.ini:

1.

При открытии php.ini найдите значение post_max_size, Если вы его найдете, просто измените значение на большее. Если строка начинается с ;, вы удаляете ;.

; Maximum size of POST data that PHP will accept.
; Its value may be 0 to disable the limit. It is ignored if POST data reading
; is disabled through enable_post_data_reading.
; http://php.net/post-max-size
post_max_size = 64M

2.

Как говорится в примечании к руководству, указанном выше, убедитесь, что значение upload_max_filesize не больше значения который вы устанавливаете для post_max_size. У вас должно быть что-то подобное более или менее в php.ini

; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 64M

3.

, наконец, проверяет, что значение memory_limit не меньше значения, установленного для post_max_size. У вас должно быть что-то вроде этого:

; Maximum amount of memory a script may consume (128MB)
; http://php.net/memory-limit
memory_limit = 256M

4.

Сделайте операцию GRI:) :

  • сохраните ваш php.ini,
  • перезапустите сервер
  • попробуйте снова загрузить файл ...

Должен работать.

 4
Author: A. Cedano, 2018-02-28 23:35:59

Чтобы ограничить размер загрузки файлов, вы можете использовать те же casmpos, что и form, чтобы определить размер, я говорю в части PHP:

$audio = $_FILES['file']['name'];
$size = $_FILES['file']['size'];
$type = $_FILES['file']['type'];

Тогда вам просто нужно сделать что-то вроде:

if(($size <= 0) || ($size > 100000 )) {
    // echo "Fichero muy grande"
    exit();
} else {
    // Subir fichero, guardar y demás acciones
}
 2
Author: track3r, 2018-03-02 12:04:59