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   管理者用   
このエントリーをはてなブックマークに追加




SQLの窓  天気  IT用語辞典
Yahoo!ニュース  マルチ辞書
PHP マニュアル  Google URL短縮 


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

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