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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

3820閲覧

ファイルのアップロード

ryohasegawa

総合スコア437

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2016/12/16 14:13

編集2016/12/20 08:12

<input id="upfile" type="file" name="upfile" size="40">
を使って、ファイル(画像)を選択してアップロードはできるんですが、
<input type="file" name="upfile[]" size="40" multiple>
で複数指定を可能にすると、ファイルがアップロードされなくなります。

アップロード

php

1<!DOCTYPE html> 2<html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>アップロード処理</title> 6 </head> 7 <body> 8 <!-- アップロード時はenctype属性に注意 --> 9 <form method="POST" action="file2.php" enctype="multipart/form-data"> 10 <label for="upfile">ファイルのパス:</label> 11 <!-- アップロード可能ファイルサイズ指定 --> 12 <input type="hidden" name="max_file_size" value="1000000"> 13 <!-- ファイルの選択ボックス --> 14 <!-- <input id="upfile" type="file" name="upfile" size="40"> --> 15 <input type="file" name="upfile[]" size="40" multiple> 16 <input type="submit" value="アップロード"> 17 </form> 18 </body> 19</html>

処理

php

1<?php 2// アップロードファイルの情報を取得 3$ext = pathinfo($_FILES['upfile']['name']); 4// アップロードを許可する拡張子を配列で定義 5$perm = ['gif', 'jpg', 'jpeg', 'png']; 6// アップロード処理そのものの成否をチェック 7if ($_FILES['upfile']['error'] !== UPLOAD_ERR_OK){ 8 $msg = [ 9 UPLOAD_ERR_INI_SIZE => 'php.iniのupload_max_filesizeの制限を越えています。', 10 UPLOAD_ERR_FORM_SIZE => 'HTMLのMAX_FILE_SIZE 制限を越えています。', 11 UPLOAD_ERR_PARTIAL => 'ファイルが一部しかアップロードされていません。', 12 UPLOAD_ERR_NO_FILE => 'ファイルはアップロードされませんでした。', 13 UPLOAD_ERR_NO_TMP_DIR => '一時保存フォルダが存在しません。', 14 UPLOAD_ERR_CANT_WRITE => 'ディスクへの書き込みに失敗しました。', 15 UPLOAD_ERR_EXTENSION => '拡張モジュールによってアップロードが中断されました。', 16 ]; 17 $err_msg = $msg[$_FILES['upfile']['error']]; 18 // 拡張時が許可されたものであるかを判定 19} elseif (!in_array(strtolower($ext['extension']), $perm)){ 20 $err_msg = '画像以外のファイルはアップロードできません。'; 21 // ファイルの内容が画像であるかチェック 22} elseif (!@getimagesize($_FILES['upfile']['tmp_name'])){ 23 $err_msg = 'ファイルの内容が画像ではありません。'; 24 // エラーチェックを終えたら、アップロード処理 25} else { 26 $src = $_FILES['upfile']['tmp_name']; 27 // $dest = mb_convert_encoding($_FILES['upfile']['name'], 'SJIS-WIN', 'UTF-8'); 28 $dest = $_FILES['upfile']['name']; 29 // アップロードファイルのアプロード先 30 if (!move_uploaded_file($src, 'doc/'.$dest)){ 31 $err_msg = 'アップロード処理に失敗しました。'; 32 } 33} 34// エラー発生時はエラーメッセージを表示 35if (isset($err_msg)){ 36 die('<div style="color:Red;">'.$err_msg.'</div>'); 37} 38// 処理成功時はフォームにリダイレクト 39header('Location: http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).'/file1.php');

追記
エラーコードを追記します。

html

1array(1) { 2 ["upfile"]=> 3 array(5) { 4 ["name"]=> 5 array(2) { 6 [0]=> 7 string(36) "bandicam 2016-11-12 18-50-46-457.jpg" 8 [1]=> 9 string(36) "bandicam 2016-11-12 22-25-08-417.jpg" 10 } 11 ["type"]=> 12 array(2) { 13 [0]=> 14 string(10) "image/jpeg" 15 [1]=> 16 string(10) "image/jpeg" 17 } 18 ["tmp_name"]=> 19 array(2) { 20 [0]=> 21 string(51) "C:\Users\hasegawaryo\AppData\Local\Temp\php76EE.tmp" 22 [1]=> 23 string(51) "C:\Users\hasegawaryo\AppData\Local\Temp\php76EF.tmp" 24 } 25 ["error"]=> 26 array(2) { 27 [0]=> 28 int(0) 29 [1]=> 30 int(0) 31 } 32 ["size"]=> 33 array(2) { 34 [0]=> 35 int(30272) 36 [1]=> 37 int(67484) 38 } 39 } 40} 41 42Notice: Undefined index: upfile[$loop] in C:\Users\hasegawaryo\Desktop\php\Smarty\postdata\file\file2.php on line 15 43 44Warning: Illegal offset type in C:\Users\hasegawaryo\Desktop\php\Smarty\postdata\file\file2.php on line 29 45 46Notice: Undefined index: upfile[$loop] in C:\Users\hasegawaryo\Desktop\php\Smarty\postdata\file\file2.php on line 15 47 48Warning: Illegal offset type in C:\Users\hasegawaryo\Desktop\php\Smarty\postdata\file\file2.php on line 29

