GIJOEさん、またおじゃまします。
FCHは下の処理でHTMLドキュメントかどうか判断していますよね。
// caches are created only for HTML documents
if( ! stristr( substr( $s , 0 , 100 ) , 'html' ) ) {
if( FASTESTCACHE_DEBUG ) error_log( "not html\n" , 3 , XOOPS_TRUST_PATH.'/fullcache/result' ) ;
return $s ;
}
これは、ファイルの始まりから100バイト以内に文字列"html"があればHTMLと判断し、キャッシュを作り、ヘッダでContent-Type: text/htmlを送るという流れになるかと思います。
ところが、zipファイルをバイナリで開いたとき、偶然htmlという文字列がのはじめの方に入るファイルがあり、そのキャッシュが作られてしまうことがありました。キャッシュが作られると、ヘッダにContent-Type: text/htmlがつけられるので、正常にダウンロードできなくなるようです。
"html"という文字列にあわせて、"<!DOCTYPE "が有るかどうかもチェックしたらどうでしょうか。HTMLドキュメントなら必ず、"<!DOCTYPE "タグが有るとは言い切れませんが、XOOPSなら大丈夫だと思います。