[PHP-users 21923]Re: データベース上のExcelをダウンロード

Etsuo SUMIYA e_sumiya @ f-den.co.jp
2004年 6月 1日 (火) 10:00:33 JST


sumiyaといいます.同様のことを先日行いました.今は環境がないので追試で
きませんが...

From: "Kuma" <satoru_kumagai @ mjs.co.jp>
Subject: [PHP-users 21919] Re: データベース上のExcelをダウンロード
Date: Tue, 1 Jun 2004 09:27:34 +0900
Message-ID: <012f01c4476f$3ee08520$7a09a8c0 @ dellkm>

> <?php
> $con = mssql_connect("db_server","sa","");
> mssql_select_db("db_name",$con);
> $str="select * ";
> $str = $str . "from hoge ";
> $str = $str . "where id = 12345";
> $rs = mssql_query($str);
> header("Content-Type: application/ms-excel");
> header("Content-Disposition: attachment; filename=test.xls");
> header("Content-Transfer-Encoding: base64");
> echo chunk_split(mssql_result($rs,0,"excel_obj"));
> exit();
> ?>
peardbを使っていますが,次のコードでダウンロードできています.
環境はWindows 2003 server+Apache 1.3.x+PHP 4.3.4
DBはMSDE

	$r = $res->fetchRow();
	header("Content-type: application/octet-stream;");
	header("Content-Disposition: attachment; filename=" . $r['filename']);
	echo $r['fileobj'];

また,uploadは次のコードでできています.

	if(is_uploaded_file($_FILES['upfile']['tmp_name'])) {
		$datastring = file_get_contents($_FILES['upfile']['tmp_name']);
		$data = unpack("H*hex", $datastring);
		$vars['filename'] = $fn;
		$vars['fileobj'] = "0x" . $data['hex'];
		$vars['filesize'] = $filesize;
		$quotes['fileobj'] = ""; 
		$quotes['filesize'] = ""; 
	}

要は,読み込んだファイルをunpack("H*hex", $datastring)し,文字列"0x"を
付加してDBへ格納する.ということです.

ただし,Windows+Apache+PHP(CGI)+MSDE(SQL Server)の環境ではリダイレクト
に失敗するので,PHPをModuleにして動作させるようにしました.

参考になれば...


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