• 締切済み

ファイルアップロードの元ファイル名が取得できない

ローカルのファイルをサーバにアップロードするCGIを作成しました。 その中で、フォームのname属性から元ファイル名を拾おうとしています。 IEでは上手くいくのですが、ネットスケープやオペラからでは、サーバ側でファイル名を取得できません。 IEではまったく問題ないので、ブラウザ固有の問題なのかと考えているのですが、どなたか、同じような経験された、解決された方、いらっしゃいますか?

みんなの回答

  • kosa
  • ベストアンサー率25% (379/1464)
回答No.1

取得しようとしているファイル名は日本語ファイル名ですか?

pandak
質問者

補足

いいえ、ASCIIのみのファイル名でもダメです。 ファイル名に2バイト文字が含まれるとか、スペースが含まれるとか、半角カナが含まれるとかいう、そのような文字コードの問題ではなさそうです。 そもそも、ブラウザがサーバに対して、送信元のファイル名を送っているのかどうか、そんな問題なのかなと感じます。

関連するQ&A

  • 日本語ファイル名のアップロードとダウンロード

    日本語ファイル名のデータを、ブラウザ上のフォームを使ってWEBサーバにアップし、それらをブラウザに一覧表示させてリンクを張り、そのリンクをクリックするとダウンロードできるようなPHPスクリプトを作りたいと思っています。 URLエンコードを行い、日本語ファイル名を半角文字列に置き換えれば問題ないだろうと思ったのですが、URLエンコードされたサーバ上のファイルにさえアクセスできません。 サーバの文字コードがEUCなので、すべてEUCで作成しているのですが…。 例えば、「あ.txt」というファイルを、EUCで作成したフォームでURLエンコードをしてアップロードすると、「%A4%A4.txt」というファイルがサーバにアップされます。 そこで、「http://。。。/%A4%A4.txt」にブラウザでアクセスすると、403エラーが出ます。 次に、ブラウザに一覧表示させたリンク文字列を右クリックして保存しようとすると、「?¢.txt」というファイルを保存しようとするため、ファイルが見つからないとのエラーが出ます。 いろいろな文字コードでファイル名をエンコードしたり、PHPファイルの文字コードを変更したりして試してみたのですが、うまくいきませんでした。 どうすればいいのか教えていただけないでしょうか? なお、日本語は使わない方がいいということは承知しておりますが、数十個ある日本語ファイル名のデータを頻繁に更新しますので、その都度ファイル名を半角に書き換えることは避けたいと思っています。 元々のファイル名も、仕様により日本語である必要があります。 以下、当方の環境を記載いたします。 「ローカル」 WinXPsp2、IE6 「サーバ」 共有レンタルサーバ Apache

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

    ファイルをアップロードしたら、そのファイルはサーバ名の後に、スラッシュを 打ってからファイル名ですよね・・・・?ファイル名をコピーアンドペーストして サーバ名のあとに貼り付けてブラウザで見てみたら404ってでてくるんです、 でもアップロードソフトでアップ完了ってでてるし・・・・ OSはWINDOWSMEで、アップロードソフトはairIを使いました どの辺が間違っているのでしょうか?教えて下さい

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

    とあるサイトのマルチパートリクエストの使用事例をそのまま使って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
  • アップロードされてきた画像ファイル

    フォームからアップロードされてきた画像ファイルを、適当なファイル名を付けてJPGあるいはGIFの拡張子で保存し、HTMLファイルで保存した画像を一覧表示させようというCGIスクリプトを作りたいと考えています。 <FORM action="xxxx.cgi" method="post" enctype="multipart/form-data"> <INPUT type="file" name="gazo"> <INPUT type="submit"> </FORM> とこんな具合のフォームから画像ファイル(JPGやGIF)をアップロードした時、 受け手のxxxx.cgiでは、この画像ファイルのデータをどのように受けたらよいのでしょうか? cgi-lib.plを読み込んで、$in{'gazo'} というような形で画像ファイルのデータを受け取ればよいのでしょうか?

    • ベストアンサー
    • CGI
  • ファイル名の取得の方法

    こんにちは アップロードはうまく行ったのですが、ファイル名をうまく取り出すことが出来ません print"$filename \n"; で変数の中身を見るとCODE(0x189015c)というようなものが出てきました。 この変数をファイル名にしなくてはならないのですがどうやってもうまくいきません。 お願いします。 use CGI_Lite; require 'util.pl'; $Title = 'ファイルのアップロード サンプル'; $Temp = './tmp'; $Platform = 'Unix'; $BUFSZ = 2048; $CharSet = 'Shift_JIS'; $upload = new CGI_Lite; $upload->set_directory($Temp) or exitError("ディレクトリ $Temp がオープンできません。"); $upload->set_platform($Platform); $upload->set_buffer_size ($BUFSZ); # ファイル名の変換 $filename = $upload->filter_filename(\&convName); $upload->close_all_files; # フォームデータの解析 %data = $upload->parse_form_data; if ($upload->is_error()) { # アップロードのエラー exitError($upload->get_error_message()); } print <<"EOL"; <HTML> <HEAD> <TITLE></TITLE> </HEAD> <BODY> $filename </BODY> </HTML> EOL exit(0); sub convName { local($name) = shift; $name =~ tr/A-Z/a-z/; # 大文字から小文字へ変換 $name =~ s/(?:%20)+/_/g; # 空白文字を_に変換 $name =~ s/%[\da-fA-F]{2}//g; # %xx を削除 return ($name); } __END__

    • ベストアンサー
    • CGI
  • ファイルのアップロードで、ファイル名が文字化けして困っています

    いつもお世話になります。 いろいろ調べましたが解決しませんでした。 今社内で、情報共有掲示板を作成しているのですが、 ファイルをアップロードすると、ファイル名がぐちゃぐちゃになっています。(英数字は問題ありません) たとえば、自己申告0936.xls をアップロードすると、シォクハソスケ・936.xls となってしまいます。 PHPで作成し、サーバはApache2で、OSはWindows2000です。プログラムはEUC,MySQLはEUCの設定です。 ファイル名をデータベースにも登録するようにしていますが、そこでは文字化けは起こりません。 if($_FILES['file1']['name'] != ""){ mkdir("$uploaddir"); $ufile1 = $_FILES['file1']['name']; $uploadfile = $uploaddir.$ufile1; move_uploaded_file($_FILES['file1']['tmp_name'],$uploadfile); } 一部ですが、最大10個ファイルを送れるようにしています。 どうかよろしくお願いいたします!!

    • ベストアンサー
    • PHP
  • 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
  • ロリポップでのCGIファイルの使用について

    ホームページ作成ソフトで、携帯用サイトを作りサーバーにアップロードしたのですが、 ブラウザで確認するとエラー403がでてしまいます。 ソフトのユーザーサポートに問い合わせたところ、プログラムには問題がないので、 サーバーとCGIの関係で問題があるのではとの事でした。 エラー表示の注記に <CGIを利用の場合は「index.cgi」 の名前のファイルが無い場合、エラーが発生いたしますのでご注意ください。> とあったので、 試しにcgiのファイル名に「index.cgi」と入れてみたのですが、同じエラーが表示されてしまいました。 この場合、うまくブラウザに反映させるにはどのようにすれば良いのでしょうか。 利用環境・状況は次の通りですので、よろしくお願いいたします。 ■OS windowsXP ■ブラウザ IE ■アップロードしたファイル 「htmlファイル1つ」と「cgiファイル1つ」 ちなみに、htmlファイル単体ではブラウザに表示されるようです。

  • ファイルのアップロードがどうしても出来ません。

    単に画像ファイルをアップロードさせるだけなのですが、何故か出来ません。プログラミングに関しては初心者ですので、どなたかアドバイスをよろしくお願いします。 ■アップロードフォーム用のHTMLファイルです↓ ファイル名=gazou_upload.html <html> <head> <title>ファイルのアップロード</title> </head> <body> <form method="POST" action="gazou_upload.php" enctype="multipart/form-data"> <input type="hidden" name="max_file_size" value="1000000" > <input type="file" name="userfile"><br><br> <input type="submit" value="アップロード"> </body> </html> ■受け取ったファイルをサーバ上のディレクトリに移動するPHPファイルです↓ ファイル名=gazou_upload.php <?php if (move_uploaded_file($_FILES['userfile']['tmp_name'], "/image/")) { print "ファイルアップロード成功"; print_r($_FILES); } else { print "ファイルアップロード失敗"."<br>"; print_r($_FILES); } ?> ■ファイルを保存するディレクトリ 上のファイルと同じ階層で フォルダ名が image パーミッションは3つとも 707 にしました。 パーミッションが拒否されたというメッセージだと思うので、パーミッションを変更したのですがダメでした・・ちなみにサーバはロリポップを使っていて、777と666はエラーになると注意書きがあったので、707にしました。かなりハマっていて困っています。回答もしくはアドバイスをどなたかよろしくお願いします。

    • ベストアンサー
    • PHP
  • FFFPTでアップロードするとファイルが

    ローカルとホストで微妙に違っています。 ミラーリングでアップロードしてもファイルのバイト数が違います。ブラウザで見ると微妙にリンクが壊れていて、ローカルの方のファイルに間違いはありません。ビルダー8で作成しているので、タグの事はよく分かりませんが、どう考えてもローカルのファイルに問題はないと思います。問題のページのみ上書きしてみたり、ビルダーでアップロードしたりしても解決できません。