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

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

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

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

Q&A

解決済

1回答

3511閲覧

【PHP】formのmethodがgetだと画像をアップできません!

taishi_idea

総合スコア27

PHP

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

0グッド

0クリップ

投稿2017/10/09 12:10

phpで画像をアップしたいのですが、formのmethodがgetだとエラーもなく画像をアップロードできません。これは仕様なのでしょうか?
postだとアップできますが、できればgetでアッしたいです。
解決方法をご存知の方お助け願います。

php

1//sample1.php 2 3<?php 4$msg=null; 5 6if(isset($_FILES["image"])&& is_uploaded_file 7($_FILES["image"]["tmp_name"])){ 8$old_name=$_FILES["image"]["tmp_name"]; 9$new_name=date("YmdHis"); 10$new_name .=mt_rand(); 11switch (exif_imagetype($_FILES["image"]["tmp_name"])) { 12 case IMAGETYPE_JPEG: 13 $new_name .='.jpg'; 14 break; 15 case IMAGETYPE_GIF: 16 $new_name .='.gif'; 17 break; 18 case IMAGETYPE_PNG: 19 $new_name .='.png'; 20 break; 21 default: 22 header('Location: sample1.php'); 23 exit(); 24} 25if(move_uploaded_file($old_name,'album/' . "$new_name")){ 26 $msg="アップロードしました"; 27} 28else{ 29$msg="アップロードできませんでした"; 30} 31} 32 ?> 33 <?php 34static $images = array(); 35 36 if($handle=opendir('./album')){ 37 while ($entry=readdir($handle)){ 38 if($entry != "." && $entry != ".."){ 39 $images[]=$entry; 40 } 41 } 42 closedir($handle); 43 } 44 45 ?> 46 <html> 47<head> 48 <title>#</title> 49 <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> 50 <link rel="stylesheet" href="#" type="text/css" media="all"> 51</head> 52<body> 53 <header> 54 </header> 55 56 <div class="contents"> 57 58 <?php 59 if($msg){ 60 echo "<p>" . $msg . "</p>"; 61 } 62 ?> 63 64//↓のmethodをgetにすると画像がアップロードされません 65 66 <form action="sample1.php" method="post" enctype="multipart/form-data"> 67 <input type="file" name="image" accept="image/*"> 68 <input type="submit" value="アップロード"> 69 </form> 70 <?php 71 rsort($images); 72 if(count($images)>0){ 73 foreach($images as $id=>$img ){ 74 echo '<a href="#' . $id . '"><img src="./album/' . $img .'"></a>'; 75 } 76 }else{ 77 echo "<p>画像はまだありません</p>"; 78 } 79 ?> 80 81 </div> 82 83 <footer> 84 </footer> 85 86</body> 87</html>

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

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

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

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

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

guest

回答1

0

ベストアンサー

ファイルの送信をGETリクエストで行うことは通常できません。
GETリクエストではリクエストボディを扱わないようになっていることが多いためです。

また、POSTリクエストであっても、enctype="multipart/form-data"の指定がなければ、ファイルデータをリクエストに含められないため同様にファイルの送信を行うことはできません。

そのため、フォームでファイルを送信する場合は、method="post" enctype="multipart/form-data"の指定は原則必須となります。

投稿2017/10/09 12:35

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

taishi_idea

2017/10/09 22:07

そうなんですね、回答ありがとうございました!助かりました!
退会済みユーザー

退会済みユーザー

2017/10/09 22:23

初心者アイコン付きでのご質問でしたので、上記の回答ではなぜそうなっているかの説明まではしていませんが、補足まで。 GETはあくまでデータを取得するためのもので、データを送るためのものではないという考え方によります。クエリストリングもデータを指定するために使われる想定のものです。 詳細はHTTPのRFCを読むことなりますが、下記の定義ではGETでデータを送ってきたものはリクエストを却下する実装もあると記載されています。 https://triple-underscore.github.io/RFC7231-ja.html#section-4.3.1 > GET 要請メッセージのペイロードには、意味論は定義されない — 既存の実装には、ペイロード本体を伴って送信されてきた GET 要請を却下するものもある。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問