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

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

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

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

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

アップロード

アップロードは特定のファイルをウェブサーバに送るプロセスのことを指します。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

imagick

IMagickは、PHPからImageMagickを使う場合に使用する拡張インターフェースです。PHPで簡単にImageMagickの機能が利用できます。

解決済

$_FILESの真偽判定ができない

lnavi.bex810vh
lnavi.bex810vh

総合スコア12

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

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

アップロード

アップロードは特定のファイルをウェブサーバに送るプロセスのことを指します。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

imagick

IMagickは、PHPからImageMagickを使う場合に使用する拡張インターフェースです。PHPで簡単にImageMagickの機能が利用できます。

1回答

0評価

0クリップ

966閲覧

投稿2020/12/03 14:38

編集2020/12/03 15:06

xampp3.2.4、php7.4.11の環境で、<form>タグを使用して、画像をアップロードする機能を作りたいのですが
以下のエラーが出てしまいます。
画像は4つあり、ひとつずつ選んで(複数をまとめるのではなく)POSTしていく感じです。一番最初のメイン画像は表示されるのですが、それ以降のpic1以下が表示できません。issetを使ってもemptyを使ってもだめで、$_FILES変数の正しい判定の仕方を知りたいです。何かいけないのかご教示いただければ幸いです。(最初にrequire_onceしている部分は関係がないと思っています)該当の箇所はコメントアウトで「ココ」と書いています。

Fatal error: Uncaught ImagickException: UnableToOpenBlob 'C:\xampp\htdocs\idol\mem_img\eholvnw7nmo12qnhb5ccfc19i5z5jmj27ucvqp4sr5tpvm29sa': No such file or directory @ error/blob.c/OpenBlob/3315 in C:\xampp\htdocs\idol\regist_profile_check.php:152 Stack trace: #0 C:\xampp\htdocs\idol\regist_profile_check.php(152): Imagick->__construct('C:\xampp\htdocs...') #1 {main} thrown in C:\xampp\htdocs\idol\regist_profile_check.php on line 152

