
日本語ファイル名のデータを、ブラウザ上のフォームを使ってWEBサーバにアップし、それらをブラウザに一覧表示させてリンクを張り、そのリンクをクリックするとダウンロードできるようなPHPスクリプトを作りたいと思っています。
URLエンコードを行い、日本語ファイル名を半角文字列に置き換えれば問題ないだろうと思ったのですが、URLエンコードされたサーバ上のファイルにさえアクセスできません。
サーバの文字コードがEUCなので、すべてEUCで作成しているのですが…。
例えば、「あ.txt」というファイルを、EUCで作成したフォームでURLエンコードをしてアップロードすると、「%A4%A4.txt」というファイルがサーバにアップされます。
そこで、「http://。。。/%A4%A4.txt」にブラウザでアクセスすると、403エラーが出ます。
次に、ブラウザに一覧表示させたリンク文字列を右クリックして保存しようとすると、「?¢.txt」というファイルを保存しようとするため、ファイルが見つからないとのエラーが出ます。
いろいろな文字コードでファイル名をエンコードしたり、PHPファイルの文字コードを変更したりして試してみたのですが、うまくいきませんでした。
どうすればいいのか教えていただけないでしょうか?
なお、日本語は使わない方がいいということは承知しておりますが、数十個ある日本語ファイル名のデータを頻繁に更新しますので、その都度ファイル名を半角に書き換えることは避けたいと思っています。
元々のファイル名も、仕様により日本語である必要があります。
以下、当方の環境を記載いたします。
「ローカル」
WinXPsp2、IE6
「サーバ」
共有レンタルサーバ
Apache
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
日本語のファイル名だから駄目なのか、それとも半角英字のファイル名でも駄目なのか、まず切り分けのために、フォームから「a.txt」とかをアップしてみてはいかがでしょうか。
アップ後、ブラウザでアクセスしてみて表示されるようなら、日本語ファイル名に関わる何らかの問題がある…ということになります。
逆に英字のファイル名でも403エラーになるようなら、
やはりパーミッションなどが怪しいと思います。
ご回答ありがとうございます。
半角英数のファイル名は表示・ダウンロード共うまくいきました。
その際のパーミッションは644でした。
やはり日本語ファイル名が問題だと思います。
URLエンコードしてるのに・・・。
No.3
- 回答日時:
403はforbiddenなので、権限が無い等為にアクセス出来ないと言う事です。
ディレクトリ自体に権限が無いか、.txtという拡張子が無効になっているかは分かりませんが。
日本語でアップロード、ダウンロードさせる場合は、ファイル名を適当な文字にしておき(例えばタイムスタンプ等)、それに紐づくファイル名を別に記録(データベース等)しておくのが良いと思います。そうすればサーバの文字数制限も考える必要が無くなります。
ダウンロードする時はPHP側で読込んでから吐き出すようにすれば良いと思います。例えば下記のように。
//ダウンロード用サンプル関数
function downLoadFile( $fname, $jname, $type){
header('Content-type: {$type}');//タイプ
header('Content-Disposition: attachment; filename="{$jname}"');//日本語名
readfile($fname);//サーバに保存されているファイル名
}
参考まで。
ご回答ありがとうございます。
PHP初心者なので、ちょっと難しそうですね。(^^ゞ
DBなどを使わず、PHPだけで処理できれば一番いいのですが…。
この方法はあきらめて、まったく別の方法を考えようかと思っています。
No.1
- 回答日時:
事実上、サーバには「http://。
。。/%A4%A4.txt」というファイルは存在しませんから、アップロードした時点で、サーバ側へはURLエンコードしたファイル名で保存するなどと
言った方法が一般的です。
それを正しい日本語して表示する場合の為に、日本語のファイル名も保持しておく必要があります。
この回答への補足
> 事実上、サーバには「http://。。。/%A4%A4.txt」というファイルは存在しませんから、
これはどういうことなのでしょうか?
FFFTPなどで見ると、「%A4%A4.txt」というファイルが見えています。
また、このファイル名をURLデコードすれば、元の日本語ファイル名が表示されますので、日本語ファイル名を保持しておく必要はないと思うのですが、いかがでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのファイルにリンクを貼る方法 4 2023/06/30 11:09
- Visual Basic(VBA) Excelのマクロについて教えてください。 作業フォルダ内に2つのファイルがあります。 このファイル 2 2023/07/09 13:40
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- その他(メールソフト・メールサービス) メールソフトを教えてください 1 2023/03/28 23:32
- その他(IT・Webサービス) WPからダウンロードしたファイル名を指定したい 2 2022/04/08 08:31
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/08 11:02
- Visual Basic(VBA) ファイル名の右側を変更したい ファイル名:「1001日別売上」の左側へ「2022」を追加し、「202 6 2022/10/14 10:03
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/03 13:18
- UNIX・Linux テキストファイルをページ番号付きでコマンドラインから印刷したい 1 2023/02/22 12:47
- PHP 画像ファイルの名前をそのままURLにする 3 2022/10/16 11:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CSVファイルのダウンロード
-
PHPでBasic認証付HP...
-
ダウンロードが機能しない。
-
PHPでCSVファイルの任意の行だ...
-
PHPで複数ファイルをZIPで圧縮...
-
左クリックでファイルのダウン...
-
phpファイルをダウンロード...
-
php→mysqlへの接続が出来ない(...
-
<A HREF="bg.php" target="_bl...
-
functionに括弧を使用するとエラー
-
3人の旅人が
-
このサイトの作成技術は何ですか?
-
設定した時間だけ実行されるプ...
-
コメントフォームの設定方法
-
O/Rマッパーの選定
-
HTMLについて質問ですが。
-
メールを受信で文字化け
-
メール送信できない
-
nl2bの代用関数を何か知ってい...
-
PHPのインストールで
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ftp_getでローカルにファイルが...
-
zip圧縮の種類について
-
PHPでファイルのダウンロードす...
-
libxml2のインストール
-
PHPで複数ファイルのダウン...
-
生成したHTMLをボタンクリック...
-
ファイルのダウンロードのイベ...
-
VB.NETのFTPダウンロードについて
-
phpでzipファイルダウンロード...
-
PHPでダウンロードしたファイル...
-
複数ファイルを連続でダウンロード
-
eclipseでコメントアウトができ...
-
Excelファイルをダウンロード
-
ファイルに書き込む時の負荷に...
-
CSVファイルのダウンロード
-
ファイル一覧を表示しその画面...
-
ファイルアップロード・ダウン...
-
phpでEXCELファイルの編集
-
PDF ダウンロード
-
ダウンロードファイル名の文字...
おすすめ情報