[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 メーリングリストの案内