ユーザーが自分のプロフィール画像をアップロードできるプロフィール ページを作成する必要があります。ご存じのように、ユーザーがアップロードした画像は、サイズの関係で実際の処理には使用できません。それが画像のサイズ変更の出番です。それを行うコードがあります。しかし、それには何か問題があります。
元のファイルを mysql データベースのディレクトリ/列にアップロードするだけです。代わりに「thumb_」画像をアップロードすべきではありませんか? それとは別に、元の画像とthumb_画像の両方がフォルダーに作成されます。
これがコードです。何が問題なのか教えていただければ幸いです。また、フォルダにアップロードする画像の量を制限する方法を教えてください。プロファイルには、2 つの画像 (オリジナルとthumb_) のみが必要です。
Profile.php
<?php
include "core/init.php";
include "includes/overall/header.php";
if (isset($_GET['username']) === true && empty($_GET['username']) === false) {
$username = $_GET['username'];
if (user_exists($username) === true) {
$user_id = user_id_from_username($username);
$profile_data = user_data($user_id, 'Username', 'Name', 'Email');
?>
<div id="body_content_sub">
<div class="title_line">
<div id="title">
<h5><?php echo $profile_data['Name']; ?></h5>
</div>
</div>
<?php
if (isset($_FILES['image']) === true) {
if (empty($_FILES['image']['name']) === true) {
echo "Please choose a file!";
} else {
//Preparing the variables
$name = $_FILES['image']['name'];
$temp = $_FILES['image']['tmp_name'];
$type = $_FILES['image']['type'];
$size = $_FILES['image']['size'];
$ext = strtolower(end(explode('.', $name)));
$size2 = getimagesize($temp);
$width = $size2[0];
$height = $size2[1];
$upload = md5(rand(0, 1000) . rand(0, 1000) . rand(0, 1000) . rand(0, 1000));
// Requirements
$maxwidth = 1920;
$maxheight = 1080;
$allowed = array('image/jpeg', 'image/png', 'image/gif');
// Recognizing the extension
switch ($type) {
// Image/Jpeg
case 'image/jpeg':
$ext = '.jpg';
break;
// Image/png
case 'image/png':
$ext = '.png';
break;
// Image/gif
case 'image/gif':
$ext = '.gif';
break;
}
// upload variables
$path = 'images/avatars/' . $upload . $ext;
$thumb_path = 'images/avatars/thumb_' . $upload . $ext;
if (in_array($type, $allowed) === true) {
if ($width < $maxwidth && $height < $maxheight) {
if ($size < 5242880) {
// check the shape of the image
if ($width == $height) {
$case = 1;
}
if ($width > $height) {
$case = 2;
}
if ($width < $height) {
$case = 3;
}
switch ($case) {
// Square
case 1:
$newwidth = 200;
$newheight = 200;
break;
// Lying rectangle
case 2:
$newheight =
200;
$ratio = $newheight / $height;
$newwidth = round($width * $ratio);
echo $newwidth . 'x' . $newheight;
break;
// Standing rectangle
case 3:
$newwidth = 200;
$ratio = $newwidth / $width;
$newheight =
round($height * $ratio);
break;
}
switch ($type) {
case 'image/jpeg';
$img =
imagecreatefromjpeg($temp);
$thumb =
imagecreatetruecolor($newwidth, $newheight);
imagecopyresized($thumb, $img, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
imagejpeg($thumb, $thumb_path);
break;
case 'image/png';
$img =
imagecreatefrompng($temp);
$thumb =
imagecreatetruecolor($newwidth, $newheight);
imagecopyresized($thumb, $img, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
imagepng($thumb, $thumb_path);
break;
case 'image/gif';
$img =
imagecreatefromgif($temp);
$thumb =
imagecreatetruecolor($newwidth, $newheight);
imagecopyresized($thumb, $img, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
imagegif($thumb, $thumb_path);
break;
}
change_avatar_image($user_id, $temp, $ext, $upload);
} else {
echo 'Your image size is too big.';
}
} else {
echo '<p>Your image resolution exceeds the limit.</p>';
}
} else {
echo 'You have uploaded a forbidden extension.';
}
}
}
if (empty($user_data['Avatars']) === false) {
echo '<img src="', $user_data['Avatars'], '">';
}
?>
<div id="avatar">
</div>
<div class="form">
<form action="" method="post" enctype="multipart/form-data"><br>
<input type="file" name="image"><br>
<input type="submit" value="Upload">
</form>
</div>
</div>
<?php
} else {
echo "Sorry, that user doesn't exist.";
}
} else {
header('Location: index.php');
exit();
}
include "includes/overall/footer.php"; ?>
関数.php
function change_avatar_image($user_id, $temp, $ext, $upload) {
$path= 'images/avatars/' . $upload . $ext;
move_uploaded_file($temp, $path);
mysql_query("UPDATE users SET Avatars = '" . $path . "' WHERE user_id = " . `(int)$user_id);`
}
コードの見方についてお詫び申し上げます。ここに適切に投稿するのに苦労しています。