• 締切済み

htmlのupfileからとopen関数からのファイルの取得の違いについて

htmlのupfileを利用したファイル取得 <form action=\"$script\" method=\"POST\" enctype=\"multipart/form-data\"> <input type=file name=abc size=50> </form> と open関数を利用したファイル取得 open( INFILE, "<$ImgDir" ); binmode( INFILE ); read( INFILE, $abc, 10240000 ); close( INFILE ); の違いは何でしょうか? 上記2パターンで作成したファイルを同一のアップロードプログラムにかけたのですが、open関数を利用したものが認識されず、アップロードできないのです。 よろしくお願いいたします。

  • Perl
  • 回答数1
  • ありがとう数2

みんなの回答

  • fu_u_ka_i
  • ベストアンサー率51% (15/29)
回答No.1

WEBサーバとブラウザが、同一マシン上で動作させる前提でのお話でしょうか? htmlのtype=fileを使った機能は、ブラウザが動作するマシン上で、実ファイルを読み出し CGIがサーバ上のテンポラリを経由して受け取る考え方です。 open関数の方は.. perlスクリプトが動作するマシン上で、指定したファイルを読み出します。 つまり、CGIの場合、サーバ上で実ファイルを読み出すと言うことです。 ということで、サーバクライアントが別マシンであるなら、 普通にtype=fileを使ってアップロードしてください。

