0

这个问题让我困惑了一段时间。基本上我有一个表单,提交时会将多个图像同时上传到服务器,并将每个图像的记录插入到 Mysql 数据库中。

目前我可以选择最多 6 张图像并将其成功上传到服务器,并将它们的记录插入到 mysql 数据库中。

如果我选择 7 张图片,则只有 6 张被上传。如果我选择 8、9 或 10 张图像,这也是一样的;它总是比我选择上传的总数少一。

如果我选择 11 张图像并提交表单,则没有任何反应,不会上传任何图像,也不会将图像记录插入数据库。

我检查了图像,所有图像都在允许的文件类型、大小、尺寸等范围内。我正在使用的网络服务器的 php.ini 文件将 max_file_uploads 设置为 200。

那么为什么它在一个实例中只上传我的一张图片,而在另一个实例中却不上传任何一张呢?

代码很长,我会尽量只包含适用的东西。

additem.php:

//check if the submit button has been clicked
    if( isset( $_POST['submit'] ) ){

        //validate the title and description
        $title = validate_title($_POST['title']);
        $desc = validate_desc($_POST['desc']);

        //Get other posted variables
        $cat = $_POST['cat'];
        $year = $_POST['year'];

        if($title && $desc != false){


            //check if an image has been submitted
            if((!empty($_FILES["files"])) && ($_FILES['files']['error'][0] == 0)){

                // Insert the post
                insert_post_db($title, $desc, $year);

                // Get id of last inserted post
                $post_id = get_postid();

                // loop through each individual image
                foreach($_FILES['files']['tmp_name'] as $key => $tmp_name){ 

                    // Get the image info
                    $temp_dir = $_FILES['files']['tmp_name'][$key]; // Temporary location of file
                    $image_type = $_FILES['files']['type'][$key]; // Image filetype
                    $image_size = $_FILES['files']['size'][$key]; // Image file size
                    $image_name = $_FILES['files']['name'][$key]; // Image file name

                    // Get image width and height
                    $image_dimensions = getimagesize($temp_dir); // returns an array of image info [0] = width, [1] = height
                    $image_width = $image_dimensions[0]; // Image width
                    $image_height = $image_dimensions[1]; // Image height

                    // Check to make sure there are no errors in ther file
                    if($_FILES['files']['error'][$key] === UPLOAD_ERR_OK){

                        // Make sure each filename name is unique when it is uploaded
                        $random_name = rand(1000,9999).rand(1000,9999).rand(1000,9999).rand(1000,9999);

                        // Set the path to where the full size image will be stored
                        $path = 'img/fullsize/'.$random_name . $_FILES['files']['name'][$key];

                        // Set the path to where the thumb image will be stored
                        $thumb_path = 'img/thumb_/'.$random_name .$_FILES['files']['name'][$key];

                        // Set the Maximum dimensions the images are allowed to be
                        $max_width = 4040;
                        $max_height = 4040;

                        // Set the Maximum file size allowed (5MB)
                        $max_size = 5242880;

                        // Set the file extensions that are allowed to be uploaded and store them in an array
                        $allowed = array('image/jpeg','image/png','image/gif');

                        // Check to make sure the image that is being uploaded has a file extension that we permit
                        if(in_array($image_type,$allowed)){
                            // Check to make sure the Image dimensions do not exceed the maximum dimensions allowed
                            if(($image_width < $max_width) && ($image_height < $max_height)){ 
                                // Check to make sure the Image filesize does not exceed the maximum filesize allowed
                                if($image_size < $max_size){ 

                                    // Check the shape of the Image (square, standing rectangle, lying rectangle) and assign a value depening on which it is
                                    $case = image_shape($image_width, $image_height);

                                    // Create the new thumbnail dimensions
                                    list($thumb_width, $thumb_height, $smallestside, $x, $y) = thumb_dimensions($case, $image_width, $image_height, $smallestside, $x, $y);

                                    // Create the thumbnails
                                    create_thumbnail($image_type, $image_height, $image_height, $temp_dir, $thumb_path, $thumb_width, $thumb_height, $smallestside, $x, $y);

                                    // move large image from the temporary location to the permanent one
                                    move_uploaded_file($temp_dir, $path);

                                    // Get the new randomly generated filename and remove the directory name from it
                                    $file_name = substr($path, 4);

                                    // Insert a record of the image in the Database
                                    insert_image_db($file_name, $cat, $post_id,$image_size, $image_width, $image_height);

                                    // Tell user image was successfully uploaded
                                    echo "<p>Image uploaded ok.</p>";

                                    // Forward to the review post page
                                    header('Location: reviewpost.php');
                                }else{
                                    echo $_FILES['files']['name'][$key] . ': unsupported file size.';
                                }
                            }else{
                                echo $_FILES['files']['name'][$key] . ': unsupported image dimensions.';
                            }
                        }else{
                            echo $_FILES['files']['name'][$key] . ': unsupported filetype.';
                        }
                    }else{echo 'file error';}
                }



            }else{
                //display error message if user didnt select an image to upload
                echo '<p>There was an error processing your submission. Please select an image to upload.</p>';
            }
        }else{
            //display error message if the title or description are incorrect length
            echo errormessage($title, $desc);
        }
    }

