質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

1542閲覧

画像サムネイルのimagecopyresampledのバグ修正

humuhimi

総合スコア49

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/09/11 06:16

編集2018/09/11 10:25

発生している問題・エラーメッセージ

パラメータ全て埋まっているはずなのに表示される

Warning: imagecopyresampled() expects parameter 2 to be resource, string given in /Applications/MAMP/htdocs/Sunseer_PHP_BBS/uploader.php on line 35

該当のソースコード

php

1<?php 2ini_set("display_errors", 1); 3error_reporting(E_ALL); 4$dsn = 'mysql:dbname=*; host=localhost; charset=utf8'; 5$user = '*'; 6$passwd = '*'; 7 8define("MAX_SIZE",1*1024*1024); 9define("THUMBNAIL_WIDTH",400); 10define("IMAGES_DIR",__DIR__."/Image"); 11define("THUMBNAIL_DIR",__DIR__."/Thumbs"); 12 13 14echo THUMBNAIL_WIDTH; 15 16$id = $_POST['id']; 17$image = $_FILES['image']['name']; 18$up_err = $_FILES['image']['error']; 19$src = $_FILES['image']['tmp_name']; 20$type = $_FILES['image']['type']; 21$dir = "Image/".$image; 22$image_size = getimagesize($_FILES['image']['tmp_name']); 23 24 25 26if ($_FILES['image']['size']<MAX_SIZE){ 27 $image_width = $image_size[0]; 28 $image_height = $image_size[1]; 29 30// THUMBNAIL_WITDH →Use of undefined constant THUMBNAIL_WITDH - assumed 'THUMBNAIL_WITDH' (this will throw an Error in a future version of PHP) 31 if ($image_width > 400 ) { 32 $thumbwidth = 400; 33 $thumbheight = round($image_height * 400/$image_width); 34 $thumbImage = imagecreatetruecolor(400,$thumbheight); 35 imagecopyresampled($thumbImage,$src,0,0,0,0,$thumbwidth,$thumbheight,$image_width,$image_height); 36 switch($type){ 37 case IMAGETYPE_GIF; 38 imagegif($thumbImage,THUMBNAIL_DIR.'/'.$image); 39 // ファイルの出力 40 case IMAGETYPE_PNG; 41 imagepng($thumbImage,THUMBNAIL_DIR.'/'.$image); 42 case IMAGETYPE_JPEG; 43 imagejpeg($thumbImage,THUMBNAIL_DIR.'/'.$image); 44 // 45 break; 46 default: 47 echo "判別できません"; 48 break; 49 } 50 } 51}else { 52echo "画像ファイルのサイズが大きすぎます"; 53} 54 55var_dump($_FILES); 56// print __DIR__; 57// $savePath = IMAGES_DIR."/{$src}"; 58 59 60 61 62if ($up_err == UPLOAD_ERR_OK) { 63 if (move_uploaded_file($src,$dir)) { 64 try { 65 $db = new PDO($dsn,$user,$passwd); 66 $db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); 67 $sql = "UPDATE db_BBS SET icon='$dir' WHERE id='$id'"; 68 // $stat = $db->query() 69 if(!$db->query($sql)){ 70 echo "sql処理に問題あり"; 71 } 72 } catch (\PDOException $e) { 73 print $e->getMessage(); 74 } 75// :TODO 76}else{ 77 echo "アップロード処理に失敗しました"; 78} 79}else { 80 echo "エラー:{$up_err}<br>"; 81} 82?> 83 84<!DOCTYPE html> 85<html lang="ja"> 86<head> 87 <meta charset="utf-8"> 88 <title>upload image</title> 89</head> 90<body> 91 <h1>images</h1> 92 <img src="<?php echo "Image/".$image; ?>"> 93

試したこと

ここに問題に対して試したことを記載してください。

問題箇所↓

if ($image_width > 400 ) { $thumbwidth = 400; $thumbheight = round($image_height * 400/$image_width); $thumbImage = imagecreatetruecolor(400,$thumbheight); imagecopyresampled($thumbImage,$src,0,0,0,0,$thumbwidth,$thumbheight,$image_width,$image_height); switch($type){ case IMAGETYPE_GIF; imagegif($thumbImage,THUMBNAIL_DIR.'/'.$image); // ファイルの出力 case IMAGETYPE_PNG; imagepng($thumbImage,THUMBNAIL_DIR.'/'.$image); case IMAGETYPE_JPEG; imagejpeg($thumbImage,THUMBNAIL_DIR.'/'.$image); // break; default: echo "判別できません"; break; }

前提・実現したいこと

アップロードされたファイルのテンポラリファイルをサムネイル化して、Thumbsディレクトリで管理したい

ここに質問の内容を詳しく書いてください。
$_FILE['image']['tmp_name']をソースとして、サムネイル画像を作成しThumbsディレクトリに保存したい

なぜimagecopyresampledできないかわからないです
どなたかご教授お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/09/11 06:40

質問テンプレートの文言はなるべく削られた方が良いです。ノイズとなり、本来の要件が伝わりにくくなります。質問は修正できるので調整してください。
humuhimi

2018/09/11 10:26

こういう感じで大丈夫でしょうか?それとももっと削ったほうが見やすいですか?
m.ts10806

2018/09/11 11:25

できれば「ここに~を書いてください」的なものは削るか埋めてもらったほうがいいのですが、既に解決されてますし次回以降 調整してみてください
humuhimi

2018/09/11 11:35

そうですね。邪魔ですね。次回から調整させてもらいますね。ありがとうございます
guest

回答2

0

Warning: imagecopyresampled() expects parameter 2 to be resource, string given
2番めのパラメータはリソースであるべきで、文字列で与えられている、
って意味です。
$srcがstringだと言っています。
$src = $_FILES['image']['tmp_name'];
明らかに文字列です。

imagecopyresampled()
のサンプルコードなどを見ながら確認を。
おそらく$srcのまま与えずに、
一旦imagecreatefrom*系関数でリソース化しないといけないはず。

投稿2018/09/11 06:21

編集2018/09/11 06:24
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

humuhimi

2018/09/11 10:36

詳しくありがとうございます。 先にアンサーがあったので、そちらを優先させていただきましたが 心の中でベストアンサーさせていただきます。
guest

0

ベストアンサー

Warning: imagecopyresampled() expects parameter 2 to be resource, string given

意訳:imagecopyresampled()の第2引数はリソースじゃなきゃいけないけど文字列が渡されてるよ

$_FILESの'tmp_name'は「テンポラリファイルのパス(文字列)」であってファイル実体ではありません。
imagecreatefromjpeg()などでリソースを作るのが確実です。

投稿2018/09/11 06:22

編集2018/09/11 06:24
m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

humuhimi

2018/09/11 10:34

なるほど エラーの意味をちゃんと読み取れてませんでした。 解決策がわかりましたのでベストアンサとさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問