この問題は、しばらくの間私を困惑させました。基本的に、送信時に複数の画像を同時にサーバーにアップロードし、各画像のレコードをMysqlデータベースに挿入するフォームがあります。
現在、最大 6 つの画像を選択してサーバーに正常にアップロードし、それらのレコードを mysql データベースに挿入できます。
7 つの画像を選択すると、6 つだけがアップロードされます。これは、8、9、または 10 個の画像を選択した場合と同じです。選択したアップロード数より常に 1 少ない数です。
11 個の画像を選択してフォームを送信しても、何も起こらず、画像がアップロードされず、画像のレコードがデータベースに挿入されません。
画像を確認したところ、すべてが許可されたファイルタイプ、サイズ、寸法などの範囲内にありました。使用している Web サーバーの php.ini ファイルでは、max_file_uploads が 200 に設定されています。
では、あるインスタンスでは 1 つを除くすべての画像がアップロードされ、別のインスタンスではアップロードされないのはなぜですか?
コードはかなり長いので、該当するものだけを含めてみます。
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();
}
コードが多くて申し訳ありません。該当する可能性のあるものだけを含めようとしました。何か見逃した場合はお知らせください。ありがとう