• 締切済み

ファイルのアップロードで、

ファイルをアップロードさせる事に成功しましたが、 不正処理を防ぐ為、制限させたいのですが、 処理方法が分かりません。 (1) JPGファイルのみに制限する事 (2) 100KB以下に制限する事 (3) ファイルが未入力の場合、 ファイルパスが存在しない場合、 拒否する=>exitする。 (4) 0バイトなど壊れていたら、拒否する=>exitする。 どんなIF文があるでしょうか?

みんなの回答

回答No.1

1 #$_FILES['keyname']['type']を調べる。 if(preg_match("#^image/p?jpeg$#i",$_FILES['keyname']['type'])){ echo "JPGファイルのみアップロードが可能です"; exit; } 2 #$_FILES['keyname']['size']を調べる if($_FILES['keyname']['size'] > 102400){ echo "100KB以上のファイルは使えません。"; exit; } 3 #$_FILES['keyname']['error']を調べる if($_FILES['keyname']['error'] == 4){ echo "ファイルが未入力です。"; exit; } 4 #$_FILES['keyname']['error']を調べる if($_FILES['keyname']['error'] == 3){ echo "ファイルが正常にアップロードできませんでした。"; exit; } こんな感じでしょうか。 詳しくはPHPマニュアルのファイルアップロードの処理のページを参考にしてみてください。

参考URL:
http://php.planetmirror.com/manual/ja/features.file-upload.php
CANALVOR
質問者

補足

