• 締切済み

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

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

  • PHP
  • 回答数5
  • ありがとう数3

みんなの回答

  • nick9090
  • ベストアンサー率26% (102/378)
回答No.5

ちなみに・・・ 「あ.txt」ならば「%a4%a2.txt」となるはずです。 「%a4%a4」は、「い」ですね。

  • nick9090
  • ベストアンサー率26% (102/378)
回答No.4

日本語のファイル名だから駄目なのか、それとも半角英字のファイル名でも駄目なのか、まず切り分けのために、フォームから「a.txt」とかをアップしてみてはいかがでしょうか。 アップ後、ブラウザでアクセスしてみて表示されるようなら、日本語ファイル名に関わる何らかの問題がある…ということになります。 逆に英字のファイル名でも403エラーになるようなら、 やはりパーミッションなどが怪しいと思います。

ka-kichi
質問者

お礼

ご回答ありがとうございます。 半角英数のファイル名は表示・ダウンロード共うまくいきました。 その際のパーミッションは644でした。 やはり日本語ファイル名が問題だと思います。 URLエンコードしてるのに・・・。

ka-kichi
質問者

補足

すみません。 エラーは404でした。(^^ゞ エラーページを自作しているため、そのページの記述間違いでした。

回答No.3

403はforbiddenなので、権限が無い等為にアクセス出来ないと言う事です。 ディレクトリ自体に権限が無いか、.txtという拡張子が無効になっているかは分かりませんが。 日本語でアップロード、ダウンロードさせる場合は、ファイル名を適当な文字にしておき(例えばタイムスタンプ等)、それに紐づくファイル名を別に記録(データベース等)しておくのが良いと思います。そうすればサーバの文字数制限も考える必要が無くなります。 ダウンロードする時はPHP側で読込んでから吐き出すようにすれば良いと思います。例えば下記のように。 //ダウンロード用サンプル関数 function downLoadFile( $fname, $jname, $type){ header('Content-type: {$type}');//タイプ header('Content-Disposition: attachment; filename="{$jname}"');//日本語名 readfile($fname);//サーバに保存されているファイル名 } 参考まで。

ka-kichi
質問者

お礼

ご回答ありがとうございます。 PHP初心者なので、ちょっと難しそうですね。(^^ゞ DBなどを使わず、PHPだけで処理できれば一番いいのですが…。 この方法はあきらめて、まったく別の方法を考えようかと思っています。

回答No.2

URLエンコードしたファイルをアップしているのですね。 すみません、斜め読みしてしまったせいか、勘違いしていました。 しかもHTTP403エラーが出てくるなら、ディレクトリかファイルに 読込み権限がないのでは。

ka-kichi
質問者

お礼

再度ご回答ありがとうございます。 ディレクトリのパーミッションは755 テキストファイルのパーミッションは644でしたので、権限については問題ないと思います。

回答No.1

事実上、サーバには「http://。。。/%A4%A4.txt」というファイルは存在しませんから、 アップロードした時点で、サーバ側へはURLエンコードしたファイル名で保存するなどと 言った方法が一般的です。 それを正しい日本語して表示する場合の為に、日本語のファイル名も保持しておく必要があります。

ka-kichi
質問者

補足

> 事実上、サーバには「http://。。。/%A4%A4.txt」というファイルは存在しませんから、 これはどういうことなのでしょうか? FFFTPなどで見ると、「%A4%A4.txt」というファイルが見えています。 また、このファイル名をURLデコードすれば、元の日本語ファイル名が表示されますので、日本語ファイル名を保持しておく必要はないと思うのですが、いかがでしょうか?

関連するQ&A

  • 日本語名ファイルのダウンロードについて

    Windowsマシン上でブラウザを立上げ、LINUXサーバーにアクセスしてファイルをダウンロードしたいのですが、ファイル名が全角文字だと、NOTFOUNDになってしまいます。 ダウンロードを行なうjavascriptは以下のとおりです。 function download(){ document.location.href = "http://190.XXX.XXX.XXX:7001/temp/download/日本語名ファイル.txt" } システムは、javaで開発しています。(Servlet,JSP,Beans) サーバーのアプリケーションは、Weblogic6.0です。 ブラウザは、IE5.5です。 サーバーがWindowsマシンの場合は、上の方法で正常にダウンロードできます。 サーバーがLINUXマシンの場合、全角文字の部分をEUCに変換しておくと、ダウンロードはできるのですが、ダウンロード後のファイル名が化けてしまうので、具合が悪いです。 日本語名ファイルをダウンロードするよい方法がありましたら、教えてください。

  • 日本語ファイル名(EUC)が付いたjpgファイルの表示時の問題

    日本語ファイル名(EUC)を付けたjpgファイルをWebブラウザで開くと、そのファイル名がタイトル表示されます。 大多数の方のWebブラウザの文字エンコードのデフォルトはShift_JISと思いますがjpgファイルなので文字エンコードの指定も出来ず、結果文字化けして表示されてしまいます。 もちろんこのとき、ブラウザの文字エンコードを日本語(EUC_JP)に指定すれば正常に表示されます。 例えば.htaccessの設定で解決したいのですが手段が見つかりませんでした。ご存知の方がおられましたらよろしくお願いします。

  • 日本語ファイル名の文字化けについて

    debian 3.1でsambaサーバを運用して複数のwindowsでファイル共有をしています。 何の不自由もなく使用していましたが、debianのコンソール上で共有ディレクトリを見ると 日本語のファイル名が「??-{?.txt」などと表示されるのが気になり、 convmvというツールでファイル名の文字コード変換を行いました。(euc-jpとsjisをutf8へ) ところが変換がうまくいかなかったらしく、コンソール上でもWindows上でも ファイル名が文字化けしてしまいました。 上記のツールで戻すことができなかったためコンソール上でリネームしようとしたのですが、 ファイル名に「-」や「(」が含まれているため失敗してしまいます。 変換に失敗したファイル名を元に戻す方法があればご教授ください。 よろしくお願い致します。

  • 日本語名ファイルのDL時の文字化けについて

    <a href="aaa/日本語.txt">日本語</a> のようにリンクを貼ったのですが、ファイル名が上のように日本語のときに文字化けを起こしてファイルのダウンロードができません。 mb_convert_encodingとかを使ったりして色々試してみましたができません。どなたか解決策をご教授お願いいたします。

    • ベストアンサー
    • HTML
  • CGI::Liteでファイルのアップロード

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

    • ベストアンサー
    • Perl
  • 日本語のファイル名を表示したい。

    LiinuxサーバにSFTPで日本語のファイル名を外部から送信しています。 以下のサイトを参考にログを出力できるようにしたのですが、日本語のファイル名が表示されません。http://qiita.com/Teppei1224/items/b62e5f1af335a29217e0 変換などする方法でも構いませんので、日本語のログファイルを表示させる方法はありますでしょうか。どうぞよろしくお願いいたします。 ファイル名:ああああ.txt --- ログ ----------------------------------------------------------------------------------------------------------- Nov 18 16:34:40 tcsamigo01 sftp-server[10330]: set "/home/ユーザ名/\343\201\202\343\201\202\343\201\202\343\201\202.txt" modtime 20161118-16:33:08 -----------------------------------------------------------------------------------------------------------------------

  • 日本語ファイル名のバックアップ

    WEBサーバーの中に日本語のファイル名のデータがありまして、ローカルにFTPソフトでバックアップを取りたいと思いますが、FFFTPで文字コードをutf-8にチェックすると、日本語のファイル名はダウンロードできるのですが、ファイル名に「?」のマークがあるファイルだと、「ファイル、フォルダ名に使えない文字があります。名前を変更して下さい」と出ます。かなり沢山ファイルがあるので一気にダウンロードしたいのですが、どうしたらよいでしょうか?ちなみに全て画像ファイルです。どなたかご教授お願いします。

  • 日本語ファイルのリネームと保存

    ファイルアップデートで日本語ファイル名をリネームしてデータベースで対応付けて保存するプログラムを作成しました、そのファイルをリンクしてダウンロードする場合に元の日本語ファイル名で自動的にリネームしてPC側で保存する方法はないでしょうか。 例えば「あああ.txt」を「a.txt」にリネームして <a href="a.txt">あああ.txt</a> という風にしています、これをクリックするとa.txtになってしまいますが、あああ.txtで表示・保存するようにしたいのですが、何かうまい方法はないでしょうか。

    • ベストアンサー
    • PHP
  • 日本語のファイル名を検索

    お世話になります。 このたび旧サーバから新サーバにファイル構成を移動したのですが、 どうやら、旧サーバの日本語名のファイルが新サーバに移したときに 文字化けしてしまっているようです。 文字化けの修正を目指して、旧サーバ内の日本語のファイル名をすべて 検索したいのですが、どのようにすればよいでしょうか? ご教授お願いいたします。

  • ディレクトリ名に日本語をエンコードしたものを入れる

    例えば、[てすと] という文字列をurlencode()関数 でエンコードして %5B%E3%81%A6%E3%81%99%E3%81%A8%5D になりますよね。 でも、自分のサイトで、http://○○○.com/test/%5B%E3%81%A6%E3%81%99%E3%81%A8%5D/index.php にリンクを張ってアクセスしても、アクセスできないのです。 404エラーになってしまいます。 例を挙げるなら、ニコニコ動画のタグ以降のURLは http://www.nicovideo.jp/tag/○○○○○ となっています。 ○○○○○の部分に日本語をエンコードした文字列が入っています。 このような日本語をエンコードした文字列は、どうやって作ればいいのですか? urlencode()関数 で作ったはいいのですが、そこにリンクを張ってもアクセスできません。

    • ベストアンサー
    • PHP

専門家に質問してみよう