Сжатие и обрезка изображений Php не работает для JPEG размером более 3 МБ

Я хочу, чтобы люди загружали свои изображения на страницу, а затем сжимали и кадрировали их. Ниже приведен код php для сжатия изображений, который сжимает jpeg и загружает сжатую версию. Это отлично работает до 3 МБ (4567 * 2755), но не файлов выше него.

Изменить:

В журнале ошибок сервера появляется сообщение

[04-июн-2015 08:10:07 Европа / Париж] Предупреждение PHP: длина содержимого POST 4213306 байт превышает предел в 3145728 байт в Unknown в строке 0

Пожалуйста помоги :-(

<?php 
$name = ''; 
$type = ''; 
$size = ''; 
$error = '';
function compress_image($source_url, $destination_url, $quality) 
{ 
    $info = getimagesize($source_url); 
if ($info['mime'] == 'image/jpeg') 
    $image = imagecreatefromjpeg($source_url); 
elseif ($info['mime'] == 'image/gif') 
    $image = imagecreatefromgif($source_url); 
elseif ($info['mime'] == 'image/png') 
    $image = imagecreatefrompng($source_url); 
    imagejpeg($image, $destination_url, $quality); 
    return $destination_url; 
} 

if ($_POST) 
{ 
if ($_FILES["file"]["error"] > 0) 
{ $error = $_FILES["file"]["error"]; 
} 
else if (($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"] == "image/jpeg") || ($_FILES["file"]["type"] == "image/png") || ($_FILES["file"]["type"] == "image/pjpeg")) 
{ $url = 'destinationx.jpg'; 
$filename = compress_image($_FILES["file"]["tmp_name"], $url, 40); 
$buffer = file_get_contents($url); /* Force download dialog... */ 
header("Content-Type: application/force-download"); 
header("Content-Type: application/octet-stream"); 
header("Content-Type: application/download"); /* Don't allow caching... */ header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); /* Set data type, size and filename */ 
header("Content-Type: application/octet-stream"); 
header("Content-Transfer-Encoding: binary"); 
header("Content-Length: " . strlen($buffer)); 
header("Content-Disposition: attachment; filename=$url"); /* Send our file... */ 
echo $buffer; }
else { $error = "Uploaded image should be jpg or gif or png"; } } ?> 
<html> 
    <head> 
        <title>Php code compress the image</title> 
    </head> 
<body> 
<div class="message"> 
    <?php if($_POST){ if ($error) { ?> 
    <label class="error"><?php echo $error; ?></label> 
    <?php } } ?> 
</div> 

    <fieldset class="well"> <legend>Upload Image:</legend> 
<form action="" name="myform" id="myform" method="post" enctype="multipart/form-data"> 
    <ul> 
    <li> 
        <label>Upload:</label> 
        <input type="file" name="file" id="file"/> 
    </li> 
        <li> 
            <input type="submit" name="submit" id="submit" class="submit btn-success"/> 
        </li> 
    </ul> 
</form> 
</fieldset> 
</body> 
</html>

person Deepak S Rautela    schedule 04.06.2015    source источник
comment
Что в журнале ошибок сервера?   -  person    schedule 04.06.2015
comment
Нет журнала ошибок сервера, сервер загружает фото и ничего не возвращает   -  person Deepak S Rautela    schedule 04.06.2015
comment
Будет журнал ошибок сервера. Это файл на вашем сервере. Его расположение варьируется, поэтому я не знаю, где будет ваш. Найди это. Он скажет вам, что пошло не так.   -  person    schedule 04.06.2015
comment
[04-июн-2015 08:10:07 Европа / Париж] Предупреждение PHP: длина содержимого POST 4213306 байт превышает предел в 3145728 байт в Unknown в строке 0   -  person Deepak S Rautela    schedule 04.06.2015


Ответы (1)


Ваша конфигурация PHP ограничивает размер данных POST примерно до 3 МБ. Чтобы загрузить файл большего размера, вам нужно изменить несколько элементов в PHP.INI. Вы можете определить местоположение PHP.INI с помощью php_ini_loaded_file () - см. этот ответ

post_max_size устанавливает максимальный размер POST . Это относится ко всем данным в файле (файлах), загруженном POST, и к любым переменным формы. Его необходимо увеличить примерно до 5 МБ (больше, если вы хотите обрабатывать файлы большего размера).

Возможно, вам также потребуется установить upload_max_filesize к чему-то большему, но меньшему, чем post_max_size. Опять же, определите размер файлов, которые вам могут понадобиться, и установите соответствующие значения.

Эти значения обычно устанавливаются в общесистемном файле PHP.INI. Некоторые из них настраиваются с помощью .htaccess или файла PHP.INI в каталоге приложения; другие можно настроить программно с помощью ini_set (). Ссылки, на которые я ссылаюсь, расскажут вам, где вы можете установить различные параметры. Ссылка на настройки режима конфигурации находится здесь

Обратите внимание, что некоторые хостинговые компании ограничивают то, что вы можете делать в своих дешевых (или бесплатных) пакетах хостинга. Возможно, вы не сможете ничего изменить, если у вас бесплатный пакет. Нет никакого обходного пути: найдите лучшего хозяина и заплатите, если необходимо.

person Community    schedule 05.06.2015