- ベストアンサー
添付ファイルのサイズによってメッセージを表示したい
以下のメールフォームを手探りでいじってみています。(改造可スクリプトです) http://www.keitai-site.net/php/mailform_php/ やりたい事は、添付ファイルが 600KB以下=そのまま送信 600KB以上=「添付ファイルのサイズが大き過ぎます。」 添付ファイルの指定忘れ=「添付ファイルが指定されていません。」 というメッセージを出したいのです。 以下のソースのようになっているのですが、実際動かしてみると 600KB以下=そのまま送信できました 600KB以上=「添付ファイルが指定されていません。」 添付ファイルの指定忘れ=「添付ファイルが指定されていません。」 というように、どの場合も「添付ファイルが指定されていません。」というメッセージが出てしまいます。 if($conf['attach'] == 1){ if($_FILES['upfile']['size'] > 600000){$in_check_ok = FALSE; $msg[7] = "添付ファイルのサイズが大き過ぎます。";} else{if($_FILES["upfile"]["size"] == 0 ) {$in_check_ok = FALSE; $msg[7] = "添付ファイルが指定されていません。";} どこかが間違っているのでしょうか? httpdと、実際にweb上に上げて動作確認してみましたが同様でした。 的外れな質問でしたら申し訳ありません。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
#2です。 結論から言うと、原因は ↓ です。 <input type="hidden" name="MAX_FILE_SIZE" value="{$conf['maxsize']}" /> #4さんの ご指摘どおりです。 自分も知らなかったので ググってみました。 http://masago.kir.jp/php20030814.php 制限を越えているファイルだと、 print_r($_FILES["upfile"]); で $_FILES["upfile"]["ERROR"] が 2 になってる事が分かると思います。 MAX_FILE_SIZEがあると、ブラウザ側で判断して、 実際にはアップロードせずに、PHPにはエラーとして渡しているようです。 なので、↓のようにすれば 良いかと思います。 if($_FILES['upfile']['error'] == 2){$in_check_ok = FALSE; $msg[7] = "添付ファイルのサイズが大き過ぎます。";} else{if($_FILES["upfile"]["size"] == 0 ) {$in_check_ok = FALSE; $msg[7] = "添付ファイルが指定されていません。";} } あと、細かいツッコミをしておくと、 else{if($_FILES["upfile"]["size"] == 0 ) {$in_check_ok = FALSE; $msg[7] = "添付ファイルが指定されていません。";} } は、 elseif($_FILES["upfile"]["size"] == 0 ) {$in_check_ok = FALSE; $msg[7] = "添付ファイルが指定されていません。";} でも、同じ動きです。 まぁ、そんなに気にしなくていいとこですけど、一応。。
その他の回答 (5)
- bm_hiro
- ベストアンサー率51% (200/388)
#2です。 う~ん。。。実際に動作させてみましたけど、よく分かりませんね。 確かに、1Mぐらいのをアップロードすると 0 になって、 500ぐらいのだと、正常なファイルサイズで表示されますね。 実際のソースを見てみない事には、わからないかなぁ。。と言うのが本音です。 とりあえず、このスクリプトの一行目に print_r($_FILES["upfile"]); と付け加えてもらえれば、 もう少し、状況が掴みやすくなるかと思います。
お礼
度々ご回答ありがとうございます! phpファイルを別のweb上にupしてみましたが… どこが悪いんでしょう…もとの配布元から持ってきて、そんなにいじってはいないのですが… http://www.moon.sannet.ne.jp/digital/index.php print_r($_FILES["upfile"]); をこれから試してみますね。 どうもありがとうございます!
- ts3m-ickw
- ベストアンサー率43% (1248/2897)
再度、的外れな回答ならすみません。アップロードする部分だけの簡単なソースを見られればもう少し詳細が判るかもしれません。 <form>タグの中に<input name="upfile" type="file">があると思いますが、 upfileの部分の名前はあってますか? あと同じく<form>タグの中のMAX_FILE_SIZEの設定も合わせて確認してください(転送はできてるとのことなので、こちらは問題ないと思いますが)。 アップロードできているかどうかの判断はis_uploaded_file()関数を使うといいかもしれません。
お礼
ご回答ありがとうございます。 最新のものをweb上にアップしてみましたので、もしお時間があれば見てやっていただけると大変助かります;; http://gurrenavi.e-whs.tk/entryform/ フォームタグは<input type="file" name="upfile" size="50">となっており、間違いはないかと思われます? MAX_FILE_SIZEの部分は、 <input type="hidden" name="MAX_FILE_SIZE" value="{$conf['maxsize']}" />となっており、 {$conf['maxsize']}=ソース20行目の$conf['maxsize'] = 600000; で指定しているようです。 is_uploaded_file()、調べてみます。 どうもありがとうございます。
補足
ちなみに、左メニューの「管理」→ユーザ名/パス共に「admin」→管理者削除フォームで、データが送れているかが見られるようです。 どうぞ宜しくお願い致しますm(_ _)m
- bm_hiro
- ベストアンサー率51% (200/388)
#2です。 何も考えずに回答した事を反省しております。 >> とりあえず、エラーメッセージに $_FILES['upfile']['size'] の数値も 追加して 表示してみてはいかがでしょうか? エラーメッセージに追加したら、0にしかならないことは分かりきってるというオチでした。 この判定をしている処理の前に、画面に $_FILES['upfile']['size'] の数値を表示してみて 数値が正常なものか、 数値を確認してみてください。
お礼
いえいえ、とんでもないです。ありがとうございます。 処理の順序(?)が、 添付ファイル送信→(サイズ判定)→結果の文字表示 となっていたので、結果の文字「再入力はブラウザの戻るボタンを押してください。」という文字の後ろに「$_FILES['upfile']['size']」を入れてみたのですが、 600KB以下のファイルを添付→正常なサイズを表示(例:570446 と表示される) 600KB以上のファイルを添付→0 と表示されてしまいました。 ファイルサイズを取得する部分が、うまく動いてないということなのでしょうか? ちなみに最新のものをweb上にアップしてみましたので、もしお時間があれば見てやっていただけると大変助かります…(図々しくてすいません) http://gurrenavi.e-whs.tk/entryform/
補足
ちなみに、左メニューの「管理」→ユーザ名/パス共に「admin」→管理者削除フォームで、データが送れているかが見られるようです。 どうぞ宜しくお願い致しますm(_ _)m
- bm_hiro
- ベストアンサー率51% (200/388)
とりあえず、 > if($conf['attach'] == 1){ は、ないものとして 読みました。 見た感じだけですが、スクリプトは問題なさげに見えます。 今、問題になっているのは > どの場合も「添付ファイルが指定されていません。」というメッセージが出てしまいます。 の部分だと理解しましたので、 とりあえず、エラーメッセージに $_FILES['upfile']['size'] の数値も 追加して 表示してみてはいかがでしょうか?
お礼
ご回答ありがとうございます。 エラーメッセージ内に $_FILES['upfile']['size'] を入れてみてもやはり「添付ファイルが指定されていません。」が出てしまうのは変わらずでした。 (phpは本当に手探りなのでやり方があっているのかも手探りですが…;;)
- ts3m-ickw
- ベストアンサー率43% (1248/2897)
的外れな回答だったら申し訳ないんだけど、600KB以上のファイルを添付したときに、upload_max_filesizeを超えるサイズになっててアップロードできてないってことは無い? (post全体でならpost_max_sizeも考慮する必要があるけど)
お礼
ご回答ありがとうございます! upload_max_filesize = 2M にて設定しておりました。 また、今まで送信されたファイル一覧が管理ページで見られるのですが、 600KB以下の場合、ファイルとフォームデータは正常に送信できているようです。 600KB以上=「添付ファイルのサイズが大き過ぎます。」を出せればいいのですが…
お礼
ご回答ありがとうございます。 ご指摘の方法で無事解決致しました! また質問させていただく事があるかと思いますが、どうぞ宜しくお願い致しますm(_ _)m