ファイル名に日本語を指定してファイルをダウンロードさせる

サーバ上に保存したファイルをダウンロードするときに、日本語ファイル名でダウンロードできるようにするためのプログラム片。

昔どこかで書いた記憶があったけど、思い出せなかったのでこちらに備忘的に書いておく。

ディレクトリの構成は以下のような感じ

-/dir/a.xsl
-/dir/download.php

download.phpはこんな感じ

|php|
<?
$file_name = basename("エクセル.xls");
$file_path = "a.xls";
$mime_type = "application/octet-stream";

  // IEならば、ファイル名をURLエンコードしないと文字化けるため  
  if( ereg( "MSIE", getenv( "HTTP_USER_AGENT" ) )  )  
    $file_name    = urlencode($file_name);

  if (file_exists($file_path)) {

    // 色々ヘッダを出力  
    // apache_setenv('ACCESS_ALLOW', '1');  
    header("Cache-Control: public");  
    header("Pragma: public");  
    header('Content-type: {$mime_type}');  
    header("Content-Disposition: attachment; filename={$file_name}");  
    // apache_setenv('ACCESS_ALLOW', '');

    // mb_http_output("pass");

    if (readfile($file_path)) {  
        exit;  
    }  
  }

||<

使い方

上記PHPファイルにアクセスすれば、おそらく「エクセル.xsl」というファイル名でダウンロードのダイアログが開くはず。
※ あまりちゃんと考えていないので、流用の際は気をつけてください