功能:

// Find out what shape the image is
    function image_shape($image_width, $image_height){
        if($image_width == $image_height){$case=1;} // square image
        if($image_width < $image_height){$case=2;} // standing rectangle
        if($image_width > $image_height){$case=3;} // lying rectangle
        return $case;

    }

    // Set the dimensions of the new thumbnail 
    function thumb_dimensions($case, $image_width, $image_height){
        switch($case){
            case 1:
                $thumb_width    =   200;
                $thumb_height   =   200;
                $y = 0;
                $x = 0;
                $smallestside = $image_height;
            break;
            case 2:
                $thumb_height   =   200;
                $ratio          =   $thumb_height / $image_height;
                $thumb_width    =   round( $image_width * $ratio );
                $x = 0;
                $y = ($image_height - $image_width) /2;
                $smallestside = $image_width;
            break;
            case 3:
                $thumb_width    =   200;
                $ratio          =   $thumb_width / $image_width;
                $thumb_height   =   round($image_height * $ratio);
                $x = ($image_width - $image_height) /2;
                $y = 0;
                $smallestside = $image_height;
            break;
        }
        return array($thumb_width, $thumb_height, $smallestside, $x, $y);
    }

    // Create a thumbnail of the image
    function create_thumbnail($image_type, $image_width, $image_height, $temp_dir, $thumb_path, $thumb_width, $thumb_height, $smallestside, $x, $y){
        switch($image_type){
            case 'image/jpeg';
                $thumbsize = 200;
                $img =      imagecreatefromjpeg($temp_dir);
                $thumb =    imagecreatetruecolor($thumbsize, $thumbsize);
                            imagecopyresized($thumb, $img, 0, 0, $x, $y, $thumbsize, $thumbsize, $smallestside, $smallestside);
                            imagejpeg($thumb, $thumb_path,100);


            break;
            case 'image/png';
                $thumbsize = 200;
                $img =      imagecreatefrompng($temp_dir);
                $thumb =    imagecreatetruecolor($thumbsize, $thumbsize);
                            imagecopyresized($thumb, $img, 0, 0, 0, 0, $thumbsize, $thumbsize, $smallestside, $smallestside);
                            imagepng($thumb, $thumb_path, 0);

            break;
            case 'image/gif';
                $thumbsize = 200;
                $img =      imagecreatefromgif($temp_dir);
                $thumb =    imagecreatetruecolor($thumbsize, $thumbsize);
                            imagecopyresized($thumb, $img, 0, 0, 0, 0, $thumbsize, $thumbsize, $smallestside, $smallestside);
                            imagegif($thumb, $thumb_path, 100);

            break;
        }

    }
    function insert_post_db($title, $desc, $year){
        //test the connection
        try{
            //connect to the database
            $dbh = new PDO("mysql:host=localhost;dbname=mjbox","root", "usbw");
        //if there is an error catch it here
        } catch( PDOException $e ) {
            //display the error
            echo $e->getMessage();
        }

        $stmt = $dbh->prepare("INSERT INTO mjbox_posts(post_year,post_desc,post_title,post_active,post_date)VALUES(?,?,?,?,NOW())");
        $stmt->bindParam(1,$year);
        $stmt->bindParam(2,$desc);
        $stmt->bindParam(3,$title);
        $stmt->bindValue(4,"0");
        $stmt->execute();


    }
    function insert_image_db($file_name, $cat, $post_id, $image_size, $image_width, $image_height){

        //test the connection
        try{
            //connect to the database
            $dbh = new PDO("mysql:host=localhost;dbname=mjbox","root", "usbw");
        //if there is an error catch it here
        } catch( PDOException $e ) {
            //display the error
            echo $e->getMessage();
        }

        //insert images
        $stmt = $dbh->prepare("INSERT INTO mjbox_images(img_file_name,cat_id,post_id,img_size,img_width,img_height,img_is_thumb) VALUES(?,?,?,?,?,?,?)");
        $stmt->bindParam(1,$file_name);
        $stmt->bindParam(2,$cat);
        $stmt->bindParam(3,$post_id);
        $stmt->bindParam(4,$image_size);
        $stmt->bindParam(5,$image_width);
        $stmt->bindParam(6,$image_height);
        $stmt->bindValue(7,"0");
        $stmt->execute();
    }

抱歉,代码很多,我试图只包含可能适用的内容,如果我遗漏了什么,请告诉我。谢谢

4

1 回答 1

0

尝试在每个文件之间添加一个睡眠计时器。我刚试过,它对我有用。我放了0.3秒。

foreach($file .. $k => $v) {
    // your stuff above..
    usleep(300000); // Sleep between each file, 1000000 = 1 second
}
于 2012-07-04T20:36:19.133 回答