使用PHP无法在服务器中上传大尺寸图像

使用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

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();
}

the error is due to upload_max_filesize was set to 2M now i change it to 64M thanks to all for their comment!