追記2

html

1array(1) { 2 ["upfile"]=> 3 array(5) { 4 ["name"]=> 5 array(2) { 6 [0]=> 7 string(36) "bandicam 2016-11-12 18-50-46-457.jpg" 8 [1]=> 9 string(36) "bandicam 2016-11-12 22-25-08-417.jpg" 10 } 11 ["type"]=> 12 array(2) { 13 [0]=> 14 string(10) "image/jpeg" 15 [1]=> 16 string(10) "image/jpeg" 17 } 18 ["tmp_name"]=> 19 array(2) { 20 [0]=> 21 string(50) "C:\Users\hasegawaryo\AppData\Local\Temp\php72A.tmp" 22 [1]=> 23 string(50) "C:\Users\hasegawaryo\AppData\Local\Temp\php72B.tmp" 24 } 25 ["error"]=> 26 array(2) { 27 [0]=> 28 int(0) 29 [1]=> 30 int(0) 31 } 32 ["size"]=> 33 array(2) { 34 [0]=> 35 int(30272) 36 [1]=> 37 int(67484) 38 } 39 } 40} 41int(0) 42array(7) { 43 [1]=> 44 string(62) "php.iniのupload_max_filesizeの制限を越えています。" 45 [2]=> 46 string(51) "HTMLのMAX_FILE_SIZE 制限を越えています。" 47 [3]=> 48 string(69) "ファイルが一部しかアップロードされていません。" 49 [4]=> 50 string(60) "ファイルはアップロードされませんでした。" 51 [6]=> 52 string(48) "一時保存フォルダが存在しません。" 53 [7]=> 54 string(54) "ディスクへの書き込みに失敗しました。" 55 [8]=> 56 string(78) "拡張モジュールによってアップロードが中断されました。" 57} 58array(5) { 59 ["name"]=> 60 array(2) { 61 [0]=> 62 string(36) "bandicam 2016-11-12 18-50-46-457.jpg" 63 [1]=> 64 string(36) "bandicam 2016-11-12 22-25-08-417.jpg" 65 } 66 ["type"]=> 67 array(2) { 68 [0]=> 69 string(10) "image/jpeg" 70 [1]=> 71 string(10) "image/jpeg" 72 } 73 ["tmp_name"]=> 74 array(2) { 75 [0]=> 76 string(50) "C:\Users\hasegawaryo\AppData\Local\Temp\php72A.tmp" 77 [1]=> 78 string(50) "C:\Users\hasegawaryo\AppData\Local\Temp\php72B.tmp" 79 } 80 ["error"]=> 81 array(2) { 82 [0]=> 83 int(0) 84 [1]=> 85 int(0) 86 } 87 ["size"]=> 88 array(2) { 89 [0]=> 90 int(30272) 91 [1]=> 92 int(67484) 93 } 94} 95array(2) { 96 [0]=> 97 int(0) 98 [1]=> 99 int(0) 100} 101int(0) 102 103Notice: Undefined offset: 0 in C:\Users\hasegawaryo\Desktop\php\Smarty\postdata\�t�@�C���̃A�b�v���[�h\file2.php on line 39 104 105Notice: Undefined offset: 0 in C:\Users\hasegawaryo\Desktop\php\Smarty\postdata\�t�@�C���̃A�b�v���[�h\file2.php on line 40 106int(1) 107array(7) { 108 [1]=> 109 string(62) "php.iniのupload_max_filesizeの制限を越えています。" 110 [2]=> 111 string(51) "HTMLのMAX_FILE_SIZE 制限を越えています。" 112 [3]=> 113 string(69) "ファイルが一部しかアップロードされていません。" 114 [4]=> 115 string(60) "ファイルはアップロードされませんでした。" 116 [6]=> 117 string(48) "一時保存フォルダが存在しません。" 118 [7]=> 119 string(54) "ディスクへの書き込みに失敗しました。" 120 [8]=> 121 string(78) "拡張モジュールによってアップロードが中断されました。" 122} 123array(5) { 124 ["name"]=> 125 array(2) { 126 [0]=> 127 string(36) "bandicam 2016-11-12 18-50-46-457.jpg" 128 [1]=> 129 string(36) "bandicam 2016-11-12 22-25-08-417.jpg" 130 } 131 ["type"]=> 132 array(2) { 133 [0]=> 134 string(10) "image/jpeg" 135 [1]=> 136 string(10) "image/jpeg" 137 } 138 ["tmp_name"]=> 139 array(2) { 140 [0]=> 141 string(50) "C:\Users\hasegawaryo\AppData\Local\Temp\php72A.tmp" 142 [1]=> 143 string(50) "C:\Users\hasegawaryo\AppData\Local\Temp\php72B.tmp" 144 } 145 ["error"]=> 146 array(2) { 147 [0]=> 148 int(0) 149 [1]=> 150 int(0) 151 } 152 ["size"]=> 153 array(2) { 154 [0]=> 155 int(30272) 156 [1]=> 157 int(67484) 158 } 159} 160array(2) { 161 [0]=> 162 int(0) 163 [1]=> 164 int(0) 165} 166int(0) 167 168Notice: Undefined offset: 0 in C:\Users\hasegawaryo\Desktop\php\Smarty\postdata\file\file2.php on line 39 169 170Notice: Undefined offset: 0 in C:\Users\hasegawaryo\Desktop\php\Smarty\postdata\file\file2.php on line 40

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

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

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

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

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

date

2016/12/20 08:17

今どうやってループ処理をしているかも入れてください
guest

回答2

0

ベストアンサー

複数指定を可能にすると、ファイルがアップロードされなくなります

そんなことはありません。

php

1<?php 2var_dump($_FILES); 3?> 4<!DOCTYPE html> 5<html> 6 <head> 7 <meta charset="UTF-8"> 8 <title></title> 9 </head> 10 <body> 11 <form action="" method="post" enctype="multipart/form-data"> 12 <input type="file" name="upfile[]" size="40" multiple> 13 <button>submit</button> 14 </form> 15 </body> 16</html>

php

1<?php 2 3// この2行は必ず書く 4ini_set('display_errors', 1); 5error_reporting(E_ALL); 6 7var_dump($_FILES); // ここでどういう形式で値が送信されているのかを確認してください。 8 9// アップロードファイルの情報を取得 10$ext = pathinfo($_FILES['upfile']['name']); 11// アップロードを許可する拡張子を配列で定義 12$perm = ['gif', 'jpg', 'jpeg', 'png']; 13// アップロード処理そのものの成否をチェック

#var_dump() の見方

イメージ説明

投稿2016/12/16 14:21

編集2016/12/20 07:00
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ryohasegawa

2016/12/16 14:48

複数指定可能にする際に変更する行はこの1行だけでいいですよね?
退会済みユーザー

退会済みユーザー

2016/12/16 14:58 編集

どういう意味ですか? 質問の意味をそのまま解釈する限り、私が提示したコードを実行すれば自明かと思われます。
ryohasegawa

2016/12/16 15:01

<input id="upfile" type="file" name="upfile" size="40"> を <input type="file" name="upfile[]" size="40" multiple> こう書き換えるだけで、複数指定にできるんですよね?
退会済みユーザー

退会済みユーザー

2016/12/16 15:03

私が提示したコードを実行すれば、複数のファイルがアップロードされることがわかるはずですが。試していないのですか?
ryohasegawa

2016/12/16 15:35

action=""に送信先のphpファイルを指定させてやらせてもらったんですが、自分のファイルと同じようになってしまって・・・
退会済みユーザー

退会済みユーザー

2016/12/16 15:45 編集

自分の書いた内容を読み返してください。あなたの情報をもとに私は何をどう判断すれば良いの? 第一、提示されたコードはそのまま実行してください。 私は超能力者じゃありません。送信先で何が起こっているのかなんて透視もできません。 「質問をするときのヒント」を必ず読んでください。 https://teratail.com/help/question-tips#questionTips2
ryohasegawa

2016/12/16 15:48

説明がうまくできていなかったです。 複数指定はできるんです、サーバに送信ができないのです。 処理の問題かもしれないので、全てのファイルを記述し直します。
退会済みユーザー

退会済みユーザー

2016/12/16 16:16

> 複数指定はできるんです、サーバに送信ができないのです。 サーバには送信されています。送信されているけど、後の処理ができないというのが正確な表現であるはずです。
ryohasegawa

2016/12/16 16:18

あっそうですね。 指摘ありがとうございます。
退会済みユーザー

退会済みユーザー

2016/12/16 16:31

回答にヒントを追記しているので、ご自身で間違いに気付けるのがベストです。
ryohasegawa

2016/12/16 16:34

この2行は必ず書く というところの解説をしてもらえると助かります。
ryohasegawa

2016/12/16 16:51

ありがとうございます。 自分で考えて見ます。
退会済みユーザー

退会済みユーザー

2016/12/16 16:54 編集

何かしらのエラーが表示されるはずです。 せっかくなので、この機会にデバッグの仕方を身につけてください。デバッグの仕方がわかれば、たいていの問題は自己解決できるようになります。
ryohasegawa

2016/12/19 14:04

前回から時間があいてしまいすいません。 <?php var_dump($_FILES); ?> を追記して、実行すると array(1) { ["upfile"]=> array(5) { ["name"]=> array(2) { [0]=> string(36) "bandicam 2016-12-18 20-35-42-843.jpg" [1]=> string(36) "bandicam 2016-12-18 20-35-54-637.jpg" } ["type"]=> array(2) { [0]=> string(10) "image/jpeg" [1]=> string(10) "image/jpeg" } ["tmp_name"]=> array(2) { [0]=> string(51) "C:\Users\hasegawaryo\AppData\Local\Temp\php8D76.tmp" [1]=> string(51) "C:\Users\hasegawaryo\AppData\Local\Temp\php8D77.tmp" } ["error"]=> array(2) { [0]=> int(0) [1]=> int(0) } ["size"]=> array(2) { [0]=> int(180100) [1]=> int(178426) } } } と表示するんですが、 ["upfile"]=> array(5) というのがわかりません。 nameは、アップロードしたファイル名・typeはアップされたファイルの種類 ["tmp_name"]=> array(2) { [0]=> string(51) "C:\Users\hasegawaryo\AppData\Local\Temp\php8D76.tmp" [1]=> string(51) "C:\Users\hasegawaryo\AppData\Local\Temp\php8D77.tmp" } もよくわかりません。おそらくなにかのファイルの場所だと思います。 ["error"]=> array(2) { [0]=> int(0) [1]=> int(0) } 特になにも表示されていないように思います。 sizeは、アップファイルのサイズを表していると思います。 これぐらいは分かるんですが、ちょいちょいわからないことが含まれています。
退会済みユーザー

退会済みユーザー

2016/12/19 14:09

array は配列であるということを表しています。 $_FILES["upfile"] の中身は要素が5個含まれている配列ということが読み取れます。
ryohasegawa

2016/12/19 14:13

配列の中に配列が入っていて、入れ子の配列が親配列に5つあるということでしょうか?
退会済みユーザー

退会済みユーザー

2016/12/19 14:15

()かっこの中の数字が、要素数を表しています。その下にまたarrayと表示されているのですから、多次元配列なんだな、と分かるわけです。
ryohasegawa

2016/12/19 14:20

なるほど、要素数に関しては、解決しました。 tmp_namとerrorを教えてもらえませんか?
ryohasegawa

2016/12/19 14:35

["error"]=> array(2) { [0]=> int(0) [1]=> int(0) } ってことは、正常にアップされているという事になりますよね? ってことは、処理側の問題という捉え方でいいんですよね?
退会済みユーザー

退会済みユーザー

2016/12/19 14:37

そういうことです!
ryohasegawa

2016/12/19 14:47

少しスキルが身についたような気がします。 でも、file2の方もエラーだらけなんですよね 送ったのが,upfile[]で配列になっているから、受取側も配列で受け取らないとと思って、upfileのところをupfile[]にしてみたりやったんですが、相変わらずで、 さっき教えてもらった事を振り返ってみてみると、 array(1) { ["upfile"]=> array(5) { ["name"]=> array(2) { [0]=> string(36) "bandicam 2016-12-18 20-35-42-843.jpg" [1]=> string(36) "bandicam 2016-12-18 20-35-54-637.jpg" } ["type"]=> array(2) { [0]=> string(10) "image/jpeg" [1]=> string(10) "image/jpeg" } ["tmp_name"]=> array(2) { [0]=> string(51) "C:\Users\hasegawaryo\AppData\Local\Temp\php33BD.tmp" [1]=> string(51) "C:\Users\hasegawaryo\AppData\Local\Temp\php33BE.tmp" } ["error"]=> array(2) { [0]=> int(0) [1]=> int(0) } ["size"]=> array(2) { [0]=> int(180100) [1]=> int(178426) } } } <br /> <b>Warning</b>: pathinfo() expects parameter 1 to be string, array given in <b>C:\Users\hasegawaryo\Desktop\php\Smarty\postdata\file\file2.php</b> on line <b>9</b><br /> <br /> <b>Warning</b>: Illegal offset type in <b>C:\Users\hasegawaryo\Desktop\php\Smarty\postdata\file\file2.php</b> on line <b>23</b><br /> 一応データは受け取っているみたいです。
退会済みユーザー

退会済みユーザー

2016/12/19 14:49 編集

まさに原因がここに書かれています。 「pathinfo() expects parameter 1 to be string, array given」←こちらをどのように読みますか?あくまで直訳してみてください。
ryohasegawa

2016/12/19 14:50

警告:pathinfo()は、パラメータ1が文字列、配列が指定されていると想定します。 という事で pathinfo()は配列を受け付けないという解釈でいいでしょうか?
退会済みユーザー

退会済みユーザー

2016/12/19 14:52

var_dump() の結果が成形されていなくてみづらいので、 <?php ecjo '<pre>'; var_dump($_FILES); ecjo '</pre>'; ?> を入れていくとインデントされてみやすくなります。
退会済みユーザー

退会済みユーザー

2016/12/19 14:54

「pathinfo()は、パラメータ1が文字列、配列が指定されていると想定します」 ↓ 「pathinfo()は、パラメータ1が文字列であることを期待されていますが、配列が与えられました」の意味です。 文字列出なきゃダメよーということです。
ryohasegawa

2016/12/19 15:00

全体をfor文で回して、upfile[ name[] type[] tmp_name[] error[] size[] ] の中身を順番にpathinfo()に入れてあげないといけないということですか?
退会済みユーザー

退会済みユーザー

2016/12/19 15:01

正解です。ちゃんとたどり着けましたね! プログラミングは知識じゃなくて、スキルなんだと気づいてもらえましたか?
ryohasegawa

2016/12/19 15:06

はい、でも、配列がいくつあるかはどこから取得すればいいでしょうか? file1から、選択したファイル数をPOSTする必要がありますか?
退会済みユーザー

退会済みユーザー

2016/12/19 15:09

count() 関数を使います。 http://php.net/manual/ja/function.count.php リファレンスを読み物という感覚で、こちらを一読しておきましょう。どこに何が書かれていてどんな関数があるのかというのを頭に入れておけば、細かい使い方までは覚えなくていいけど、すぐに目的の関数を探すことはできるようになります。 http://php.net/manual/ja/funcref.php
ryohasegawa

2016/12/19 15:37 編集

// 配列の数を取得&$cunに入れる $cun = count($_FILES['upfile']['name']); // 配列の数だけループを回す for ($i = 0; $cun > i; $i++){ print "for"; } こんな感じで書いてみたんですが・・・ やり方としてあっているか、別の方法があるかを教えてもらえませんか?
退会済みユーザー

退会済みユーザー

2016/12/19 15:38

あとは foreach でも使う方法くらいですね。
ryohasegawa

2016/12/19 16:12 編集

あっわかりました。 やってみたんですが、うまく選択した回数だけループはするようになりました。 でも、取り出し方法がわからず、エラー文が2回でるようになってます。 // ループが何回目か $loop = 0; // 配列の数だけループを回す for ($i = 0; count($_FILES['upfile']['name']) > $i; $i++){ // アップロードファイルの情報を取得 $ext = pathinfo($_FILES['upfile[$loop]']['name']); // アップロードを許可する拡張子を配列で定義 $perm = ['gif', 'jpg', 'jpeg', 'png']; ・・・・・・・・・・・・省略・・・・・・・・・・・・ } $loop++; } としたんですが、$_FILESでエラーですね、どのように配列を[1][2]と分けてするかです。 ここまでこれた事は、Kosuke_Shibuyaさんのおかげです。
退会済みユーザー

退会済みユーザー

2016/12/19 16:15

var_dump の結果が意味するところを、よーくみてください。
ryohasegawa

2016/12/20 04:27

まとめて配列を[1][2]とすることは不可能ということでしょうか?
退会済みユーザー

退会済みユーザー

2016/12/20 05:01

具体的なコードを見せてくれればいいか悪いか返事ができますが… 「まとめて配列を[1][2]とする」が何を言っているのかわかりません。
ryohasegawa

2016/12/20 05:12

array(1) { ["upfile"]=> array(5) { ["name"]=> array(2) { [0]=> string(36) "bandicam 2016-11-12 18-50-46-457.jpg" [1]=> string(36) "bandicam 2016-11-12 22-25-08-417.jpg" } ["type"]=> array(2) { [0]=> string(10) "image/jpeg" [1]=> string(10) "image/jpeg" } ["tmp_name"]=> array(2) { [0]=> string(51) "C:\Users\hasegawaryo\AppData\Local\Temp\php6A51.tmp" [1]=> string(51) "C:\Users\hasegawaryo\AppData\Local\Temp\php6A52.tmp" } ["error"]=> array(2) { [0]=> int(0) [1]=> int(0) } ["size"]=> array(2) { [0]=> int(30272) [1]=> int(67484) } } } <br /> <b>Notice</b>: Undefined index: upfile[$loop] in <b>C:\Users\hasegawaryo\Desktop\php\Smarty\postdata\file\file2.php</b> on line <b>14</b><br /> <br /> <b>Warning</b>: Illegal offset type in <b>C:\Users\hasegawaryo\Desktop\php\Smarty\postdata\file\file2.php</b> on line <b>28</b><br /> <br /> <b>Notice</b>: Undefined index: upfile[$loop] in <b>C:\Users\hasegawaryo\Desktop\php\Smarty\postdata\file\file2.php</b> on line <b>14</b><br /> <br /> <b>Warning</b>: Illegal offset type in <b>C:\Users\hasegawaryo\Desktop\php\Smarty\postdata\file\file2.php</b> on line <b>28</b><br />
退会済みユーザー

退会済みユーザー

2016/12/20 05:40 編集

 インデントが飛んでみづらいので、」質問欄に追記してください。(2回目)
ryohasegawa

2016/12/20 05:58

あっ追記させてもらいます。
退会済みユーザー

退会済みユーザー

2016/12/20 06:01

var_dump() の結果が成形されていなくてみづらいので、 <?php ecjo '<pre>'; var_dump($_FILES); ecjo '</pre>'; ?> を入れていくとインデントされてみやすくなります。
ryohasegawa

2016/12/20 06:06

ecjo '<pre>';でエラーが出るのですが・・・
退会済みユーザー

退会済みユーザー

2016/12/20 06:08

タイポですな。 echo
ryohasegawa

2016/12/20 06:19

追記のところを変更させていただきました。
退会済みユーザー

退会済みユーザー

2016/12/20 06:21

成形された var_dump() の形を見て、どんな風に配列にアクセスすべきか読み取れませんか?
ryohasegawa

2016/12/20 06:29

name、type、tmp_name、error、sizeそれぞれに配列[1][2]をつけて、渡すということでしょうか?
退会済みユーザー

退会済みユーザー

2016/12/20 06:30

> 配列[1][2]をつけて そのようにつけるというのですか?←いい加減こういうやりとりめんどくさいんですけど。
ryohasegawa

2016/12/20 06:36

name[$loop]、type[$loop]、tmp_name[$loop]、error[$loop]、size[$loop]とし、一回目では、[1]が入り二回目は[2]と入るようにと言いかえます。
退会済みユーザー

退会済みユーザー

2016/12/20 06:49 編集

$_FILES から記述しないと、正解とは言えません。 書くのが面倒なのかどうか知りませんが、意図してわかった上での「省略」なのか、書かれた通りに認識しているのか私には判断つきません。
ryohasegawa

2016/12/20 06:55

$ext = pathinfo($_FILES['upfile[$loop]']['name']); のところを $ext = pathinfo($_FILES['name[$loop]、type[$loop]、tmp_name[$loop]、error[$loop]、size[$loop]']['name']); とすればいいですか? ,が必要かどうかわかりませんが・・
退会済みユーザー

退会済みユーザー

2016/12/20 06:58 編集

だめ。 それで、動かしたらエラーになりますよね。
ryohasegawa

2016/12/20 07:03

$ext = pathinfo($_FILES['upfile[$loop]'][   name[$loop]、   type[$loop]、   tmp_name[$loop]、   error[$loop]、   size[$loop]'] ]); もしかして、こうですかね?
退会済みユーザー

退会済みユーザー

2016/12/20 07:06 編集

回答に追記しました 実行すればいいか悪いかくらい判断できるでしょう。聞く前に実行してください。
ryohasegawa

2016/12/20 07:16

upfileの中のnameだけを取り出せばいいということですか?
退会済みユーザー

退会済みユーザー

2016/12/20 07:19

> upfileの中のnameだけを取り出せばいいということですか? 単なる例示。 どの値をどう使うか、どれが必要かには言及していません。 仮に、「name」の部分を取り出したいなら、示したようにvar_dump() の値を見るということ。 「tmp_name」を取り出したいとしてもやり方は同じだということくらいわかりません?
ryohasegawa

2016/12/20 07:37

$ext = pathinfo($_FILES['upfile']['name'][$loop]); と記述し、実行すると、一回目のループではここのエラーは解消したように見えるのですが、$err_msg = $msg[$_FILES['upfile']['error']]; で不正なオフセットタイプと言われ、ここも[$loop]をつけて配列で取り出せばと思い$err_msg = $msg[$_FILES['upfile']['error'][$loop]];こうしたのですが、今度は未定義のオフセットと言われ・・・
退会済みユーザー

退会済みユーザー

2016/12/20 07:39

$loop の値がおかしいんでしょうね。確認方法はこれまでなんども説明しているので割愛します。
ryohasegawa

2016/12/20 07:52

$loop はint型で値は0です。 変だとは思えないんですが、 var_dump($loop); $err_msg = $msg[$_FILES['upfile']['error'][$loop]]; こんな感じでやってみると、 int(0) Notice: Undefined offset: 0 in C:\Users\hasegawaryo\Desktop\php\Smarty\postdata\file\file2.php on line 30 int(1) Notice: Undefined offset: 0 in C:\Users\hasegawaryo\Desktop\php\Smarty\postdata\file\file2.php on line 30
退会済みユーザー

退会済みユーザー

2016/12/20 07:56 編集

$msg ←なにこれ?なんの説明もなしにいきなり出てきてるんだけど… 「質問をするときのヒント」を必ず読んでください。 https://teratail.com/help/question-tips#questionTips2
ryohasegawa

2016/12/20 08:03

はじめからありますよ。 エラーがあった場合にエラーメッセージを出力する処理らしいんですが、
退会済みユーザー

退会済みユーザー

2016/12/20 08:03

こういう風に確認すれば? var_dump($loop); var_dump($msg); var_dump($_FILES['upfile']); var_dump($_FILES['upfile']['error']); var_dump($_FILES['upfile']['error'][$loop]); $err_msg = $msg[$_FILES['upfile']['error'][$loop]];
退会済みユーザー

退会済みユーザー

2016/12/20 08:07

> エラーがあった場合にエラーメッセージを出力する処理らしい 今は仕方ないかもしれませんが、「らしい」がつかなくなることを期待します。
ryohasegawa

2016/12/20 08:15

追記させてもらいました。 $msgはエラーメッセージを配列で管理しています。 エラーは[0]なので正常のように見えます・・・
退会済みユーザー

退会済みユーザー

2016/12/20 08:19

$_FILES['upfile']['error'][$loop] が 0 なら当然正常にアップロードされたということを意味するのは、先日示したリファレンスに書かれていますね。それの何が疑問なんですか?
ryohasegawa

2016/12/20 08:30

そこじゃないですね。var_dump($_FILES['upfile']['error'][$loop]);の結果はint(0)なんで、ここでWarning: Illegal offset typeのエラーが起こっているんですよね
退会済みユーザー

退会済みユーザー

2016/12/20 08:36 編集

on line 30 って書かれてますよね?そこに書かれているコードでエラーになっています。 散々書き換えが入っているんだろうし、現状のコード全体がどうなっているのかわからんので、三十行目に何が書かれているかわからん。
ryohasegawa

2016/12/20 08:37

on line 39となっています。 そこでエラーがおこっているのはわかるんです、不正なオフセットタイプというエラーがでているのも分かるんですが、それをネットで探しているんですが、有力な情報が見つからないんです。
退会済みユーザー

退会済みユーザー

2016/12/20 08:40

$_FILES['upfile']['error'][$loop] には 「0」 が代入されていることは理解してますよね。 ということは $msg[$_FILES['upfile']['error'][$loop]] と $msg[0] は同じ(等価)であることはわかりますか?
ryohasegawa

2016/12/20 08:44

それはわかります。
退会済みユーザー

退会済みユーザー

2016/12/20 08:49 編集

配列 $msg に キー(index)が、0 のものは定義(defined)されていますか?
ryohasegawa

2016/12/20 08:50

されてますね $msg = [ UPLOAD_ERR_INI_SIZE => 'php.iniのupload_max_filesizeの制限を越えています。', UPLOAD_ERR_FORM_SIZE => 'HTMLのMAX_FILE_SIZE 制限を越えています。', UPLOAD_ERR_PARTIAL => 'ファイルが一部しかアップロードされていません。', UPLOAD_ERR_NO_FILE => 'ファイルはアップロードされませんでした。', UPLOAD_ERR_NO_TMP_DIR => '一時保存フォルダが存在しません。', UPLOAD_ERR_CANT_WRITE => 'ディスクへの書き込みに失敗しました。', UPLOAD_ERR_EXTENSION => '拡張モジュールによってアップロードが中断されました。', ]; エラーがあってもなくても、ループ回数=エラーの配列になるということですか?
退会済みユーザー

退会済みユーザー

2016/12/20 08:56 編集

「されてますね」←この返事が返ってくるようでは、回答のしようがない。orz...流石に心が折れ そう… なんの根拠があるんでしょうか?
ryohasegawa

2016/12/20 08:56

でも、 array(7) { [1]=> string(62) "php.iniのupload_max_filesizeの制限を越えています。" [2]=> string(51) "HTMLのMAX_FILE_SIZE 制限を越えています。" [3]=> string(69) "ファイルが一部しかアップロードされていません。" [4]=> string(60) "ファイルはアップロードされませんでした。" [6]=> string(48) "一時保存フォルダが存在しません。" [7]=> string(54) "ディスクへの書き込みに失敗しました。" [8]=> string(78) "拡張モジュールによってアップロードが中断されました。" } を見ると、[0]は定義されてません。
退会済みユーザー

退会済みユーザー

2016/12/20 08:58 編集

定義されていいないですよね。定義されていないんですから。 array(8) { [0]=> という記述がないんだから、そこでエラーになっているということでしょう。
ryohasegawa

2016/12/20 09:01

それでは、この方法では駄目ですね。 周回=エラー配列になるんで・・・
退会済みユーザー

退会済みユーザー

2016/12/20 09:08 編集

それを考えるのがプログラマの仕事ですからね。 五月雨式に質問を続けれられても困りますし、本来の主題「アップロードできない」については解決済みと捉えています。もはや主題とは関係のないものになっていますので、そろそろ閉じてください。 var_dump() の見かたわかっただけで、収穫があったと思ってくださいな。
ryohasegawa

2016/12/20 09:12

そうですね。 有難うございました。 とても感謝しています。
toutou

2016/12/20 09:21

お疲れ様です。笑ってみておりました。ここまでできないものかと。こういうのを見ると、基礎って大事なんだなと感じさせられます。またこういうやり取りがあったら、楽しませてもらいます。
ryohasegawa

2016/12/20 09:23

そんなに簡単な問題なんですか?
ynakano

2016/12/20 09:25

世の中には親切な方がいるもんだと感銘を受けました。
toutou

2016/12/20 09:30

少なくとも$msg[0]があるとはかえってこない。でも、で修正した意味は全くわからんが。エラーの解決は英語を読めって言われてるのに読まないし、全てが基礎の部分。ここまで時間のかかる命題ではない。
ryohasegawa

2016/12/20 09:35

本当に感謝です。 自分の周りに、プログラムを教えてもらう環境がなく、本を読んだり、ネットにある情報を寄せ集めたばかりのものなので、知識もあまりないので、質問して、理解したところを少しづつ吸収していくしか方法がないんですよね。 学校もあまりそういうのがなく、ExcelとWordしか・・・・
退会済みユーザー

退会済みユーザー

2016/12/20 09:42 編集

> toutou さん、ynakano さん ホットペッパー君の例があったので、彼よりは数段、見込みあるでしょうw > ryohasegawa さん ヒントをみて「自分で考えて見ます。」の言葉がなければ、とっくに見捨てていると思います。 たしかに、この件に関しては、基礎問題の範疇です。 おそらく、ここにきている回答者の方々は、初心者の頃であってもおそらくつまづいていないと思われます。 今回、ryohasegawa さんの質問にここまで付き合ったのは、ある意味実験感覚です。 初心者の人が、一体なんでつまづいているのか、どこがわかっていないからなのか?という素朴な疑問です。teratailには、「お前、一体何年初心者やっているんだ?」と聴きたくなる人が結構な数見受けられます。残念ながら、彼らは他に適性を見つけた方がいいとさえ思えます。 一方で、プログラミングなんて、とどのつまりは「論理」なんだし、動くには「論理的な理由があるんだし、動かないことにも論理があります。」今回の質問で、しつこく、「根拠」や論理的な「質問」文章の不備などを聞き返すことを繰り返したのも、「論理」に従って物事を考えているのかを確認する必要からです。 プログラムは、「論理」ですから、「そうらしい」「そう書いてあった」「どっかで見た」というのは論理ではありません。あなたが書いたコード全てに「意味」があって、「説明可能」でなければなりません。「よくわからんけど動いたからOK」という感覚では、プログラミングは向いていない。
退会済みユーザー

退会済みユーザー

2016/12/20 09:46 編集

> 自分の周りに、プログラムを教えてもらう環境がなく 自分の世代の人たち(昭和50年代生まれ)はみんなそう。インターネット自体、高校とか大学の時に始まったんだから。教えてくれる人がいないから、理解できないって言われても、そんな感覚まるでないんですよ。その時代、プログラマーって言われる人みんなcobolerだし。
ryohasegawa

2016/12/20 09:46

msg[0]は定義されていないからエラーになっているということはわかりました。 それと、ひとつ勘違いをしていたのは、周回=エラー配列ではないですね。 $msg に UPLOAD_ERR_OK => "ファイルアップロードに成功しました。", を追加したら、エラーは解消されました。が・・・ ファイルがアップされてきません。
退会済みユーザー

退会済みユーザー

2016/12/20 09:48

これ以上このスレッドで質問するなら授業料請求します。
ryohasegawa

2016/12/20 09:49

ホットペッパー君とは?
退会済みユーザー

退会済みユーザー

2016/12/20 09:51

「ホットペッパー君」=teratail内の有名人です
toutou

2016/12/20 09:53

>Kosuke_Shibuya この方もホットペッパー君も、事実確認ができないもしくはしてないんだと思ってます。~であろうとか ~になってるはずとかで進めるのでおかしなことになるのかと。調べ方がへたとかそういうのも含むので、結果知ってる人に聞いてしまえってなるんじゃないかな。確かに一番早いですからね。
ryohasegawa

2016/12/20 09:55

どう有名なんでしょうか? それと先程のプログラム$msgにUPLOAD_ERR_OK => "ファイルアップロードに成功しました。" と記述をすると、エラーは解消され、実行時一番最後にそのメッセージが表示されるようになりました。 あとは、ファイルがアップされないので、そこをもう少し粘って見ます。
ynakano

2016/12/20 09:56

TeraTailの「質問をするときのヒント」にも事実と推測は区別しましょう、とあるんですけどね。
退会済みユーザー

退会済みユーザー

2016/12/20 10:00

それは、多くの質問者に当てはまることかと思います。 「事実確認ができないもしくはしてない」逆にできる人は、おそらく質問する以前に自己解決できちゃうんですよね。そこの差が「プログラマ」と「似非プログラマ」の差なのかなと感じておりまして、その壁を突破する、何か「きっかけ」や「気づき」というものが何なのかが、このところの「テーマ」です。
toutou

2016/12/20 10:02

>ryohasegawa このサイトがない前提でやってみてください。今回の問題も本からですよね?その本を3回くらい読んでください。300ページ以上あるようですから大変だと思いますが、せっかくてもとにあるのでしたら有効利用しましょう。
toutou

2016/12/20 10:05

>Kosuke_Shibuya そりゃそうかw ならしてないだけに変えてください。二人とも?やる前に聞いてくるんでしてないでしょう。
退会済みユーザー

退会済みユーザー

2016/12/20 10:13 編集

> toutouさん 現時点で、彼ら二人の力量は互角だと思います。 ただ、教わって伸びる人の特徴としては、「素直であること」というのが大きく影響するものだと思います。この点で、ryohasegawaさんに分があるかなと。 いまのところ、根拠なく闇雲にコードを書いている状態から、脱却する瞬間が見てみたいなとは思います。var_dump() のくだりなんかは、無駄に難しく構えすぎな印象ですし。
toutou

2016/12/20 10:25

>Kosuke_Shibuya そうですね。少なくとも自分よりは上に行って欲しいですね。自分もまだまだ全然出来ないもので。いろんなのに手をつけてるみたいなので、一点集中したらあっという間かもしれませんな。
退会済みユーザー

退会済みユーザー

2016/12/20 10:56

> ryohasegawa > ファイルがアップされてきません。 事実を正確に表現しているとは思えません。
ryohasegawa

2016/12/20 11:01

>Kosuke_Shibuya ファイルはアップされているんですかね? アップされたファイルをうまく処理して、保存できないっていえばいいですかね?
退会済みユーザー

退会済みユーザー

2016/12/20 11:08 編集

そこの区別すらできないのであれば、この質問の最初に戻ってしまう。 今さら、またそこから始めようとは思いません。 本当にそこに戻る必要があるのなら、私にはあなたに理解できるように教える技術はありません。
s8_chu

2016/12/20 11:13

横から失礼します。回答者のKosuke_Shibuyaさんが「本来の主題については解決済みと捉えている」と言っていますし、読んでいて結局何を解決したいのかがわからなくなってきたので、今の状況をまとめてから再質問されたらいかがでしょうか?置かれている状況を整理し、わかっている範囲とわからない範囲を明確にすることは大切だと思います。
ynakano

2016/12/20 11:15

加えて言うなら、後から見る他の方のためにも別の話題は別のトピックで質問するべきだと思います。 複数の話題が一つのトピックにごちゃ混ぜになるのはよくないです。
ryohasegawa

2016/12/20 11:21

えーと報告なのですが、解決しました。 コードを見ていて、for文の中にあるべきものとそうでないものを分けていた時に、if ($_FILES['upfile']['error'][$loop] !== UPLOAD_ERR_OK){ のところに['error']の後ろに[$loop]をつけてみたら、動いた感じです。でも、なぜこれで解決するのかがよくわかてないいので、駄目ですよね
guest

0

http://php.net/manual/ja/features.file-upload.errors.php
エラーに0 5が存在しないのでエラーになります。

投稿2016/12/20 09:30

date

総合スコア1820

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問