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 и ничего.
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
, - перезапустите сервер
- попробуйте снова загрузить файл ...
Должен работать.
Чтобы ограничить размер загрузки файлов, вы можете использовать те же 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
}