PHP による バイナリデータのレスポンス

  まさか、これで出来るとは...



  
<?
header( "Content-Type: application/octet-stream" );

$fp = fopen( 'Lbox.lzh', 'rb' );

if ( $fp ) {

	while( TRUE ) {
		if ( feof( $fp ) ) {
			break;
		}
		$ret = fread( $fp, 1024 );
		print $ret;
	}

	fclose( $fp );
}

?>
  



  マニュアルでは、



  
$stdout = fopen('php://stdout', 'w'); 
  

てな記述が、「PHPをコマンドラインから使用する」 にあるので、てっきり

  
$stdout = fopen('php://stdout', 'wb'); 
  

だと思ったのですが。

PHP4.3.2以降では、バイナリモードとテキストモードを区別する全ての プラットフォームにおいて、デフォルトのモードはバイナリにセットされます

だそうです...

逆に言うと、PHP4.3.2 より前で開発されたコードには、"t" が必要になりそうです

アップグレード後にスクリプトに問題が起きた場合は、 以上に述べたスクリプトの互換性を確保するまでの次善策として、 't'フラグを試してみてください。

だそうです...



  ダウンロード時の拡張子は

WWW サーバで .php に対して スクリプトをアサインしていると思いますが、.lzh に対してもスクリプト実行する
仮想ディレクトリを作成して対応するのが簡単だと思います










  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