У меня есть скрипт загрузки изображений, который использует croppie, он обрезает изображение и генерирует строку base64, которую я кладу на скрытый ввод и отправляю на сервер, который у меня есть, с codeigniter и php, как только он там, я декодирую и загружаю его , код работает, но по какой-то причине есть некоторые изображения, которые, когда я загружаю их, $ _POST становится нулевым, и сервер ничего не получает
Я проверяю онлайн, и это выглядело как проблема с post_max_size, и я проверил с
if ( !empty($_SERVER['CONTENT_LENGTH']) && empty($_POST) ){
throw new Exception('PHP discarded POST data because of request exceeding post_max_size, '.ini_get("upload_max_filesize"));
} else {
var_dump($_POST);
}
возвращает исключение, но это все, изображение не очень длинное, и я обновил свой хостинг до максимальной суммы, которую смог
post_max_size 128M
suhosin.post.max_value_length 3000000
suhosin.post.max_vars 3000000
suhosin.request.max_vars 3000000
upload_max_filesize 1G
Но это не решило мою проблему, я попытался исследовать эту проблему немного больше, но безрезультатно
Это форма
<?php
echo form_open_multipart('disco/registrar');
?>
<div class="col-md-12">
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title"><i class="fa fa-plus-circle"></i> Crear un evento </h3>
</div>
<div class="panel-body">
<div>
<label for="titulo" class="col-md-4">
Nombre* :
</label>
<div class="col-md-8">
<input type="text" class="form-control" id="titulo" name="titulo" placeholder="Digite un nombre" required
oninvalid="this.setCustomValidity('Por digite un nombre')"
oninput="setCustomValidity('')">
</div>
</div>
<br>
<br>
<div>
<label for="descripcion" class="col-md-4">
Descripción* :
</label>
<div class="col-md-8">
<input type="text" class="form-control" id="descripcion" name="dir" placeholder="Digite una dirección" required
oninvalid="this.setCustomValidity('Por digite una descripción')"
oninput="setCustomValidity('')">
</div>
</div>
<br>
<br>
<div>
<label for="extra" class="col-md-4">
Información adicional :
</label>
<div class="col-md-8">
<textarea class="form-control" id="extra" name="extra" placeholder="Digite la información adicional" rows="3">
</textarea>
</div>
</div>
<br>
<br>
<div>
<label for="date" class="col-md-4">
Seleccione hasta cuando estara disponible la promoción* :
</label>
<div class="col-md-8">
<div class="form-group">
<input type="text" class="form-control" name="date" id="date" required
oninvalid="this.setCustomValidity('Por favor seleccione una fecha')"
oninput="setCustomValidity('')">
</div>
</div>
</div>
<div>
<label for="logo" class="col-md-4">
Seleccione una imagen* :
</label>
<div class="col-md-8">
<div class="form-group">
<input type="file" id="logo" name="logo" class="file">
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<center>
<div>
<img src="" id="imgPlace" style="max-width: 100% !important;">
</div>
</center>
</div>
</div>
<br>
<br>
<div>
<div class="col-md-12">
<h4>
<p class="text-primary">Los campos marcados con * son obligatorios.</p>
</h4>
<?php
if(null !== $this->session->flashdata('Error')){
echo('<div class="alert alert-dismissable alert-danger col-md-12-">
<button type="button" class="close" data-dismiss="alert">×</button>
<strong>El numero de preguntas no es número mayor que 0.</strong>
</div>
<br>');
}
?>
</div>
</div>
<div>
<div class="col-md-4">
</div>
<div class="col-md-4">
<center>
<input type="hidden" name="croppedData" id="croppedData" value="">
<button class="btn btn-lg btn-primary" type="submit" name="btnquiz" id="btnquiz" >Registrar</button>
</center>
</div>
<div class="col-md-4">
</div>
</div>
</div>
</div>
</form>
Сценарий Кроппи
function readURL(input) {
if (input.files && input.files[0]) {
var reader = new FileReader();
reader.onload = function (e) {
$('#imgPlace').attr('src', e.target.result);
$('#imgPlace').css({
height: '100%'
});
var uploadCrop = $('#imgPlace').croppie({
enableExif: true,
viewport: {
width: 800,
height: 600
},
boundary: {
width: 1024,
height: 1024
},
update: function (data) {
uploadCrop.croppie('result', 'base64', 'viewport', 'png').then(function(newImg) {
$('#croppedData').val(newImg);
console.log(newImg);
});
}
});
uploadCrop.bind({
url: e.target.result,
});
}
reader.readAsDataURL(input.files[0]);
}
}
Сервер
$dir = $_SERVER['DOCUMENT_ROOT'] . '/images/products/';
$imgData = base64_decode(preg_replace('#^data:image/\w+;base64,#i', '', $this->input->post('croppedData')));
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < 10; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
$randomString .= ".jpg";
file_put_contents($dir . $randomString, $imgData);
Как я уже говорил, этот код работает, но есть некоторые изображения, которые просто не пройдут, такие как this