PHP + VBS 分割ダウンロード

MSXML2.XMLHTTP バイナリダウンロード
getpart.lzh
VBScript 側で、MSXML2.XMLHTTPを用いてデータをダウンロードするので、
1回のリクエストで大きなファイルをダウンロードしようとすると、メモリ
を圧迫する事になります。

ですから、サーバー側で分割の対処を行って対応し、
クライアント側では COPY コマンドの結合書式で連結します。

他にいくらでも代替の手段があるので、全く実用的ではありませんが、
バッチ処理の1つのテクニックとして価値あるかもしれません。

今回やってみて解ったのは、Msxml2.ServerXMLHTTP( サーバーオブジェクト )
を使用すると連続実行ができず、以下のようなエラーが出る場合があります
スクリプト:	C:\Documents and ....
行:	22
文字:	2
エラー:	An internal response header size limit was exceeded

コード: 80072F97
ソース: msxml3.dll
※ 結局、IE 依存環境の MSXML2.XMLHTTP で実行すると動作しましたが、
※ 環境によって結果が異なる可能性があります
getpart.php
<?
header( "Content-Type: application/octet-stream" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );

$fp = fopen( $_GET['file'], 'rb' );

// $n から $len の長さを出力

$p = $_GET['part']+0;
$n = $_GET['target']+0;
$len = filesize($_GET['file']);

$len = $len / $p;
$len = floor( $len );
if ( $p == $n ) {
	fseek( $fp, ($n-1)*$len, SEEK_SET );
	$len = filesize($_GET['file'])-$len*($p-1);
}
else {
	fseek( $fp, ($n-1)*$len, SEEK_SET );
}

if ( $fp ) {

	$ret = fread( $fp, $len );
	print $ret;

	fclose( $fp );
}

?>
getpart.vbs
Set objSrvHTTP = Wscript.CreateObject("MSXML2.XMLHTTP")
Set Stream = Wscript.CreateObject("ADODB.Stream")
Set WshShell = CreateObject( "WScript.Shell" )

strUrl = "http://lightbox.on.coocan.jp/download/getpart.php"
strUrl = strUrl & "?file=WinOfSql102.lzh"
strUrl = strUrl & "&part=10&target="

strCommand = ""

For I = 1 To 10

	on error resume next
	Call objSrvHTTP.Open("GET", strUrl & I, False )
	if Err.Number <> 0 then
		Wscript.Echo Err.Description
		Wscript.Quit
	end if
	on error goto 0

	objSrvHTTP.Send

	Stream.Open
	Stream.Type = 1	' バイナリ
	Stream.Write objSrvHTTP.responseBody
	Stream.SaveToFile "WinOfSql102." & I, 2
	Stream.Close

	if strCommand <> "" then
		strCommand = strCommand & " + "
	end if

	strCommand = strCommand & "WinOfSql102." & I & " /B "

Next

strCommand = "cmd.exe /c copy " & strCommand & " WinOfSql102_join.lzh /B"

Call WshShell.Run( strCommand, 0, True )