• ベストアンサー

ファイルのアップロード

CGI初心者です。 http://nais.to/~yto/tools/ssupload/ NAIS.TOさんのサイトのファイルアップロードのソースを実際に試してみているのですが、 txtファイルやdatファイルはアップロード後開くことができるのですが、 pdfやxlsファイルは『ファイルが壊れています』と言われ、 フォルダに保存はされているのですが、開くことはできません。 html画面では文字コードがs-jisなのに cgiになるとISOになるのが原因だったりしますでしょうか。 ご回答宜しくお願いいたします。 環境 IE6 APACHE HTTP SERVER 2.0.58 ActivePerl 5.8.8

  • CGI
  • 回答数2
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
  • nin2-y
  • ベストアンサー率43% (14/32)
回答No.2

参考にされているファイルアップロードのソースなのですが、アップロードされたファイルを書き出す処理(22行目ぐらいから?)でOPENした後、書き出す前に「binmode F」が必要なのではないでしょうか?

praymode
質問者

お礼

ありがとうございます! 『binmode F』追加したら表示されました!! binaryにしていしないといけなかったんですね。 ありがとうございました。

praymode
質問者

補足

『この回答は参考になった』ボタンがランタイムエラーになってしまって押せませんでした… 本当にありがとうございました!

その他の回答 (1)

回答No.1

アスキーモードで転送されていませんか? txtファイルやhtmlファイルなどはアスキーモードですが、pdfファイルなどはバイナリモードで転送しなければ、ファイルが使えなくなってしまいます。 ファイル転送ソフトでFFFTPを使われているのでしたら、赤色でAと緑色でBのボタンがあります。このAを選択していませんか? また、メニューバーにある「オプション」で設定をご確認ください。

praymode
質問者

お礼

ご回答ありがとうございます。 まだ、ローカルでのテストしかしていないんです… -cgi-bin -data/test/←ココ以下にファイルを置くように設定してあるのですが… ローカルの段階でもアスキーモードとバイナリモードを意識しなければいけないのでしょうか? 無知なものですみません…

