ดาวน์โหลดไฟล์ text จากฐานข้อมูล
ตัวอย่างการดาวน์โหลดไฟล์ text จากข้อมูลในฐานข้อมูล สามารถประยุกต์ใช้ในการดาวน์โหลดไฟล์ประเภทใดก็ได้
อันดับแรก สร้างลิงค์สำหรับดาวน์โหลดไฟล์ ชี้ไปที่ไฟล์ download.php ซึ่งสามารถสร้างด้วยวิธีใดก็ได้นะครับ ตัวอย่างนี้เป็นการแสดงให้เห็นการสร้างลิงค์ไปที่ไฟล์ download.php เฉยๆ
เสร็จแล้วสร้างไฟล์ download.php มีโค้ดตามด้านล่างนี่แหละครับ
ไฟล์นี้จะมีเนื้อหาเหมือนกับไฟล์ index.php ปกติแหละครับ เพียงแต่มีสิ่งที่เพิ่มเติมขึ้นมาคือการกำหนด defaultController ไปยัง Index\Download\Controller แทนค่า default ซึ่งปกติจะเป็นของหน้าหลักอยู่
สำหรับคลาส Index\Download\Controller คือไฟล์ modules/index/controllers/download.php มีโค้ดตามด้านล่าง คลาสนี้จะทำการอ่านข้อมูลที่เลือกจาก Model และทำการส่งออกเป็นไฟล์ดาวน์โหลดด้วยการกำหนด header เป็น application/octet-stream ด้วย Response คลาส
ไฟล์สุดท้ายที่เกี่ยวข้องคือ Model สำหรับอ่านข้อมูลจากฐานข้อมุล Index\Download\Model หรือไฟล์ modules/index/models/download.php
สำหรับโครงสร้างของฐานข้อมูล download ตามตัวอย่างนี้จะเก็บข้อมูลประมาณนี้
อันดับแรก สร้างลิงค์สำหรับดาวน์โหลดไฟล์ ชี้ไปที่ไฟล์ download.php ซึ่งสามารถสร้างด้วยวิธีใดก็ได้นะครับ ตัวอย่างนี้เป็นการแสดงให้เห็นการสร้างลิงค์ไปที่ไฟล์ download.php เฉยๆ
<a href="download.php?id=1">Download</a>
เสร็จแล้วสร้างไฟล์ download.php มีโค้ดตามด้านล่างนี่แหละครับ
<?php
/**
* @filesource download.php.
*
* @author Goragod Wiriya <admin@goragod.com>
* @link http://www.kotchasan.com/
* @copyright 2016 Goragod.com
* @license http://www.kotchasan.com/license/
*/
/**
* 0 (default )บันทึกข้อผิดพลาดร้ายแรงลง error_log .php
* 1 บันทึกข้อผิดพลาดและคำเตือนลง error_log .php
* 2 แสดงผลข้อผิดพลาดและคำเตือนออกทางหน้าจอ (ใช้เฉพาะตอนออกแบบเท่านั้น)
*/
define('DEBUG', 2);
/**
* false (default)
* true บันทึกการ query ฐานข้อมูลลง log (ใช้เฉพาะตอนออกแบบเท่านั้น)
*/
define('DB_LOG', false);
// load Kotchasan
include 'Kotchasan/load.php';
// Initial Kotchasan Framework
$req = Kotchasan::createWebApplication();
$req->defaultController = 'Index\Download\Controller';
$req->run();
ไฟล์นี้จะมีเนื้อหาเหมือนกับไฟล์ index.php ปกติแหละครับ เพียงแต่มีสิ่งที่เพิ่มเติมขึ้นมาคือการกำหนด defaultController ไปยัง Index\Download\Controller แทนค่า default ซึ่งปกติจะเป็นของหน้าหลักอยู่
สำหรับคลาส Index\Download\Controller คือไฟล์ modules/index/controllers/download.php มีโค้ดตามด้านล่าง คลาสนี้จะทำการอ่านข้อมูลที่เลือกจาก Model และทำการส่งออกเป็นไฟล์ดาวน์โหลดด้วยการกำหนด header เป็น application/octet-stream ด้วย Response คลาส
<?php
/**
* @filesource modules/index/controllers/download.php
* @link http://www.kotchasan.com/
* @copyright 2016 Goragod.com
* @license http://www.kotchasan.com/license/
*/
namespace Index\Download;
use \Kotchasan\Http\Request;
use \Kotchasan\Http\Response;
/**
* default Controller
*
* @author Goragod Wiriya <admin@goragod.com>
*
* @since 1.0
*/
class Controller extends \Kotchasan\Controller
{
/**
* คลาสสำหรับดาวน์โหลดไฟล์
*
* @param Request $request
*/
public function index(Request $request)
{
// รับค่าจาก $_GET['id']
$id = $request->get('id')->toInt();
// อ่านข้อมูลจากฐานข้อมูล
$download = \Index\Download\Model::get($id);
// create Response
$res = new Response();
// set headers
$res->withHeaders(array(
'Content-Type' => 'application/octet-stream',
'Content-disposition' => 'attachment; filename='.$download->name
))
// set file contents จากคอลัมน์ text ของฐานข้อมูล
->withContent($download->text)
// create download file
->send();
}
}
ไฟล์สุดท้ายที่เกี่ยวข้องคือ Model สำหรับอ่านข้อมูลจากฐานข้อมุล Index\Download\Model หรือไฟล์ modules/index/models/download.php
<?php
/**
* @filesource modules/index/models/download.php
* @link http://www.kotchasan.com/
* @copyright 2016 Goragod.com
* @license http://www.kotchasan.com/license/
*/
namespace Index\Download;
/**
* โมเดลสำหรับใช้งานร่วมกับฐานข้อมูล
*
* @author Goragod Wiriya <admin@goragod.com>
*
* @since 1.0
*/
class Model extends \Kotchasan\Model
{
/**
* เมธอดอ่านข้อมูลที่ต้องการดาวน์โหลดจากฐานข้อมูล
*
* @param int $id
* @return object|bool คืนค่า object ของข้อมูล ไม่พบคืนค่า false
*/
public static function get($id)
{
// create Model
$model = new static;
// SELECT * FROM `download` WHERE `id`=$id LIMIT 1
return $model->db()->first($model->getTableName('download'), $id);
}
}
สำหรับโครงสร้างของฐานข้อมูล download ตามตัวอย่างนี้จะเก็บข้อมูลประมาณนี้
`id` (INT) | `text` (TEXT) | `name` (VARCHAR) |
---|---|---|
1 | ข้อมูลในไฟล์ text | text.txt |