0バイト、未入力、100キロバイト制限は、 何とか他の方法でできましたが、 頂いた方法ではうまくいきませんでした。 JPEG形式なのかどうなのか、ファイルタイプを取り出す方法が分かればいいんですが、 $_FILES['keyname']['type'] では、 ファイル形式が取り出せないですね。 他の良く似た方法でも、 file という種類で取り出したり。 JPGでもtxtでも、file・・・って出ました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 大きなファイルのアップロード

    FC2ブログをやっているのですが、250KB以上の大きな動画のアップロードが出来ず、不便に思っています。(FC2ブログのファイルアップロードのページには「アップロードできるファイルは、250KBまでの拡張子jpg,gif,png,mid,swf,ico,mp3,html,txt,css,js,rdf」「banner.jpg,banner.png,banner.gifいずれかのファイル名でアップロードした場合外部URLから呼び出せる」とあります。) しかし、動画をzip形式にしてアップロードしていたり、avi形式のままダウンロードできるHPは数多く存在します。もちろん有料のレンタルサーバを利用すればいいのかもしれませんが、お金を使わないで大きなファイルのアップロードがしたいと考えています。ファイルを自分でアップロードした後、URLをブログに書き込み、それを観覧者がクリックして、動画が再生されるかダウンロードできる状態にしたいと思っています。 無料で大きなファイルのアップロードする方法を教えてください。

  • ファイルのアップロードについて

    phpのmove_uploaded_fileを使用してアップロードをしようと思うのですがアップロードが出来ません。 状況は ローカル環境のwindowsでのアップロードは行えるがlinuxでは失敗してしまいます。 move_uploaded_fileからはエラーは出力されていません そもそもmove_uploaded_fileが成功しているのになんでアップロードされていないのか分かりません。 //■HTML <form name="form1" method="post" action="upload.php" ENCTYPE="multipart/form-data"> <input type="hidden" name="MAX_FILE_SIZE" value="10485760" /> <table class="frm" id="tbl"> <tr><th>ファイル1<div id="image"></div></th> <td> 画像<input id="img_1" type="file" name="image[]" class="fname" onChange=imageChange(this); /><br /> </td></tr> <tr> <th>ファイル2<div id="image"></div></th> <td> 画像<input id="img_2" type="file" name="image[]" class="fname" onChange=imageChange(this); /><br /> </td> </tr> </table> </form> //■phpで以下のコードを実行すると oreach ($_FILES["image"]["error"] as $key => $error) { //複数のファイルをアプロード if ($error == UPLOAD_ERR_OK) { $tmp_name = $_FILES["image"]["tmp_name"][$key]; //テンポラリファイルパス $name = $_FILES["image"]["name"][$key]; //アップロードファイル名 $size = $_FILES["image"]["size"][$key]; //アップロードファイルサイズ $ermsg = $_FILES['image']['error'][$key]; //エラーメッセージ echo "アップロードファイル名".$name."\n" ; echo "アップロードファイルsize" .$size ."\n" ; echo "errmsg= .$ermsg."\n" ; // ファイルアップロード $cnt++; if ( move_uploaded_file($tmp_name, "../1/33/.$cnt."2upload.jpg ")){ //ファイルアップロード echo "アップロード成功 .$ermsg."\n" ; echo "  テンポラリファイル="$tmp_name."\n"; echo "  アップロードファイル="$dir_img."/".$cnt.UPLOAD_FILE_NAME."\n"; } else { echo 1; error_log("upload error! \n", 3, MATCHING_ERROR_LOG); exit; } } } exit; ■結果 アップロードファイル名thum6.jpg アップロードファイルsize=10104 errmsg= 0 アップロード成功   テンポラリファイル=/tmp/phpMvCzgo   アップロードファイル=../1/33/1upload.jpg アップロードファイル名 thum3.jpg アップロードファイルsize=11528 errmsg= 0 アップロード成功   テンポラリファイル=/tmp/php5Q4kIL   アップロードファイル=../1/33/2upload.jpg テンポラリの/tmpは777のため権限に問題ないです php.iniの設定 upload_max_filesize=2m post_max_size=8m memory_limit=128m 今回のアップロードファイルのサイズから問題なし file_uploads=onなので問題ありませんでした これでなにかわかる方いらっしゃいましたら教えてください。

    • ベストアンサー
    • PHP
  • ファイルのアップロードができません

    今日始めたばかりの初心者です。 PHPだとCGIに比べ、ファイルのアップロードとか画像の処理が簡単に行えそうなのでチャレンジしてみたのですが、いきなりつまづいてしまいました。 とりあえずファイルをアップロードしてみようと思い、下のようなサンプルをアップロードしてみたのですが、さっぱり動きません。 適当なjpgファイルをアップロードすれば、スクリプトのあるディレクトリに”aaa.jpg”という名前で保存すると思うのですが…。 最後の”var_dump($_FILES);”という命令で、アップロードされたファイルの内容を表示させてるはずなのですが、ファイル送信前も後も”array(0) {}”としか表示されません。 PHPのバージョンは4.34です。 どなたかご教授お願いします。 ************************ <form enctype="multipart/form-data" method="post"> Upload File:<input name="userfile" type="file"> <input type="submit" value="Send File"> </form> <pre> <?php if (!empty($_FILES)) { move_uploaded_file($_FILES['userfile']['tmp_name'],'aaa.jpg'); } var_dump($_FILES); ?> </pre> ************************

    • ベストアンサー
    • PHP
  • FC2ブログ 画像のアップロードについて

    FC2ブログ 画像のアップロードについて 画像(jpg)をアップロードしたいのですが、ファイルが大きすぎます、とでてアップロードすることができません。 500kb未満に抑えているのですが・・・ 自分なりに調べたところ、アダルトジャンルは250kb以下という制限があるそうなのですが、 前からアダルトジャンルで、以前は普通に250kb以上500kb未満でもアップロードできていました。 何が問題なのでしょうか?

  • phpでファイルをアップロードできるか?

    phpでのファイルアップロードについて質問します。 再質問となりますが、実際にコードを作成してやってみてうまくいかないので、 あらためて質問させていただきました。 eラーニング教材(htmlで作成)で、動画ファイルをストリーミングさせることになりました。 ウェブサーバ側へのアップロードする画面として、move_uploaded_file()やis_uploaded_file()メソッドをつかっていましたが、ストリーミングサーバ側としてFTP通信でポート20、21からのみのアップロードのみ許可されているとのことです。 ftp_put()メソッドを使ってアップロードさせたところうまくいきません。 **************<コード>************* $ftp_server="【サーバー名】"; $ftp_user_name="【アカウント名】"; $ftp_user_pass="【パスワード】"; $conn_id = ftp_connect($ftp_server); $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); if ((!$conn_id) || (!$login_result)) { echo "FTP接続に失敗しました。"; exit; } else { echo "FTP接続に成功しました。"; } ここまででFTPの接続はできているようです。 その直後に、 $local_file="【ローカルのファイルパス】"; $remote_file="【FTPサーバー上のアップロードファイルパス】"; if (!ftp_put($conn_id, $remote_file, $local_file, FTP_BINARY)) { echo "FTPアップロードに失敗しました。"; exit; } else { echo "FTPアップロードに成功しました。"; } **************<コード>************* FTPアップロードに失敗します。 原因がわからなく、こまっています。 ポートの指定が必要なのでしょうか? おしえてください。 よろしくおねがいたします。 **************** FTP supportはenabled になっています。 phpのバージョンは4または5です。 IE7以上のブラウザ環境を想定しています。

    • ベストアンサー
    • PHP
  • 画像アップロード時のエラーハンドリングについて

    いつもお世話になります。 ファイルアップロードするプログラムを作成しております。 ファイルサイズが100Kを超えたときにエラーメッセージを吐き出して、読み込みをやめるような処理にしたいのですが、ファイルをロックしてしまっているようです。 どのようなエラーハンドリングをすればよいのでしょうか? if ($inIMAGE1 ne '') { while ($bytesread = read($inIMAGE1, $buffer, $BUFSZ)) { $file .= $buffer; # ファイルサイズ制限 $file_size1 ++; if($file_size1 > 50) { print "Content-type: text/html\n\n"; print "*ファイルサイズが大きすぎます。100KB 以下にして下さい。\n"; #last; exit(0); }      }

    • ベストアンサー
    • Perl
  • ファイルのアップロード

    1.ファイルを選択 2.アップロードボタンで、ファイルをアップロード 3.アップされたファイル名をブラウザに表示 といった処理をするときに、1で選択したファイル名が日本語だと3のとき、正しく表示されません。たとえば飲み会.jpgをアップすると、a_a__aa_a__a__a.jpgと表示されてしまいます。半角英数字だと問題ないのですが・・・ 正しく日本語で表示させるにはどのようにすればいいでしょうか?アドバイスよろしくお願いいたします。 ※アップロードはPEARのHTTP_Upload()でやっています。 ※WindowsXPのIE,Firefox、MacのSafariで使います。

    • 締切済み
    • PHP
  • ファイルのアップロードについて

    PERLでファイルのアップロード機能を作成しています。 アップロードと言っても、サーバへのコピーではなく、 データベースへバイナリで格納しなければならないのです。 とりあえず2パターン作成してみたのですが、 OPEN関数を使ってやるとうまくいきません。 -----パターン1(OPEN関数使用)------------- $query = new CGI; $filename = $query->param('msds'); # ファイル名(フルパス)取得 if($filename ne "") { open(ATT, $filename);# or die "Could not open atachment file:"; binmode(ATT); while($bytesread = read(ATT, $buffer, $BUFSZ)){ $file .= $buffer; # ファイルサイズ制限 $file_size ++; if($file_size > 300){ exitError("ファイルサイズが大きすぎます。600KB 以下にして下さい。"); } } close(ATT); } -----パターン2(OPEN関数未使用)------------- $query = new CGI; $filename = $query->param('temp1'); # ファイル名(フルパス)取得 if($filename ne "") { while($bytesread = read($filename, $buffer, $BUFSZ)){ $file .= $buffer; # ファイルサイズ制限 $file_size ++; if($file_size > 300){ exitError("ファイルサイズが大きすぎます。600KB 以下にして下さい。"); } } print "FILE DATA:" . $file . "<BR>"; } パターン2でprint $fileをすると、ファイルの内容が 画面表示されるのですが、パターン1だと、While文に 入ってくれませんでした。 原因がさっぱりわかりません。。。 お分かりになる方が見えましたらご教授願います。

    • ベストアンサー
    • CGI
  • 画像のアップロードが出来ない

    →添付可能なファイルは.gif/.jpg/.jpeg/.png サイズは100KBまで。 ファイル名に半角スペースがあるとアップロードできません。 jpeg、サイズ100KB以下の画像を選択したのですが、アップロード出来ませんでした。なぜでしょうか。

  • ファイルのアップロードができません。

    Perl CGIモジュールを使ってファイルのアップロードをしたいのですが、うまくいきません。 以下HTML部分 =================================================================== <form action="test.cgi" enctype="multipart/form-data" method=post> 1つめのファイルを選択<input type="file" name="upimg1" size=40><br> <input type=submit value=アップロード></form> ==================================================================== 受け取るCGI ==================================================================== #!/usr/bin/perl use CGI qw(:standard); $upimg1 = param('upimg1'); open UP,"> ./img_dir/sample.jpg"; while(<$upimg1>){ print UP $_; } close UP print <<"EOL"; Content-type: text/html <html> <body> Files have been uploaded.<br> $file1<br> $file2<br> </body> </html> EOL exit; ===================================================================== 実際アップフォルダ内にはsample.jpgがあるのですが、0バイトできちんとアップされていません。 本をみて自分なりにやってみたのですが・・・ どこがまちがっていますか?よろしくお願いします。

    • ベストアンサー
    • CGI