[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 メーリングリストの案内