allowClientCache(); } /** * Page のプロセス. * * @return void */ function process() { ob_end_clean(); $customer_id = $_SESSION['customer']['customer_id']; $order_id = $_GET['order_id']; $product_id = $_GET['product_id']; $product_class_id = $_GET['product_class_id']; // ID の数値チェック // TODO SC_FormParam でチェックした方が良い? if (!is_numeric($customer_id) || !is_numeric($order_id) || !is_numeric($product_id) || !is_numeric($product_class_id)) { SC_Utils_Ex::sfDispSiteError(""); } $objCustomer = new SC_Customer(); //ログインしていない場合 if (!$objCustomer->isLoginSuccess()){ SC_Utils_Ex::sfDispSiteError(CUSTOMER_ERROR); } else { //ログインしている場合 //DBから商品情報の読込 $arrForm = $this->lfGetRealFileName($customer_id, $order_id, $product_id, $product_class_id); //ステータスが支払済み以上である事 if ($arrForm["status"] < ORDER_DELIV){ SC_Utils_Ex::sfDispSiteError(DOWNFILE_NOT_FOUND,"",true); } //ファイル情報が無い場合はNG if ($arrForm["down_realfilename"] == "" ){ SC_Utils_Ex::sfDispSiteError(DOWNFILE_NOT_FOUND,"",true); } //ファイルそのものが無い場合もとりあえずNG $realpath = DOWN_SAVE_DIR . $arrForm["down_realfilename"]; if (!file_exists($realpath)){ SC_Utils_Ex::sfDispSiteError(DOWNFILE_NOT_FOUND,"",true); } //ファイル名をエンコードする $sdown_filename = mb_convert_encoding($arrForm["down_filename"], "Shift_JIS", "auto"); //タイプ指定 header("Content-Type: Application/octet-stream"); //ファイル名指定 header("Content-Disposition: attachment; filename=" . $sdown_filename); header("Content-Transfer-Encoding: binary"); //キャッシュ無効化 header("Expires: Mon, 26 Nov 1962 00:00:00 GMT"); header("Last-Modified: " . gmdate("D,d M Y H:i:s") . " GMT"); //IE6+SSL環境下は、キャッシュ無しでダウンロードできない header("Cache-Control: private"); header("Pragma: private"); //ファイルサイズ指定 $zv_filesize = filesize($realpath); header("Content-Length: " . $zv_filesize); set_time_limit(0); ob_end_flush(); flush(); //ファイル読み込み readfile($realpath); } } /** * 商品情報の読み込みを行う. * * @param integer $customer_id 顧客ID * @param integer $order_id 受注ID * @param integer $product_id 商品ID * @param integer $product_class_id 商品規格ID * @return array 商品情報の配列 */ function lfGetRealFileName($customer_id, $order_id, $product_id, $product_class_id) { $objQuery = new SC_Query(); $col = <<< __EOS__ pc.product_id AS product_id, pc.product_class_id AS product_class_id, pc.down_realfilename AS down_realfilename, pc.down_filename AS down_filename, o.order_id AS order_id, o.customer_id AS customer_id, o.payment_date AS payment_date, o.status AS status __EOS__; $table = <<< __EOS__ dtb_products_class pc, dtb_order_detail od, dtb_order o __EOS__; $dbFactory = SC_DB_DBFactory_Ex::getInstance(); $where = "o.customer_id = ? AND o.order_id = ? AND pc.product_id = ? AND pc.product_class_id = ?"; $where .= " AND " . $dbFactory->getDownloadableDaysWhereSql(); $where .= " = 1"; $arrRet = $objQuery->select($col, $table, $where, array($customer_id, $order_id, $product_id, $product_class_id)); return $arrRet[0]; } /** * デストラクタ. * * @return void */ function destroy() { parent::destroy(); } } ?>