$main_pic=$_FILES['main_pic']; if(empty($main_pic)==false) { $main_pic_ex=strrchr($main_pic['name'],'.'); $main_pic_name=random_string(50); if($main_pic['size']>5000000) { print 'メイン画像が大きすぎます。最大でも5MB未満にして下さい。<br />'; } $main_img=$main_pic_name.$main_pic_ex; move_uploaded_file($main_pic['tmp_name'],'./mem_img/'.$main_img); $main_rpath=realpath('./mem_img/'); $main_org=$main_rpath.'\'.$main_img; // 縦横、200pxに収まるように縮小したい $width = 200; $height = 200; $image = new Imagick($main_org); // オリジナルのサイズ取得 $width_org = $image->getImageWidth(); $height_org = $image->getImageHeight(); // 縮小比率を計算 $ratio = $width_org / $height_org; if ($width / $height > $ratio) { $width = $height * $ratio; } else { $height = $width / $ratio; } // 縮小実行 $image->scaleImage($width, $height); // 保存 $image->setCompressionQuality(80); //保存先を指定 $thum_rpath=realpath('./mem_img/thum/'); $thum_org=$thum_rpath.'\'.'s00_'.$main_img; $image->writeImage($thum_org); $image->clear(); $url='http://localhost/idol/mem_img/thum/s00_'.$main_img; print '<img src="'.$url.'">'; print '<br />'; // Large画像生成 $width = 800; $height = 800; $image = new Imagick($main_org); // オリジナルのサイズ取得 $width_org = $image->getImageWidth(); $height_org = $image->getImageHeight(); // 縮小比率を計算 $ratio = $width_org / $height_org; if ($width / $height > $ratio) { $width = $height * $ratio; } else { $height = $width / $ratio; } // 縮小実行 $image->scaleImage($width, $height); // 保存 $image->setCompressionQuality(80); //保存先を指定 $thum_rpath=realpath('./mem_img/large/'); $thum_org=$thum_rpath.'\'.'l00_'.$main_img; $image->writeImage($thum_org); $image->clear(); print '<input type="hidden" name="main_pic" value="'.$main_img.'">'; } else { print 'ファイルが選択されていません。<br />'; } $pic1=$_FILES['pic1']; if(empty($pic1)==false) { $pic1_ex=strrchr($pic1['name'],'.'); $pic1_name=random_string(50); if($pic1['size']>5000000) { print '画像1が大きすぎます。最大でも5MB未満にして下さい。<br />'; } $pic1_img=$pic1_name.$pic1_ex; move_uploaded_file($pic1['tmp_name'],'./mem_img/'.$pic1_img); $pic1_rpath=realpath('./mem_img/'); $pic1_org=$pic1_rpath.'\'.$pic1_img; // 縦横、200pxに収まるように縮小したい $width = 200; $height = 200; $image = new Imagick($pic1_org);//             <=ココ // オリジナルのサイズ取得 $width_org = $image->getImageWidth(); $height_org = $image->getImageHeight(); // 縮小比率を計算 $ratio = $width_org / $height_org; if ($width / $height > $ratio) { $width = $height * $ratio; } else { $height = $width / $ratio; } // 縮小実行 $image->scaleImage($width, $height); // 保存 $image->setCompressionQuality(80); //保存先を指定 $thum_rpath=realpath('./mem_img/thum/'); $thum_org=$thum_rpath.'\'.'s01_'.$pic1_img; $image->writeImage($thum_org); $image->clear(); $url='http://localhost/idol/mem_img/thum/s01_'.$pic1_img; print '<img src="'.$url.'">'; print '<br />'; // Large画像生成 $width = 800; $height = 800; $image = new Imagick($pic1_org); // オリジナルのサイズ取得 $width_org = $image->getImageWidth(); $height_org = $image->getImageHeight(); // 縮小比率を計算 $ratio = $width_org / $height_org; if ($width / $height > $ratio) { $width = $height * $ratio; } else { $height = $width / $ratio; } // 縮小実行 $image->scaleImage($width, $height); // 保存 $image->setCompressionQuality(80); //保存先を指定 $thum_rpath=realpath('./mem_img/large/'); $thum_org=$thum_rpath.'\'.'l01_'.$pic1_img; $image->writeImage($thum_org); $image->clear(); print '<input type="hidden" name="pic1" value="'.$pic1_img.'">'; }else { print 'ファイルが選択されていません。<br />'; } $pic2=$_FILES['pic2']; if(empty($pic2)==false) { $pic2_ex=strrchr($pic2['name'],'.'); $pic2_name=random_string(50); if($pic2['size']>5000000) { print '画像2が大きすぎます。最大でも5MB未満にして下さい。<br />'; } $pic2_img=$pic2_name.$pic2_ex; move_uploaded_file($pic2['tmp_name'],'./mem_img/'.$pic2_img); $pic2_rpath=realpath('./mem_img/'); $pic2_org=$pic2_rpath.'\'.$pic2_img; // 縦横、200pxに収まるように縮小したい $width = 200; $height = 200; $image = new Imagick($pic2_org); // オリジナルのサイズ取得 $width_org = $image->getImageWidth(); $height_org = $image->getImageHeight(); // 縮小比率を計算 $ratio = $width_org / $height_org; if ($width / $height > $ratio) { $width = $height * $ratio; } else { $height = $width / $ratio; } // 縮小実行 $image->scaleImage($width, $height); // 保存 $image->setCompressionQuality(80); //保存先を指定 $thum_rpath=realpath('./mem_img/thum/'); $thum_org=$thum_rpath.'\'.'s02_'.$pic2_img; $image->writeImage($thum_org); $image->clear(); $url='http://localhost/idol/mem_img/thum/s02_'.$pic2_img; print '<img src="'.$url.'">'; print '<br />'; // Large画像生成 $width = 800; $height = 800; $image = new Imagick($pic2_org); // オリジナルのサイズ取得 $width_org = $image->getImageWidth(); $height_org = $image->getImageHeight(); // 縮小比率を計算 $ratio = $width_org / $height_org; if ($width / $height > $ratio) { $width = $height * $ratio; } else { $height = $width / $ratio; } // 縮小実行 $image->scaleImage($width, $height); // 保存 $image->setCompressionQuality(80); //保存先を指定 $thum_rpath=realpath('./mem_img/large/'); $thum_org=$thum_rpath.'\'.'l02_'.$pic2_img; $image->writeImage($thum_org); $image->clear(); print '<input type="hidden" name="pic2" value="'.$pic2_img.'">'; } else { print 'ファイルが選択されていません。<br />'; } ~省略~ <<<送信元のHTML>>> <?php require_once('login_tmp.php'); ?> <!DOCTYPE html> <html> <head><meta charset=UTF-8> <title>プロフィール登録</title> </head> <body> <h3>プロフィール登録</h3><br /> <form name="regist_profile" method="post" action="regist_profile_check.php" enctype="multipart/form-data"><br /> お住いの都道府県<br /> <select name="pref_id"> <option value="" selected>都道府県</option> <option value="1">北海道</option> <option value="2">青森県</option> <option value="3">岩手県</option> <option value="4">宮城県</option> <option value="5">秋田県</option> <option value="6">山形県</option> ~省略~ <option value="42">長崎県</option> <option value="43">熊本県</option> <option value="44">大分県</option> <option value="45">宮崎県</option> <option value="46">鹿児島県</option> <option value="47">沖縄県</option> </select><br /> メインの画像を選んでください。<br /> <input type="file" name="main_pic" style="width:400px"><br /> その他の画像1を選んでください。<br /> <input type="file" name="pic1" style="width:400px"><br /> その他の画像2を選んでください。<br /> <input type="file" name="pic2" style="width:400px"><br /> その他の画像3を選んでください。<br /> <input type="file" name="pic3" style="width:400px"><br /> <textarea name="appeal" rows="4" cols="40">ここにアピール文を入力してください。</textarea><br /> <input type="submit" value="送信"> </form> </body> </html>

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

m.ts10806

2020/12/03 14:56

せめて、その画像を送信するフォームのHTMLを提示してください。 「こちらで勝手に作った都合のいいform」では再現確認できませんので。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

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

アップロード

アップロードは特定のファイルをウェブサーバに送るプロセスのことを指します。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

imagick

IMagickは、PHPからImageMagickを使う場合に使用する拡張インターフェースです。PHPで簡単にImageMagickの機能が利用できます。