実現したいことは、標題の通りです。
DBはSQLSERVER2015を使用しており、
バイナリデータはvarbinary(MAX)で格納しています。
現在実現できていることは、
PHPからDBへの接続
バイナリデータの取得
コンテンツタイプをExcelに設定
ファイルのダウンロード処理
問題点
Excelファイルはダウンロードされますが、
開く際、Excelでは開けませんとエラーがでます。
ダウンロードしたファイルをテキストエディタで開いたところ、
PHPのソースコードが記載されていました。
質問
格納したExcelファイルをダウンロードするには、どうすればよいのでしょうか。
PHPを初めて2日目になります。ずっと方法を探しているのですが、中々前へ進めません。ご教示のほどよろしくお願いいたします。
ソースコード
PHP
1<?php 2 require_once(dirname(__FILE__) . '/../common/config.php'); 3 4 //データベースのインスタンス名を指定 5 $serverName = config::DB_SERVER_NAME; 6 //接続情報を指定 7 $connectionInfo = array("UID"=>config::DB_USER_ID, 8 "PWD"=>config::DB_PASSWORD, 9 "Database"=>config::DB_NAME, 10 "CharacterSet"=>"UTF-8"); 11 //コネクションを確立 12 $conn = sqlsrv_connect($serverName, $connectionInfo); 13 14 $sql = 'SELECT IMAGE FROM EXCEL_DLL WHERE DIVISION = 1'; 15 16 //クエリーを実行 17 $result = sqlsrv_query($conn, $sql); 18 $row = sqlsrv_fetch_array($result) ; 19 20 $filename = 'TEST.xlsm'; 21 header('Content-type: application/vnd.ms-excel'); 22 header('Content-Disposition: attachment; filename="'.$filename.'"'); 23 24 //2018-08-02 14:10 修正 25 //file_get_contents($row['IMAGE_NM']); 26 echo $row['IMAGE_NM']; 27 28 //クエリー結果の開放 29 sqlsrv_free_stmt($result); 30 //コネクションのクローズ 31 sqlsrv_close($conn); 32?>
テーブル作成時のSQL文
SQl
1CREATE TABLE EXCEL_DLL(DIVISION varchar(2), IMAGE_NM varbinary(max),VERSION varchar(10),UPDATE_DT datetime) 2INSERT INTO EXCEL_DLL(DIVISION,IMAGE_NM,VERSION,UPDATE_DT) 3SELECT '1',img.BulkColumn,'1.0',sysdatetime() 4FROM (SELECT * FROM OPENROWSET(BULK N'C:\Test.xlsm',SINGLE_BLOB) AS i ) img

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。