関連するQ&A

  • ファイルのアップロード Perl5.8

    ファイルのアップロードでCGI::Liteを使っています。 PerlはActivePerlのバージョン5.8ですが アップロード先のデータの中身が変わってしまい、 画像データなのに別のファイルになって表示されなくなりました。 これはファイル自体の文字コード変換が絡んでいるということですか? また、CGIとCGI::Liteの違いですが、両方使ってもよいのでしょうか?

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

    セキュリティー上、FTPでアップロードできないのですが、HTTPでファイルをアップロードできるソフトはありますでしょうか? WWWサーバには、CGIやSSIはなく、JavaServletが動く環境ですが、できれば環境依存しないJavaアプレットが理想です。 又、クライアントにソフトウェアを入れエクスプローラ感覚で複数のファイルを簡単にHTTPでアップロードできるソフトがあったら知りたいです。

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

    初めて質問させていただきます。 PHPの勉強をはじめたばかりの初心者です。教本をもとに勉強を進めています。すべて教本どおりに設定し進めてきましたが、ファイルアップロードの箇所でどうしてもうまくいきません。いろいろ、php.iniを修正したり、PHPを修正したりしましたが本どおりの結果になりません。ご指導お願いします。 以下2種類のhtmlファイルとphpファイルを使用 (1)upform.htmlの内容 <HTML><BODY> <FORM METHOD="POST" ENCTYPE="MULTIPART/FORM-DATA" ACTION="upload.php"> <INPUT TYPE="FILE" NAME="upfile"><br> <INPUT TYPE="SUBMIT" VALUE="アップロード"> </FORM> </BODY></HTML> (2)upload.phpの内容 <html><body> <?php if(move_uploaded_file ($_FILES['upfile']['tmp_name'], "./htdocs/phpbook/" ) == FALSE) { print "失敗しました。"; }else{ print ($_FILES['upfile']['name']); print "をアップロードしました。"; } ?> </BODY></HTML> 上記内容でhtmlファイルを呼び出し、abc.txt(デスクトップに保存している)をアップロードしようとすると、以下のエラーが返されます。 ↓↓エラー内容 Warning: move_uploaded_file(./htdocs/phpbook/) [function.move-uploaded-file]: failed to open stream: No such file or directory in C:\Program Files\Apache Group\Apache2\htdocs\phpbook\upload.php on line 7 Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\WINDOWS\Temp\phpB.tmp' to './htdocs/phpbook/' in C:\Program Files\Apache Group\Apache2\htdocs\phpbook\upload.php on line 7 失敗しました。 ↑↑エラー内容 いろいろ思考錯誤し、upload.phpファイルの6行目"./htdocs/phpbook/"の箇所を、"abc.txt"としてみると、『アップロードしました』とアップロードに成功(?)し、abc.txtはC:\Program Files\Apache Group\Apache2\htdocs\phpbook内にアップロードされました。 教本では、"./htdocs/phpbook/"はファイルの保存先と注記されていますが、エラーになります。"abc.txt"に書き換えることでアップロードに成功しています。また、なぜ、アップロード先がC:\Program Files\Apache Group\Apache2\htdocs\phpbook内になるのかもわかりません。php.iniファイルの設定でしょうか。質問が長くなり、また、内容に足りない面もあるかもしれないですが、どうかよろしくお願いします。 【参考】 php.iniのFile Uploadsを抜きました。 ;;;;;;;;;;;;;;;; ; File Uploads ; ;;;;;;;;;;;;;;;; ; Whether to allow HTTP file uploads. file_uploads = On ; Temporary directory for HTTP uploaded files (will use system default if not ; specified). upload_tmp_dir = ; Maximum allowed size for uploaded files. upload_max_filesize = 2M

    • ベストアンサー
    • PHP
  • NN4でファイルアップロードができない

    Linux、ApacheでPHP4を使ってMP3、txt、gif、jpgファイルをアップロードできる仕組みをつくっています。 文字コードはEUCを使っています。 IE(5、6で確認)とネスケ6では正常にうごいているのですが、 ネスケの4だけファイルをアップロードすることができません。(サーバに上がろうとしてないみたいです。) なにかご存知の方がいれば教えてください。 お願いします。

    • ベストアンサー
    • PHP
  • ブラウザ上でファイルをアップロードさせるCGIでファイル名を指定

    http://www.tohoho-web.com/cgi/wwwupl2.txt ↑このCGIを利用して、ファイルのアップロードが出来るようになったのですが、アップロードされたファイル名をこちらで指定したファイル名に変更させることは出来ますか? 例えば10個のファイルをアップロードした場合、001.jpg、002.jpg、.....010.jpgというように。 アップロードされたファイルをフラッシュで読み込みたいというのが目的です。

    • 締切済み
    • CGI
  • ファイルの転送モード(Euc Jis 無変換)について

    ファイルの転送モードについてわからないので質問させてください。 ソフトはffftpを使用しています。 txt html cgi dat(bbsのログ) などはアスキーモードで転送するというのはわかったのですが、ffftpのメニューにある Euc Jis 無変換はどのように使い分ければよいのでしょうか?以下のファイルの場合、どれを選択すればよいか教えてください。また無変換で転送しなくてはいけないものにJisなどを使用した場合、何か問題は起こりますか?(特に掲示板のログファイルやCGIファイルなど) アスキー *.html *.cgi *.dat(bbs のログ) *.pl

  • このコードについて

    普段自分でPerlを使いCGIを作成しますが、人のコードを読むのはいまだに苦手です(>_<) http://nais.to/~yto/tools/ssupload/ のサイトで発見したアップローダーを自分なりに解釈して、自分の言葉(コード)で書き直そうとしています。 ですが、いきなりわからないことだらけで…。 print $q->header(), $q->start_html(); って何でしょうか!? ここからここまでがHTMLですよ、みたいなことなのでしょうか? また、 my $fh = $q->param('uploaded_file'); は? 他にもわからないところだらけですが、上から順にやっていこうと思ってるので、上記のこと教えてください!! もしくは上記のサイトのコードじゃなくても、 ・見やすいコード ・モジュール不使用 ・Perl使用 のアップロードのコードがありましたらあわせて教えてください。

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

    ASPとHTMLで、ブラウザからファイルを選択してアップロードするページを作成しているのですが、以下の条件を満たすページは作成可能でしょうか。 【FTPではなく、HTTPでファイルを転送する】 【CGIは使わない】 ※サーバーはIISです。 いろいろと試行錯誤しながら試してみたのですが、うまくいきません。 何かご存知の方いらっしゃいましたら、教えてください。

  • datファイルとは?

    CGIなどで、外部のdatファイルを読み込んだりすることがあります。 ふと思ったのですが、なぜtxtファイルでは駄目なのでしょう? 別にtxtファイルにも、データは書き込めると思うのですが。 質問の意図が伝わりにくいかもしれませんが、 そもそも拡張子がdatのファイルとは何なのかを教えていただけないでしょうか。

  • CGI::Liteでファイルのアップロード

    Perl5.8でCGI::Liteを使ってファイルのアップロードをするつもりですが、ファイル名が日本語の場合とファイルの中身が文字化けして保存されています。 文字コードはutf8で統一させているのですが、 例えば、テスト.txtというファイルで中身がEUC-JPのファイルをアップロードしてもアップロード先でファイル名が化けずに中身もEUC-JPで保存されるようにしたいのですが、どういう関数を施せば良いでしょうか? CGI::Liteに変わる他のモジュールでもあるのでしょうか?

    • ベストアンサー
    • Perl

専門家に質問してみよう