0

I want people to upload their images to a page, then compress & crop them. Given below is php code for image compression , which compress the jpeg and download the compressed version. This works fine upto 3mb(4567*2755) but not files above it.

Edit:

The message that appears in the server error log is

[04-Jun-2015 08:10:07 Europe/Paris] PHP Warning: POST Content-Length of 4213306 bytes exceeds the limit of 3145728 bytes in Unknown on line 0

Please help :-(

<?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>
Deepak S Rautela
  • 67
  • 1
  • 1
  • 13
  • What's in the server error log? –  Jun 04 '15 at 05:21
  • There is no server error log, the server uploads the photo & returns nothing – Deepak S Rautela Jun 04 '15 at 05:40
  • There will be a server error log. It's a file on your server. Its location varies so I don't know where yours will be. Find it. It will tell you what has gone wrong. –  Jun 04 '15 at 05:58
  • [04-Jun-2015 08:10:07 Europe/Paris] PHP Warning: POST Content-Length of 4213306 bytes exceeds the limit of 3145728 bytes in Unknown on line 0 – Deepak S Rautela Jun 04 '15 at 06:13

1 Answers1

0

Your PHP configuration is limiting the size of POST data to about 3Mb. To load a larger file you need to change a couple of items in PHP.INI. You can determine the location of PHP.INI with php_ini_loaded_file() - see this answer

post_max_size sets the maximum size of a POST. This refers to all the data in a POST - uploaded file(s) and any form variables. This will need to be raised to about 5Mb (larger if you want to handle bigger files)

You'll probably also need to set upload_max_filesize to something larger, but smaller than post_max_size. Again, determine the size of files you're likely to need and set accordingly.

These values are usually set in the system-wide PHP.INI file. Some are configurable through .htaccess or a PHP.INI file in the application directory; others can be set programmatically with ini_set(). The references I have linked to will tell you where you can set different parameters. The reference for the configuration mode settings is here

Note that some hosting companies limit what you can do on their cheap (or free) hosting packages. You might not be able to change anything if you're on a free package. There's no work around: get a better host, and pay if necessary.

Community
  • 1
  • 1