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

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

新規登録して質問してみよう
ただいま回答率
85.35%
ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

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

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

866閲覧

formから画像ファイルのオブジェクトをpdoで取得したら中身が無く困っています。

helo

総合スコア36

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

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

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2021/10/11 01:11

前提・実現したいこと

LocalにてPHPで画像をデータベース入れるためformを組んで、POSTで取得しvar_dump()でオブジェクトを確認したら、ファイルのnameとerrorの数
しか取得できていず、typeやtmp_name、sizeが空っぽになってしまいます。formのコードは何度もチェックして問題ないと思うのですが、こういう不具合は
どこに原因があるのでしょうか?PHP初心者でして原因究明できず、この語の別ファイルへの保存等が出来ない状態です。
詳しい方おられましたら、アドバイスをお願いします。

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

array(5) { ["name"]=> string(12) "IMG_1036.jpg" ["type"]=> string(0) "" ["tmp_name"]=> string(0) "" ["error"]=> int(2) ["size"]=> int(0) }

該当のソースコード

<body> <h1>画像アップロード</h1> <form enctype="multipart/form-data" action="./file_upload.php" method="post"> <div class="file-up"> <input type="hidden" name="MAX_FILE_SIZE" value="10"> <input name="img" type="file" accept="image/*, .pdf"> </div> <div> <textarea name="caption" placeholder="キャプション(140文字以下)" id="caption" ></textarea> </div> <div class="submit"> <input type="submit" value="送信" class="btn"> </div> </form> </body> ```.php <?php $file = $_FILES['img']; var_dump($file); ?> ### 試したこと 1MB以下の小さなファイルで試してみたりしましたが何も変わらず、また、accept記述を*でなく.jpeg, .pngなど 具体的に入れてみたりしたのですが、全く変わらずでどうすれば良いのか困っています。。 ### 補足情報(FW/ツールのバージョンなど) Windows10 home PHP7.3 Docker 20.10.8, build 3967b7d

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

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

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

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

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

guest

回答1

0

ベストアンサー

MAX_FILE_SIZEはバイト単位ですからvalue="10"は10バイトということです。
IMG_1036.jpgがそれより大きければエラーになります

投稿2021/10/11 01:43

yambejp

総合スコア116724

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

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

helo

2021/10/11 03:15

yambejp様 コメントありがとうございます。 その数字を大きくして(10000000)やってみたら、各要素が取得できました。ありがとうございます。 ただ、そのオブジェクトを別ディレクトリに保存しようとすると失敗して failed to open stream: No such file or directory in /abc/〇〇/ となってしまい失敗になってしまいます。バリデーションコードの問題なのでしょうか? コードは以下のように書きました。 if (is_uploaded_file($tmp_path)) { if (move_uploaded_file($tmp_path, $upload_dir.$save_filename)) { echo $filename . 'を'. $upload_dir.'アップしました。'; } else { echo 'ファイルが保存できませんでした。'; } } else { echo 'ファイルが選択されていません。'; echo '<br>'; } ここでも何が原因か解りません。ファイルh¥がもっと軽い、数バイトとかのものを用意すべきなのでしょうか・・・。
yambejp

2021/10/11 03:23

$upload_dirか$save_filenameが間違っているのでは?
helo

2021/10/11 05:05

$uplload_dirは、ターミナルでpwdコマンドで絶対パスを出して/images/と保存ディレクトリをくっつけているだけですので間違いはないかと思います。また、$save_filenameも投稿日時が解るようにdate()を$filenameに使ったのみですので間違いh無い筈なのですが・・・。
helo

2021/10/11 05:12

$save_filenameを一旦やめて、$filenameに代えてみたら以下のようになったのですが、やはり保存予定のi/mages/ディレクトリには入っていない状態です。どうなっているのでしょうか・・・(汗) IMG_5282.JPGを/c/Users/tae-t/OneDrive/デスクトップ/PHP/PHP_phots/images/にアップしました。
yambejp

2021/10/11 05:56

> No such file or directory であれば存在しないディレクトリの可能性が大きいです それ以上は質問者さんの環境がわからないのでなんともいえません file_existsなどでいったんチェックしてみるとよいかもしれません
helo

2021/10/11 07:35

ありがとうございます。ディレクトリは在りました。何度か繰り返しているうちに保存は出来るようになりました。ただ、phpファイルのある作業フォルダに画像ファイルが保存されてしまいます。何か不思議なのですが。初めての経験です。指定しているディレクトリではない所へ保存されるものなのでしょうか?
yambejp

2021/10/11 07:38

> 指定しているディレクトリではない所へ保存される いえ、そこを指定しているからそこに保存されるのです (厳密に言えば保存されるのではなくテンポラリファイルを移動している)
helo

2021/10/11 08:17

.......テンポラリファイルを移動している、というのは、どういう事なのでしょうか?(汗)私のリテラシーでは理解が出来ない事なのですが。どうすれば回避できるのでしょうか?
helo

2021/10/11 13:08

yambejp様 ありがとうございました。 兎に角、場所は安定しないですが保存できるようにはなりましたので 大変助かりました。引き続き頑張ってやって行こうと思います。 失礼します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問