[PHP-users 27752] ファイルダウンロードでzipファイルのみ途切れる

keijiro icm @ pepota.com
2005年 12月 3日 (土) 23:59:18 JST


こんばんは。
keijiroです。

CentOS4
php-4.3.9-3.9(rpm)
を使用しています。

PHPからファイルのダウンロードをさせたいと思います。
その中で、不可解な現象があります。

全てのzipファイルではないのですが、
中身はjpegファイルを圧縮したzipファイルで
400kb〜500kb前後のファイルの時、
ファイルが壊れてしまいます。

バイナリエディタで比較したところ、
最後の10kbほどが途切れてしまっています。

zipファイルではなく、他のファイルなら、
正常に動作します。
また、zipでも小さいサイズなら成功します。

さらに、zipの時は、
header("Content-Type: application/zip");
を付けても付けなくても、
ファイル名が正常に表示(?)されず、
ダウンロード時のファイル名がソースコード名となってしまいます。

同様の現象でつまずいた方がいらっしゃいましたら、
ご教授ください。

ちなみに、以下のソースは、
http://php.bieffe.org/manual/ja/function.header.php
から使用しましたが、

これ以外のやりかた、
> $fp = fopen( $theFile, "r" );
>   while( !feof( $fp ) ){ print fgets( $fp ); }
> fclose( $fp );
でも同様でした。


-----

<?php
dl_file("test.zip");
function dl_file($file){
   $len = filesize($file);
   $filename = basename($file);
   $file_extension = strtolower(substr(strrchr($filename,"."),1));
   $ctype="application/octet-stream";
   header("Pragma: public");
   header("Expires: 0");
   header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
   header("Cache-Control: public"); 
   header("Content-Description: File Transfer");
   header("Content-Type: $ctype");
   $header="Content-Disposition: attachment; filename=".$filename.";";
   header($header );
   header("Content-Transfer-Encoding: binary");
   header("Content-Length: ".$len);
   @readfile($file);
   exit;
}
?>

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
keijiro
icm @ pepota.com
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/



PHP-users メーリングリストの案内