Virendra Singh Virendra Singh - 3 months ago 8
PHP Question

Large size image is not uploading in server using PHP

In my website, I want to upload image using PHP in server. But this thing works fine with small size image but not with large size image. I want to upload only mobile clicked images. Here is my form to upload image

<form action="newupload.php" enctype="multipart/form-data" method="post">
<div class="form-group">
<div id="image-cropper">
<input type="file" name="user_image" class="cropit-image-input" style="font-weight: bold;" />
</div>
</div>
<div class="form-group">
<input type="text" name="title" class="input-round big-input" id="title-modal" placeholder="Enter your Image Title" required/>
</div>
<div class="form-group">
<!-- required -->
<span class="required margin-three">*Please complete all fields correctly</span>
<!-- end required -->
<p class="text-center">
<button class="btn btn-black no-margin-bottom btn-medium btn-round no-margin-top" type="submit" id="submitbtn">Submit</button>
</p>
</div>
</form>


Here is my PHP script for uploading:

$errors = 0;

error_reporting(E_ALL);
require_once 'mysqli_connect.php';
session_start();

$email = $_SESSION['user_email'];
$q = "select * from user where u_email='$email'";
$qres=mysqli_query($dbc,$q);
$qrow=mysqli_fetch_array($qres,MYSQLI_ASSOC);
$u_id=$qrow['u_id'];

if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (!empty($_FILES['user_image']['name']) && !empty($_POST['title'])) {
$image = $_FILES['user_image']['name'];
$uploadedfile = $_FILES['user_image']['tmp_name'];
$image_title = $_POST['title'];
$t = uniqid();
$filenamee = 'user-'.$t;
$path = 'uploaded/';
$filename = $path.$filenamee.".jpg";

if (move_uploaded_file($_FILES['user_image']['tmp_name'], $filename)) {
$query = "insert into selfiepost (u_id,s_title,s_upload,upload_time) v values ('$u_id','$image_title','$filename',now())";
$res = mysqli_query($dbc, $query);
if ($res) {
header('Location:home.php?insert=1');
} else{
header('Location:home.php?insert=0');
}
} else {
echo "Sorry, File not uploaded successfully. Please try again!!";
}
} else {
echo "Files should not be empty!!";
}
}


My
php.ini
file contains only these five things:

upload_max_filesize 20M
post_max_size 40M
max_input_time 180
max_execution_time 60
memory_limit 48M

Answer

Steps:

  1. Check if PHP returns any error
  2. Define your own max size for this app.
  3. Get actual maximum upload size (based in your own max size and server settings).
  4. Check if the file size exceeds the limit

function convertToBytes( $value ) {
  if ( is_numeric($value) ) {
    return $value;
  } else {
    $value_length = strlen(trim($value));
    $bytes = substr($value, 0, $value_length - 1);
    $unit = strtolower(substr($value, $value_length - 1));
    switch( $unit ) {
      case 'g':
        $bytes *= 1024;
      case 'm':
        $bytes *= 1024;
      case 'k':
        $bytes *= 1024;
    }
    return $bytes;            
  }
}

function getFileUploadMaxSize($app_config_max_size) {
  return min(min(convertToBytes(ini_get('post_max_size')), convertToBytes(ini_get('upload_max_filesize'))), $app_config_max_size); 
}


try {
    if ( $_FILES['user_image']['error'] != UPLOAD_ERR_OK ) { // (step 1)
        throw new Exception( _FILES['user_image']['error'] );
    }
  $app_config_max_size = 10485760; // 10MB (step 2)
  $max_size = getFileUploadMaxSize($app_config_max_size); // (step 3)
    if ( $_FILES['user_image']['size'] > $max_size ) { // (step 4)
        throw new Exception( 'limit exceeded' );
    }

  ... rest of your upload code ...

} catch (Exception $e) {
  echo $e->getMessage();
}