関連するQ&A

  • pl にてファイルをアップロード設定したいのですが...

    参考書を手に下記指示をしていますが...動きません; ■アップロード指示部分 <form action="$uppdffile" method="post" enctype="multipart/form-data"> <input type="file" name="upfile" size="40"><br> <input type="submit" value="アップロード"> <input type="reset" value="クリア"> </form> ■アップロード処理部分 my $upfilename = 'enq.pdf'; my $upfile = $buf{'upfile'}; my $upldir = '/usr/local/apache/htdocs/enq'; my $upshori = "$upldir/$upfilename"; sub uppdffile { open(OUT,"> $upshori"); binmode(OUT); binmode(STDOUT); print OUT $upfile; close(OUT); chmod(0666, $imgfile); } 動いてくれません... 問題箇所がお分かりの方がいましたらお教えください。 何卒よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • $_FILES関数

    $_FILES関数が使えなくて困っています。 phpのバージョンは4.4です。 ソースは以下のようなものです。 ================================= <?php print_r($_FILES); ?> <html> <body> <form action="<?= $_SERVER['PHP_SELF']?>" method="POST" enctype="multipart/form-data"> <input type="file" name="upfile"/> <input type="submit" value="アップロード"/> </form> <body> <html> ================================= "アップロード"ボタンを押すと、Array()とだけ表示されます。 どうしたら、$_FILES情報が取れるのか分かる方、アドバイスお願いします。

    • 締切済み
    • PHP
  • ファイルアップロードを教えて下さい。

    お世話になります。 php初心者です。 初歩的な質問になると思いますが… ローカルでファイルのアップロードのスクリプトの練習をしてるのですが上手く行きません。 アップロードしたファイル名が全て同じになります。 ディレクトリ構成として htdocs  ├128.php  └phpbook(ディレクトリ)    └128-2.php ■128.phpの中身 <form action="./phpbook/128-2.php" enctype="MULTIPART/FORM-DATA" method="POST"> ファイル:<input type="FILE" name="upfile"> <input type="submit" value="アップロード"> </form> ■128-2.phpの中身 <?php if(move_uploaded_file($_FILES['upfile']['tmp_name'], "./htdocs/phpbook/") ==FALSE){ print "失敗しました。"; }else{ print ($_FILES['upfile']['name']); print "をアップロードしました。"; } ?> アップロードは出来てるのですが、phpbookディレクト内にphpbookという拡張子が何もついてないファイルがアップロードされてしまいます。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • ファイルのアップロード処理を確認画面で確認後にアップロードするようにし

    ファイルのアップロード処理を確認画面で確認後にアップロードするようにしたいのですが、プログラムの書き方がわかりません。確認画面を通さずにやればアップロードできるのですが。どうすればいいのか教えてもらえるとうれしいです。 流れとしては「アップロード画面でファイルを指定」→「確認画面でアップロードボタンを押す」→「アップロード結果画面」です。作成中のソースは以下のようになっています。 ■upload.html(アップロード画面) <html><head><title>アップロード画面</title></head><body> <form action="kakunin.php" method="post" enctype="multipart/form-data"> ファイル:<br> <input type="file" name="upfile" size="30"><br> <input type="submit" value="確認画面へ"> </form></body></html> ■kakunin.php(確認画面)<未完成> <html><head><title>確認画面</title></head><body> <?php $upfile=$_POST['upfile']; print "選択したファイル: $upfile<br>\n"; ?> <br>この内容でよろしいですか?<br> よろしければ「アップロード」ボタンを押してください。<br> <form action="uploadkekka.php" method="post" enctype="multipart/form-data"> <input type="submit" value="アップロード"> </form></body></html> ■uploadkekka.php <html><head><title>アップロード結果</title></head><body> <p><?php if (is_uploaded_file($_FILES["upfile"]["tmp_name"])) { if (move_uploaded_file($_FILES["upfile"]["tmp_name"], "uploadfiles/" . $_FILES["upfile"]["name"])) { chmod("uploadfiles/" . $_FILES["upfile"]["name"], 0644); echo $_FILES["upfile"]["name"] . "をアップロードしました。"; } else { echo "ファイルをアップロードできませんでした。"; } } else { echo "ファイルが選択されていません。"; } ?> </p></body></html>

    • ベストアンサー
    • PHP
  • 違いがわかりませんorz

    <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" /> <title>アップロードされたか調べる</title> </head> <body> <p><?php if(isset($_FILES['example'])){ $localFilename=$_FILES['example']['name']; $uploadFile=$_FILES['example']['tmp_name']; if(is_uploaded_file($uploadFile)){ if (move_uploaded_file($_FILES["example"]["tmp_name"], "files/" . $_FILES["example"]["name"])) { chmod("files/" . $_FILES["example"]["name"], 0644); echo '<p>アップロードされたファイルです:'.h($localFilename).'</p>'; }else{ echo '<p>アップロードされていないファイルです:'.h($localFilename).'</p>'; } } function h($string){ return htmlspecialchars($string, ENT_QUOTES); } ?></p> <form method="post" action="" enctype="multipart/form-data"> <p>ファイルをしていしてください</p> <input type="file" name="example" value"" /> <input type="submit" value="送信する" /> </form> </body> </html> ----------------------------------------------------------------------------- ------------------------------------------------------------------------------ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" /> <title>sample</title> </head> <body> <p><?php if (is_uploaded_file($_FILES["upfile"]["tmp_name"])) { if (move_uploaded_file($_FILES["upfile"]["tmp_name"], "files/" . $_FILES["upfile"]["name"])) { chmod("files/" . $_FILES["upfile"]["name"], 0644); echo $_FILES["upfile"]["name"] . "をアップロードしました。"; } else { echo "ファイルをアップロードできません。"; } } else { echo "ファイルが選択されていません。"; } ?></p> <form method="post" action="" enctype="multipart/form-data"> <p>ファイルをしていしてください</p> <input type="file" name="upfile" value"" /> <input type="submit" value="送信する" /> </form> </body> </html> -------------------------------------------------------------------------- ------------------------------------------------------------------------------- 上と下のプログラムの違いがわかりません。アップロードのプログラムなんですが下の方が成功し、上がエラーになります。よければ、解説つけて上のプログラムを正してください(><) お願いします。

    • ベストアンサー
    • PHP
  • javascriptで .jpg , .jpeg , .pdfファイルであることを判定

    HTMLのフォーム文で、ファイルをアップロードしてもらい、それが.jpg, .jpeg , .pdf ファイルであった場合のみ、アップロードできるような仕組みをJavascriptを利用して作成中ですが、うまく行きません (ソース: test.php) --ここから-- <html></body> <SCRIPT language="JavaScript"> function mailSubmit(){ if (document.form_mail.upfile.value == "" ) { alert (" ファイルを選択してください。"); flag = 1; return; } else { if (document.form_mail.upfile.value.match(/[jpg]$/i)||(/[pdf]$/i)){ alert ("添付ファイルはJPEG,PDFに限ります"); flag = 1; // return; } } if(flag){ return false; } else { document.form_mail.submit(); return true; } } </script> <table> <!-- === FORMここから === --> <!-- <FORM METHOD="post" action="<?php print $_SERVER['PHP_SELF']; ?>" NAME="form_mail" ENCTYPE=multipart/form-data> --> <FORM METHOD="post" action="<?php print $_SERVER['PHP_SELF']; ?>" NAME="form_mail" ENCTYPE=multipart/form-data onSubmit="return mailSubmit()"> ファイル選択<INPUT TYPE=file NAME="upfile" SIZE=50 VALUE=\"$upfile\"> <br> <INPUT TYPE="button" VALUE=" 送信 " onClick=" javascript:mailSubmit() "> <INPUT TYPE="button" VALUE=" キャンセル " onClick="javascript:history.back()"> </FORM></body> </html> --ここまで-- JPG,JPEG,またはPDFファイルのみにアップロードの許可を与えるにはどうしたらいいでしょうか、(大文字・小文字は不問とします)ご回答いただければ幸いです。

  • ファイルアップロードについて【ギブアップです】

    さくらレンタルサーバーを使っています。 クライアントからサーバーへファイルをアップロードする仕組みを作りましたが、ファイルアップロード失敗になります。 どこがいけないのでしょうか? どうしてもわからず質問させて頂きました。 (さくらレンタルサーバーでは不可能??) <HTMLファイル> <html> <head>テスト</head> <body> <form action="./aaa.php" enctype="MULTIPART/FORM-DATA" method="POST"> ファイル:<input type="FILE" name="upfile"> <input type="submit" value="アップロード"> </form> </body> </html> <PHPファイル(aaa.php)> <?php if (move_uploaded_file($_FILES['upfile']['tmp_name'], "/home/test_serv/www/test/files/")){ print "ファイルアップロード成功"; print_r($_FILES); } else { print "ファイルアップロード失敗"."<br>"; print_r($_FILES); } ?> 出力結果は、「ファイルアップロード失敗」になります><;

    • ベストアンサー
    • PHP
  • formでファイルアップロードとテキストデータを送信したい

    JSPとServletでプログラムを作っております。 フォームで次のことをしたいと思っております。 1、DBにファイルをアップロードする。 2、DBにテキストデータを登録する。 この場合、 <form enctype = "multipart/form-data"> <form enctype = "text/plain"> を別個に指定できるのでしょうか? 出来ないとしたらどういう解決方法があるのでしょうか? 宜しくお願いいたします。

    • ベストアンサー
    • HTML
  • cgi.pm を使用してファイルUP時にtextエリア等の情報もcgiに引き渡す

    何度もPerlのところで質問していますが・・・今回は ファイルのアップロードをするときに少々もんだいが出てきてしまうことについてです。<input type="file"... を使います 以下の二つのファイルで構成しています(一部分だけ) ---form.html--- <form action="upload.cgi" method="POST" ENCTYPE="multipart/form-data"> <textarea name="input_textarea" rows="20" cols="70"></textarea> <input type="file" name="File" size=32> <input type-"submit" value="ok"> ---upload.cgi--- [formからの情報を配列変数に代入するスクリプト・・・] use CGI; $query = new CGI; $filename = $query->param('File'); # ファイル名の取得 $type = $query->uploadInfo($filename)->{'Content-Type'}; 同じファイル名が無いことを確認して、保存 という処理を行っています。upload.cgiの中身がとぼしくて申し訳ありません。 かなり省略してます。 さて、、問題となるのは ENCTYPE="multipart/form-data" とすると 配列変数にFORMからの情報がうまく入ってくれないということです、 かといってENCTYPE="multipart/form-data"を外すと CGI.pm を使った ファイルのアップロードができなくなってしまいます。 ENCTYPE="multipart/form-data" のオプションをつけて 配列変数にテキストエリアの内容を入れるにはどうすればいいのでしょうか。 テキストエリアを取り除くとファイルのアップロードはできます。 ただ、ファイルと入力したテキストを同時に処理することができないんです。

  • バイナリファイルのアップロード

    とあるサイトのマルチパートリクエストの使用事例をそのまま使って153KB程度のGIFファイルをアップロード実験してみましたら、処理後ブラウザで「cgi-lib.pl: Request to receive too much data: 153345 bytes 」と表示されアップロードされません。表示の意味と、どうすればアップロードできるかを教えてください。 ● サンプルHTML <html> <head><title>ファイルアップロード</title></head> <body> <form method="POST" action="upload.cgi" enctype="multipart/form-data"> <input type="file" name="upload"> <input type="submit" value="送信"> </form> </body></html> ● サンプルCGI require "cgi-lib.pl"; &ReadParse; $upload = $in{"upload"}; # ファイル内容を取得 $name = $incfn{"upload"}; # ファイル名を取得 $name =~ s/\\/\//g; # パス区切り文字を/に変換 $name = substr($name,rindex($name,"/")+1); # ファイル名のみを取得 if($upload ne "" && $name ne ""){ open(FILE,">$name"); binmode(FILE); print FILE $upload; close(FILE); }

    • ベストアンサー
    • Perl