ここから本文です

phpのfile_get_contentsについてです。

gri********さん

2013/3/1820:30:58

phpのfile_get_contentsについてです。

画像をアップロードしたいのですが、

$img = isset($_FILES['img']) ? file_get_contents($_FILES['img']['tmp_name']) : NULL;

としても、ファイルを選択することなく、確認ページへ、としてしまうと、nullになることなく、以下のエラーがでます。


file_get_contents() [<a href='function.file-get-contents'>function.file-get-contents</a>]: Filename cannot be empty


どうすればこのエラーがでないようにできるのでしょうか??

画像は任意にしたいのです。

ご意見よろしくお願いいたします。

閲覧数:
1,671
回答数:
1

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

shi********さん

編集あり2013/3/1821:25:31

grim705bergenさん

input要素があれば、ファイルを選択したかどうかに関わらず必ず$_FILESは送信されます。

下記のようなスクリプトを書いて試せばわかります

<form enctype="multipart/form-data" action="" method="post">
<input type="file" name="userfile" />
<input type="submit" name="submit" value"POST" />
</form>
<?php
if ($_POST) {
print "<pre>";
var_dump($_FILES);
print "</pre>";
}

このスクリプトで選択した場合としていない場合の違いを見つけて、それで処理を分ければいいです。

「Filename cannot be empty を出したくない」ことに主眼を置いて

$img = (!empty($_FILES['img']['tmp_name'])) ? file_get_contents($_FILES['img']['tmp_name']) : NULL;

でもいいですし

$img = $_FILES['img']['error'] == 0 ? file_get_contents($_FILES['img']['tmp_name']) : NULL;

でもいいでしょう。


アップロードファイルのチェックってけっこうやることが多いので、実運用では1行で書いたりはしませんけどね。




(追記)
前の回答でも「$_FILES['img']['tmp_name']がemptyでないことを確認してください」と書いたのに、なぜisset($_FILES['img'])で代用しようと思ったのかが不思議です。

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1210356767...

$_FILES['img']['error']に 4 が格納されている以上、$_FILE['img']がissetで真になることはわかると思いますが・・・

質問した人からのコメント

2013/3/18 21:28:19

降参 shimix703さん、
いつもいつも有難うございます。
なるほど…感嘆する一方です。いつも違う見方ができずに固まってしまうんです。
また不思議な質問すると思いますがどうか見捨てずにご意見お願いいたします。

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる