input fileでアップロードしたファイルの詳細は$_FILESで見れますが、
実際input fileでHTTP送信して$_FILESに反映されるまでの処理はどのように行われているのでしょうか?
例えばtest.pngをアップロードして
$file_path = $_FILES["upfile"]["tmp_name"]; $file_type = $_FILES["upfile"]["type"]; $file_name = $_FILES["upfile"]["name"]; $file = file_get_contents($file_path); $file = mysql_real_escape_string($file); // ログインユーザーのidがなければ新規登録、あれば更新処理。 $sql = "INSERT IGNORE INTO user_image"; $sql .= " (user_id,file,type,name)"; $sql .= " VALUES ('$id','$file','$file_type','$file_name')"; $sql .= " ON DUPLICATE KEY UPDATE"; $sql .= " file = '$file'"; $sql .= " ,type = '$file_type'"; $sql .= " ,name = '$file_name'"; $stmt = $pdo->query($sql);
でDB登録できます。
test.pngのサイズが例えば1000px * 1000pxだったとしましょう。
でも小さい画像も欲しいです。
$id = 70; if (isset($_POST["submit"])){ //取得サイズリスト作成 for($px=25;$px<=500;$px+=25) { if($px <= 100) { //25px単位 $size_list[] = $px; } else { //50px単位 if($px % 2 == 0) { $size_list[] = $px; } } } $file_path = $_FILES["upfile"]["tmp_name"]; $file_type = $_FILES["upfile"]["type"]; $file_name = $_FILES["upfile"]["name"]; $extension = end(explode("_",str_replace(".","_",$file_name)));//拡張子 if($file_path == true) { //オリジナルの幅、高さ、ファイル種別を取得。 list($width_original,$height_original,$type_num) = getimagesize($file_path); foreach ($size_list as $key => $value) { $prefix = sprintf('%03d',$value); $save_path = "image/example_".$prefix.".".$extension; // 画像保存先のパス $new_height = $value; $new_width = round($width_original*$new_height/$height_original); //画像生成 $resize_file = ImageCreateTrueColor($new_width , $new_height); switch($type_num){ case IMAGETYPE_JPEG: $target_file = ImageCreateFromJPEG($file_path); break; case IMAGETYPE_PNG: imagealphablending($resize_file, false); imagesavealpha($resize_file, true); $target_file = ImageCreateFromPNG($file_path); break; case IMAGETYPE_GIF: $target_file = ImageCreateFromGIF($file_path); break; } ImageCopyResampled($resize_file, $target_file,0,0,0,0, $new_width, $new_height, $width_original, $height_original); switch($type_num){ case IMAGETYPE_JPEG: ImageJPEG($resize_file,$save_path); break; case IMAGETYPE_PNG: ImagePNG($resize_file,$save_path); break; case IMAGETYPE_GIF: $bgcolor = imagecolorallocatealpha($target_file,0,0,0,127); imagefill($resize_file, 0, 0, $bgcolor); imagecolortransparent($resize_file,$bgcolor); ImageGIF($resize_file,$save_path); break; } /* ここでINSERT処理を行いたいが、どう繋げればいいのかがわからない。 */ } // ファイル取得 $file = file_get_contents($file_path); $file = mysql_real_escape_string($file); // ログインユーザーのidがなければ新規登録、あれば更新処理。 $sql = "INSERT IGNORE INTO user_image"; $sql .= " (user_id,file,type,name)"; $sql .= " VALUES ('$id','$file','$file_type','$file_name')"; $sql .= " ON DUPLICATE KEY UPDATE"; $sql .= " file = '$file'"; $sql .= " ,type = '$file_type'"; $sql .= " ,name = '$file_name'"; $stmt = $pdo->query($sql); } }
/*
ここでINSERT処理を行いたいが、どう繋げればいいのかがわからない。
*/
$file_path = $_FILES["upfile"]["tmp_name"];
$file = file_get_contents($file_path);
$file = mysql_real_escape_string($file);
↑これがわかれば正常に登録できると思いますが
$_FILES["upfile"]["tmp_name"]はinput fileからアップロードした結果です。
$save_pathに保存した画像をどうやって、$_FILES["upfile"]["tmp_name"]に相当するものにするのかその方法がわかれば以降の
$file = file_get_contents($file_path);
$file = mysql_real_escape_string($file);
もできるのですが、どうすればよいでしょうか?
オリジナル画像を取り出してCSSでサイズ制御すればいいのでしょうが、
それをするかしないかはまだわからないので、
現段階では本質問の内容が知りたいです。
回答2件
あなたの回答
tips
プレビュー