[PHP-users 19486]アップ/ダウンしたファイルの文字化け
橋本 美紀
dm @ sa-ra-sa.com
2003年 12月 22日 (月) 02:44:47 JST
はじめまして。橋本です。
web上の過去のメールを参考にして、
uploadフォルダにアップされたファイルをdownloadページに一覧させ、
そのファイル名をクリックすると、ダウンロードを開始するとともに、
指定のメアドにその旨のメールを飛ばす
というものを組んできました。
お聞きしたいことが、二つあるのですが。。。
1.画像ファイル(.gif .jpg)や音ファイル(.wav .aiff .mp3)は、ダウンロードではな
くブラウジングされてしまいます。
・・・Mac OSX 環境 IE Safari ともに、でした。
これらは、application/octet-stream では、制御しきれてないのでしょうか??
これらをブラウジングさせることなく、ダウンロードさせることはできますか??
2.日本語で書かれたtxt書類は、ダウンロードしてきた時に、内容が全て文字化けて
しまいます。(サーバー上に置かれている状態で内容を確認しても、化けてるのです
けど)
これを改善するには、どうしたらいいのでしょうか??
以下に、ソースを書き出してみます。
アドバイス、お願いします。
=====downloadページ======
<BODY BGCOLOR="#ffffff">
<?php
$startdir = "uploaded"; // 公開するディレクトリを指定する
if (! empty($subdir)) { // リンクから呼び出された場合
$currentdir = $subdir; // そのディレクトリをカレントにす
る
} else {
$currentdir = $startdir; // 公開ディレクトリを起点にする
}
?>
<TABLE BORDER="0" width="100%">
<TR>
<TD BGCOLOR="#cccccc">名前</TD>
<TD BGCOLOR="#cccccc">サイズ</TD>
<TD BGCOLOR="#cccccc">種類</TD>
<TD BGCOLOR="#cccccc">更新日時</TD>
</TR>
<?php
$d = dir($currentdir); // ディレクトリクラスのオブジェクトを作成
while ($entry = $d->read()) { // readメソッドでディレクトリエントリを得る
$pathname = $d->path . "/" . $entry; // パス名。カレントディレクトリ
$pathinfo = pathinfo($pathname); // パス情報を配列で得る
if ($entry == ".") continue; // 自分自身のディレクトリには表示しない
if ($entry == "..") continue;
print "<TR><TD>\n";
// ファイル名の表示
// 親ディレクトリの場合
// サブディレクトリの場合
if (is_dir($pathname)) {
print "<A HREF=\"$PHP_SELF?subdir=$pathname\">" .
$pathinfo["basename"]."</A>";
// サイズ
print "<TD ALIGN=\"right\">" . number_format(filesize($pathname)) .
"</TD>";
// 種類
print "<TD>ディレクトリ</TD>";
// 通常のファイルの場合
} else if (is_file($pathname)) {
print "<A HREF=tensou.php/"
.$pathinfo["basename"]."?file_name=$pathname>".
$pathinfo["basename"]."</A>";
// サイズ
print "<TD ALIGN=\"right\">" . number_format(filesize($pathname)) .
"</TD>";
// 種類
print "<TD>". $pathinfo["extension"] . "ファイル</TD>";
}
// 更新日時
print "<TD>" . date("Y/m/d H:i:s", filemtime($pathname)) . "</TD>";
print "</TR>";
}
$d->close();
?>
</TABLE>
</BODY>
====tensou.php======
<?
$file_name = $_GET["file_name"];//File Path
$filesize = filesize($file_name);//File Size
header("Content-Type: application/octet-stream;
name=".basename($file_name));//MIME Type
header("Content-Disposition: attachment;
filename=".basename($file_name));//File Name
header("Content-Length:".filesize($file_name));//File Size Send
readfile($file_name);//Reading File
header("Location: $file_name");
mb_send_mail("dm @ sa-ra-sa.com", "DL開始メール", "ダウン開始した模様です。");
exit();//PHP quit
?>
--
ハシモトミキ
mail to : dm @ sa-ra-sa.com(ネット)
mail to : s-a.r-a.s-a @ ezweb.ne.jp (携帯)
PHP-users メーリングリストの案内