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

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

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

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

Q&A

4回答

2030閲覧

phpフォームのファイルアップロードの容量制限について

shinamon

総合スコア6

PHP

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

0グッド

1クリップ

投稿2018/07/31 10:12

PHPで動画応募フォームを作成しました。
30MBまでの動画をサーバーにアップロードし、動画はメールに添付せず入力項目だけが管理者メールアドレスに送信されるフォームです。
PHPをさわったことがなく、サイトを見ながら完成させたのですが、ファイル容量の制限のみ他サイトを真似しても機能しません。

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

PHP.iniを30MBに容量制限をしています。それ以上の容量をアップロードすると、何のメッセージも出ずに入力したデータがリセットされます。何とかエラーの内容を表示させ、容量制限したいのです。

該当のソースコード

※ソースコードが10000文字を超えて、入力できないため、GitHubのURLをはります。

https://github.com/gray-code/make-the-form/blob/master/vol8/index.php

※元の参考サイト
https://gray-code.com/php/make-the-form-vol8/

試したこと

https://notei.hatenablog.jp/entry/2008/03/26/142544
https://thinkit.co.jp/story/2015/06/11/6118
などを見ましたが、どこにどうやって書けばよいのかわかりません。

どなたか、ご教授いただけないでしょうか。
よろしくお願いします。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/07/31 10:18 編集

「PHP.iniを30MBに容量制限をしています。」とは書いてあるのですが、正しい項目をいじっているのか判断できないし、どんなコード書いているのかも回答者はわかりません。 それにファイル名はPHP.ini じゃなくて php.ini ですよね?情報は正確に。
shinamon

2018/07/31 10:21

ご返答ありがとうございます。php.iniは、post_max_size = '35M' upload_max_filesize = '30M' max_execution_time = '600' として、phpinfo.phpを確認してみると、upload_max_filesizeが30MBになっているのを確認しました。
shinamon

2018/07/31 10:27

また、PHP.iniではなく、php.iniでした。失礼しました。
guest

回答4

0

$_FILES['attachment_file']['error'] でエラーの種別が取れるので、まず原因特定をしましょう。

エラーメッセージの説明


余談ですが…

php

1// サニタイズ 2if (!empty($_POST)) { 3 foreach ($_POST as $key => $value) { 4 $clean[$key] = htmlspecialchars($value, ENT_QUOTES); 5 } 6}

これアウトです。htmlspecialchars を使うべき場所じゃないし、これではPOSTで送られた不正なデータを全て処理してしまう。

投稿2018/07/31 10:27

編集2018/07/31 10:34
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

shinamon

2018/07/31 10:41

ご返答ありがとうございます。 phpが初心者すぎて、難易度が高くて理解できず、自分ではどうにも編集できそうにありません。。。 こういう処理は初心者には無理でしょうか?
退会済みユーザー

退会済みユーザー

2018/07/31 10:45

teratail ってあくまでエンジニアのためのQAサイトですから、あくまで回答者は問題解決の手助けをするだけですし、質問者自身のエンジニアとしてのスキルアップのためと考えてます。 努力を惜しまない質問者なら手伝いはするけど、「できません」となれば、「業者に頼んでみては?」という回答になります。
shinamon

2018/07/31 10:58

すみません。仰る通りで大変申し訳ありましん。本当は、自分でわからなければ業者に出さないといけないのですが、急遽明日中に提出することになり、業者に頼むのは間に合わず、自分ではさっぱりわからず、ダメもとで質問させていただきました。やはり、これ以上の詳細を質問することは失礼になってしまいますね。ありがとうございました。
退会済みユーザー

退会済みユーザー

2018/07/31 11:02

これは、何か具体的な案件のもの?それとも学生さんの課題?
shinamon

2018/07/31 11:06

具体的な案件になります。私は学生ではありません。phpでないと、大容量のファイルを受け付けできないとわかり、phpに初挑戦しました。ですが、実力不足です。申し訳ありませんでした。
退会済みユーザー

退会済みユーザー

2018/07/31 11:11

動画部分だけなら、エラーの表示すれば解決につながるだろうけど、メールの送信部分も現状ではスパム判定されること必至だし、大幅な修正が必要になりますね… お客さんに頭下げて、もう少し納期に余裕をもらうべきかと思います。 質問文も字数制限があるように回答にも字数制限がありますから、はいよっって回答の提示もできませんからね。
shinamon

2018/07/31 11:28

いろいろなご指摘ありがとうございます。自分では気づかない部分がたくさんありました。明日中の提出は変えられないようですので、どうしても作れなかった場合は、googleフォームとか、youtubeやファイル送信サービスにアップしてurlを送ってもらうような回避策も検討してみます。キャンペーンの日はずらせないそうです。そうなった場合は、後日できなかった部分を作り直します。お忙しい中、コメントいただき本当にありがとうございます。
guest

0

HTML に MAX_FILE_SIZE を記述しておくことで、サイズ超過をアップロード前にブラウザが知ることができるようになります。送信ボタンの下あたりに追加してください。

HTML

1<input type="submit" name="btn_submit" value="送信"> 2<input type="hidden" name="MAX_FILE_SIZE" value="31457280">

そして$_FILES["attachment_file"]["error"]を見て
これが1だったらphp.iniの設定値超過。
2だったらhiddenで指定したMAX_FILE_SIZE超過。
4だったらファイルを選択しないでsubmit。
試してみてください。

投稿2019/06/05 08:10

編集2019/06/05 08:12
hide0128

総合スコア245

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

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

0

このコードを環境に合わせて使ってください。

php

1//ファイルサイズチェック 2$filesize = filesize ( $_FILES['file'] ); 3if($filesize >= 31457280){ 4echo"ファイルサイズが30MBを超えています。<br>アップロードは実行されませんでした"; 5exit; 6}

投稿2019/06/05 07:14

編集2019/06/05 07:18
TeamPassionall

総合スコア80

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

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

0

それ以上の容量をアップロードすると、何のメッセージも出ずに入力したデータがリセット

制限をなくして受け付けると超巨大なファイルを送りつけられて
サーバーがパンクする可能性がありますので無理ですね。
たとえば30Mなら倍の60M制限か何かをつけて、60M以上のデータはあきらめ
$_FILESで容量を確認してオーバー(30-60M)してたらエラーを表示
すればいいでしょう。
※60Mが適正かどうかはテストして決めてくださいとしか・・・

投稿2018/07/31 10:26

yambejp

総合スコア114829

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

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

shinamon

2018/07/31 10:29

「60M制限か何か」というのはphpでするのですか?「$_FILESで容量を確認してオーバー(30-60M)してたらエラーを表示」のやり方がわからないので、困っているのです。
yambejp

2018/07/31 11:00 編集

すでにご自身で書かれているのも含め ・httpd.conf httpd.confに <Files *.php> LimitRequestBody 62914560 </Files> ・php.ini upload_max_filesize = 60M post_max_size = 60M 上記でだめなら以下も確認 max_execution_time max_file_uploads memory_limit max_input_time 設定後apache再起動し、phpinfo()で設定を確認すること
shinamon

2018/07/31 11:17

ご返答ありがとうございます。この設定は自分でできそうです。やってみます。夜遅くにありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問