dou6495 2016-08-12 12:20
浏览 37
已采纳

使用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
  • 写回答

2条回答 默认 最新

  • dqfr90979 2016-08-12 14:56
    关注

    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();
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥30 Hyper-v虚拟机相关问题,求解答。
  • ¥15 TSM320F2808PZA芯片 Bootloader
  • ¥45 谷歌浏览器出现开发者工具无法显示已创建的,但您可以调试已部署的代码。 状态代码 404, net::ERR HTTP RESPONSE CODE FAILURE
  • ¥15 如何解决蓝牙通话音频突发失真问题
  • ¥15 安装opengauss数据库报错
  • ¥15 【急】在线问答CNC雕刻机的电子电路与编程
  • ¥60 在mc68335芯片上移植ucos ii 的成功工程文件
  • ¥15 笔记本外接显示器正常,但是笔记本屏幕黑屏
  • ¥15 Python pandas
  • ¥15 蓝牙硬件,可以用哪几种方法控制手机点击和滑动