Tag Archive คอนฟิก

php: xdebug

การเขียน unit testing หรือทำ uat โปรแกรมที่เขียนว่ามีข้อบกพร่องบ้างหรือเปล่า การ debug ใน php จะนิยมใช้ XDEBUG EXTENSION FOR PHP การติดตั้ง xdebug ใน xampp ไม่ยากเลย (ง่ายกว่าใน docker ตั้งเยอะ) ผมเคยเขียนการติดตั้งไว้ใน ตรวจสอบโค้ดและวัดความเร็ว PHP ด้วย xdebug แต่ไม่ได้อธิบายขั้นตอนอย่างละเอียดเอาไว้ ครั้งนี้จะเขียนวิธีอย่างละเอียด

การติดตั้ง xdebug

  1. download extension มาจาก XDEBUG EXTENSION FOR PHP | DOWNLOADS
    แต่ถ้าไม่แน่ใจ ทางผู้พัฒนาได้ทำ Tailored Installation Instructions ไว้ให้ แค่ copy หน้า phpinfo ของเว็บที่เราใช้มาวางใน textarea แล้วกด Analyse my phpinfo() output ก็จะได้ version และ config มาแล้ว
  2. นำไฟล์ .dll ไปไว้ใน php’s Extensions directory: เช่น C:\xampp\php\ext
  3. เปิดไฟล์ php’s Configuration File: เช่น C:\xampp\php\php.ini เพิ่มคอนฟิก
    [Xdebug]
    xdebug.profiler_append = 1
    xdebug.profiler_enable = 0
    xdebug.profiler_enable_trigger = 0
    xdebug.profiler_output_dir = "C:\xampp\tmp"
    xdebug.profiler_output_name = cachegrind.out.%t.%p
    xdebug.remote_enable = true
    xdebug.remote_handler = "dbgp"
    xdebug.remote_host = "localhost"
    xdebug.remote_port = 9000
    xdebug.trace_output_dir = "C:\xampp\tmp"
    zend_extension = "C:\xampp\php\ext\php_xdebug-2.5.5-7.1-vc14.dll"

    ด้านล่างของไฟล์

  4. เปิดและปิด Apache ใหม่อีกครั้ง

เปิดหน้า phpinfo อีกครั้ง ลองค้นหาคำว่า xdebug อีกครั้ง ถ้าเจอแปลว่าการติดตั้งเสร็จแล้ว

ติดตั้ง imagick ImageMagick ใน windows (xampp)

การติดตั้ง imagick (ImageMagick) มันจะมีขั้นตอนพิเศษคือ copy .dll นอกจาก php_imagick.dll ใส่ไว้ใน apache\bin และต้องเซ็ต ENVIRONMENT PATH ด้วย

ขั้นตอนการติดตั้งแบบละเอียด

  1. เปิด phpinfo ดู PHP Version ของ server ที่ต้องการจะติดตั้ง
  2. เปิด PECL: imagick download สังเกต สัญลักษณ์ windows คลิกไปจะบอกว่า version นี้สามารถใช้กับ php version ไหนได้บ้าง ลองไล่จาก version ใหม่ล่าสุดลงมาของใหม่ยังไงก็ดีกว่าของเก่าๆ จากนั้นเลือกไฟล์จากข้อมูลใน phpinfo
    Thread Safety
    disabled
    แทนด้วย NTS
    enabled
    แทนด้วย TS
    Architecture
    เป็น x64 หรือ x86

    เช่น 7.1 Thread Safe (TS) x64 คือ php version = 7.1 Thread Safety = enable Architecture = x64 คลิกโหลดมาจะได้ไฟล์ php_imagick-3.4.3-7.1-ts-vc14-x86.zip

  3. แตกไฟล์ที่โหลดมาให้ php_imagick.dll ไปที่ folder extension_dir ใน phpinfo (เช่น C:\xampp\php\ext)
  4. แตกไฟล์นามสกุล .dll ที่เหลือไปที่ apache/bin (เช่น C:/xampp/apache/bin)
  5. เปิดไฟล์ php.ini ขึ้นมา โดยดูจาก Loaded Configuration File ใน phpinfo (เช่น C:\xampp\php\php.ini) เพิ่ม
    ...
    extension=php_imagick.dll
    ...
  6. โหลดตัวโปรแกรม ImageMagick มาจาก Windows Binary Release เลือก version ที่ต้องการโดย
    Q
    คือ bits-per-pixel มีให้เลือก 8 กับ 16 ยิ่งเยอะภาพจะยิ่งชัดแต่ตัวไฟล์จะใหญ่กว่า
    x86 / x64
    คือ Architecture ของ windows ที่ใช้อยู่ เลือกให้ตรงกับเครื่อง server ถ้าไม่ได้ใช้ Windows 32-bit ใช้ x64 จะดีกว่า

    โหลดแล้วติดตั้งตามปกติ อย่าลืมติ๊ก Add application directory to your system path

  7. restart apache จากนั้น ค้นหา imagick ถ้าขึ้นแสดงว่าติดตั้งสำเร็จ และดู PATH จะมี folder ที่ติดตั้ง Magick เช่น C:\Program Files\ImageMagick-7.0.5-Q16; Image ไว้ (ถ้าไม่มีลอง restart windows ดู)

zopim: Options Mobile Vertical Offset

เพราะว่างานที่ทำในส่วนของ mobile จะมี bar แสดงเพิ่มขึ้นมาด้านล่างต่างจาก desktop แต่เจ้า zopim มันจะอยู่ล่างสุดเหมือนกัน ทำให้ซ้อนกันดูไม่สวยและใช้งานได้ยากลำบาก จึงตั้งใจที่จะย้าย zopim ขึ้นไปอีก ที่สำคัญคือ จะเป็นตัวอย่างให้เรา config options ให้กับ zopim ที่มันใช้วิธีต่างจากเจ้าอื่นๆมาก

ถ้าต้องการให้ zopim ขึ้นมาจากล่างสุดในแนวตั้งสามารถใช้คำสั่ง

$zopim.livechat.button.setOffsetVerticalMobile( ความสูง );

ตัวอย่าง code

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>zopim: Mobile Vertical Offet</title>
<link href="vendor/twbs/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet" type="text/css">
<style>
#footerMobile {
	background: #c00000;
	bottom: 0;
	height: 200px;
	position: fixed;
	width: 100%;
}
</style>
</head>
<body>
<div class="visible-sm visible-xs" id="footerMobile">
  <h1>You're probably not using a phone.</h1>
</div>
<script>

<!--Start of Zendesk Chat Script-->
window.$zopim||(function(d,s){var z=$zopim=function(c){z._.push(c)},$=z.s=
d.createElement(s),e=d.getElementsByTagName(s)[0];z.set=function(o){z.set.
_.push(o)};z._=[];z.set._=[];$.async=!0;$.setAttribute("charset","utf-8");
$.src="https://v2.zopim.com/?4fGXBEtxEXbPQBeWWwFwSqG8wmMQ6pAT";z.t=+new Date;$.
type="text/javascript";e.parentNode.insertBefore($,e)})(document,"script");
<!--End of Zendesk Chat Script-->

<!--Start of Zendesk Chat Script Custom Options -->
$zopim(function() {
	$zopim.livechat.button.setOffsetVerticalMobile(60);
});
<!--End of Zendesk Chat Script Custom Options-->

</script>
</body>
</html>

อ่านเพิ่มเติม$zopim.livechat.button

CodeIgniter: Composer

โดยปกติ composer จะเก็บไฟล์โดยสร้าง folder vendor ใน folder เดียวกับไฟล์ composer.json

ใน codeinigter ว่างไฟล์ composer.json ไว้นอกสุดแต่ในไฟล์ \application\config\config.php กลับเขียน

/*
  |--------------------------------------------------------------------------
  | Composer auto-loading
  |--------------------------------------------------------------------------
  |
  | Enabling this setting will tell CodeIgniter to look for a Composer
  | package auto-loader script in application/vendor/autoload.php.
  |
  |    $config['composer_autoload'] = TRUE;
  |
  | Or if you have your vendor/ directory located somewhere else, you
  | can opt to set a specific path as well:
  |
  |    $config['composer_autoload'] = '/path/to/vendor/autoload.php';
  |
  | For more information about Composer, please visit http://getcomposer.org/
  |
  | Note: This will NOT disable or override the CodeIgniter-specific
  |    autoloading (application/config/autoload.php)
  */

คือ พี่แกให้เก็บไฟล์ไว้ที่ application/vendor ไม่ใช่ /vendor

ปัญหานี้แก้ได้โดยเพิ่ม

{
  ...
  "config": {
  "vendor-dir": "application/vendor"
  },
  ...
}

หลังจากนั้นก็ไปเปิด auto-load โดยเปลี่ยน

$config['composer_autoload'] = false;

เป็น

$config['composer_autoload'] = true;

แล้วทดลองใช้ command

composer update

จะเห็นว่าไฟล์เข้าไปที่ application/vendor แล้ว

ถ้า composer โหลดไฟล์มาไม่ได้เพราะติด proxy อ่าน

อ่านเพิ่มเติม

CodeIgniter: แยก config

การดึงค่าคอนฟิกของโค้ทอินิกเตอร์สามารถทำได้โดย ใช้คำสั่ง

$this->config->item(' ตัวแปร ');

โดยจะดึงมาจากไฟล์ \application\config\config.php เป็นหลัก แต่ถ้าต้องการแยก config ออกมาเป็นส่วนๆ เพื่อความง่ายในการจัดการ สามารถสร้างไฟล์ ขึ้นมาใน application\config ได้

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

$config['caching']['adapter'] = 'memcached';
$config['caching']['backup']  = 'file';

จากนั้นเราจะอ่าน configuration เข้ามาในระบบของเราสามารถทำได้ 2 วิธีคือ

  1. เป็นค่าที่เราต้องใช้บ่อยๆแทบทุกหน้า เพิ่มเข้าไปใน Auto-loading เปิดไฟล์ \application\config\autoload.php เพิ่มชื่อไฟล์ลงไปใน
    $autoload['config']

    เช่น

    ...
    $autoload['config'] = ['caching'];
    ...
  2. ถ้าต้องการใช้เฉพาะบางไฟล์ ทำได้โดยการ load ใน controller ที่ต้องการโดยใช้คำสั่ง
    ...
    $this->config->load('caching');
    ...

ผมใช้หน้าแรกแสดงตัวอย่างการใช้

<?php
defined('BASEPATH') or exit('No direct script access allowed');

class Welcome extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();

        echo 'charset = ' . $this->config->item('charset');

        //$this->config->load('caching');

        echo '<pre>', print_r($this->config->item('caching'), true), '</pre>';
    }
...

อ่านเพิ่มเติม

config codeigniter by environments

ที่ทำงานมี process ในการพัฒนา development > test > production โดยแต่ละ server จะมี config และ database แยกออกจากกันเพื่อความปลอดภัย โดย codeigniter สามารถแยก config ได้โดยการเปลี่ยน Environments ซึ่งโดยปกติจะมี 3 สภาพแวดล้อมคือ development, production, testing และแล้วแต่ท่านจะตั้ง

การทำระบบ config สามารถทำได้โดย

  1. ได้โดยเปิดไฟล์ \.htaccess เพิ่ม
    ...
    SetEnv CI_ENV development
    ...

    เข้าไป หรือเข้าไปแก้ไฟล์ \index.php แก้บรรทัด

    define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development');

    เป็น

    define('ENVIRONMENT', 'development');
  2. ไปที่ \application\config สร้าง folder ไว้เก็บ configuration ตามชื่อ Environments เช่น \application\config\development, \application\config\production, \application\config\testing
  3. copy config ไฟล์ มาจาก \application\config จากนั้นก็ลบข้อมูลเดิมออกแล้วใส่เฉพาะส่วนที่แตกต่างกันเช่น \application\config\development\constants.php
    <?php
    defined('BASEPATH') or exit('No direct script access allowed');
    
    define('TITLE', 'development');
    

    ทำแบบเดียวกันกับไฟล์อื่นๆ ถ้ามี config ที่ต่างกัน เช่น \application\config\development\database.php

  4. ทดสอบโดยเปิดไฟล์ \application\views\welcome_message.php แก้เป็น
    <?php
    defined('BASEPATH') or exit('No direct script access allowed');
    ?><!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="utf-8">
    	<title><?=TITLE;?></title>
    
    	<style type="text/css">
    
    	::selection { background-color: #E13300; color: white; }
    	::-moz-selection { background-color: #E13300; color: white; }
    
    	body {
    		background-color: #fff;
    		margin: 40px;
    		font: 13px/20px normal Helvetica, Arial, sans-serif;
    		color: #4F5155;
    	}
    
    	a {
    		color: #003399;
    		background-color: transparent;
    		font-weight: normal;
    	}
    
    	h1 {
    		color: #444;
    		background-color: transparent;
    		border-bottom: 1px solid #D0D0D0;
    		font-size: 19px;
    		font-weight: normal;
    		margin: 0 0 14px 0;
    		padding: 14px 15px 10px 15px;
    	}
    
    	code {
    		font-family: Consolas, Monaco, Courier New, Courier, monospace;
    		font-size: 12px;
    		background-color: #f9f9f9;
    		border: 1px solid #D0D0D0;
    		color: #002166;
    		display: block;
    		margin: 14px 0 14px 0;
    		padding: 12px 10px 12px 10px;
    	}
    
    	#body {
    		margin: 0 15px 0 15px;
    	}
    
    	p.footer {
    		text-align: right;
    		font-size: 11px;
    		border-top: 1px solid #D0D0D0;
    		line-height: 32px;
    		padding: 0 10px 0 10px;
    		margin: 20px 0 0 0;
    	}
    
    	#container {
    		margin: 10px;
    		border: 1px solid #D0D0D0;
    		box-shadow: 0 0 8px #D0D0D0;
    	}
    	</style>
    </head>
    <body>
    
    <div id="container">
    	<h1>Welcome to CodeIgniter!</h1>
    
    	<div id="body">
    <?php
    echo '<br>ENVIRONMENT = ' . ENVIRONMENT;
    echo '<br>FILE_READ_MODE = ' . FILE_READ_MODE;
    echo '<br>title = ' . TITLE;
    ?>
    	</div>
    
    	<p class="footer">Page rendered in <strong>{elapsed_time}</strong> seconds. <?php echo (ENVIRONMENT === 'development') ? 'CodeIgniter Version <strong>' . CI_VERSION . '</strong>' : ''; ?></p>
    </div>
    
    </body>
    </html>
  5. เปิดหน้าแรกและสังเกตผลลัพธ์

ค่าในไฟล์ config จะถูกเพิ่มจากของเดิมโดยเลือกมาจากไฟล์ใน folder ที่ชื่อเดียวกับ environments ไม่ใช่แทนที่ของเดิมสังเกตได้จากค่า FILE_READ_MODE ที่ไม่มีในไฟล์ \application\config\development\constants.php ที่เราแยกออกมา

ติดตั้ง laravel ลั๊ลลาเวล

  1. ก่อนอื่นถ้าไม่มี composer ก็ลงมันก่อน
  2. จากนั้น update เจ้า composer ซะก่อนตามธรรมเนียม รีสตาร์ต เพื่อป้องกันปัญหาเปิด command ออกมาพิมพ์
    composer self-update
    
  3. เพิ่มตัวติดตั้ง laravel ก่อนด้วยคำสั่ง
    composer global require "laravel/installer"
  4. ไปที่ที่จะเก็บงานก่อน
    D:
    cd D:\xampp\htdocs
    
  5. สร้างโปรเจคใหม่ชื่อ laravel52
    composer create-project --prefer-dist laravel/laravel laravel52
    

    ตอนนี้ไฟล์จะถูกสร้างขึ้นมาใน D:\xampp\htdocs\laravel52 เป็นอันสร้างโครงสร้างสำเร็จ

  6. เชื่อมต่อ database โดยไปที่ file \config\database.php แก้
    'default' => env('DB_CONNECTION', 'mysql'),
    

    เป็นชนิดฐานข้อมูลที่ใช้ได้คือ

    • MySQL
    • Postgres
    • SQLite
    • SQL Server

    หลังจากนั้นก็ไปแก้ ในอาเรย์ connections เฉพาะ index ที่ตรงกับค่าของ DB_CONNECTION

  7. สร้างตารางใหม่โดย command
    cd laravel52
    php artisan migrate
    

    เข้าไปดูใน databse ไม่มีอะไรเกิดขึ้น งง ซิครับ

  8. เป็นเพราะ laravel ใช้ config ในไฟล์ .env แก้
    DB_CONNECTION=mysql
    DB_HOST=127.0.0.1
    DB_PORT=3306
    DB_DATABASE=homestead
    DB_USERNAME=homestead
    DB_PASSWORD=secret
    

    และ command

    php artisan migrate
    

    อีกครั้ง ถ้า config ถูกต้องจะมีตาราง migrations, password_resets, users ขึ้นมา

การติดตั้งเบื่้อต้นสำเร็จแล้ว

แก้เน็ตค้างกับเราเตอร์ 3 เสา

เพราะว่าที่บ้านใช้เน็ตแบบ 24/7 จริงๆ ถึงจะอยู่แค่คนเดียว มีแค่ nas กับมือถือที่ต่อเน็ตอยู่ตลอดเวลา กับ tv ที่ไว้ดูหนังออนไลน์เวลาพัก แต่เราเตอร์ได้มาจากทรูมันค้างตลอดศก วัน สองวันต้องมากด restart มันทีหนึ่ง งานไม่ได้หนักแต่มันเสียอารมณ์มากเลย ยิ่งถ้ากำลังดูหนังจาก youtube ในทีวีอยู่ เคยไปขอตัวใหม่มาใช้ ไม่นานก็เป็นอีก

เดินๆ งานคอมอยู่เห็นขายเยอะเลย หลายรุ่น ตัวเจ็บๆ ก็เยอะ asus ก็น่าสนหลายตัวแต่แพง ซื้อไม่ลง เดินดูเรื่อยๆ เห็น D-link dir809 Wireless AC750 Dual Band Router แปะอยู่ตัวโตๆ 900 เอง แถมดูโหงวเฮ้งมี 3 เสา ไกล้ๆ เขียน dual band 2.4 GHz. กับ 5 GHz. ไม่ใช่ repeater ความโลภเข้ามาทันที ถามดูประกันตลอดอายุ ก็จัดซิครับ

พอมาถึงบ้านจักการ config เข้าไปที่ http://192.168.0.1 user admin pass ไม่ต้องใส่ เข้าไปแก้ ตามที่ router ตัวเก่าก็แล้ว ใช้ไม่ได้ โทรถามทรูขอ pass ใหม่ ก็ใช้ไม่ได้ โทรไปโทรมา เค้าเช็คจากชื่อรุ่นว่ามันไม่มี modem adsl ในตัว T-T พลาดละ มิน่าถึงถูกตัวอื่น 3000 ถึงหมื่นต้นๆทั้งนั้น

โดยสรุปคือ ต้องใช้ router ตัวเดิมต่อเน็ต แล้วต่อสายแลนเข้าตัวนี้จ่ายเน็ตแทน อนาถยิ่งนัก

  1. ต่อสานแลนจาก router เดิมที่ใช้ออกเน็ต
  2. config โดนเปิดเน็ตเข้าไปที่ http://192.168.0.1 user กรอกadmin pass ไม่ต้องใส่
  3. กด easy setup ใส่ ชื่อ wifi ใหม่ในช่อง Wireless Network Name (SSID) และใส่ password wifi ในช่อง Wireless Password ทั้งสองตัวแต่ Wireless Network Name (SSID) ต้องใช้คนละชื่อกัน
  4. เปลี่ยน password ตัวเร้าเตอร์ใหม่ กันมือเลวมาขโมยเล่น ใน tools ใต้ ADMINISTRATOR ใส่ password เข้าไปใหม่
  5. เข้าไปปิด การจ่าย wifi ของเราเตอร์ตัวเดิม งานมันจะได้ไม่หนัก ไม่น้อยใจฆ่าตัวตายบ่อยๆ
  6. จากที่ใช้มาเดือนกว่าๆ สัญญานนิ่งมาก ไกล ไม่ค้างเลย เพิ่งมาค้างตอนมีคนมาช่วยใช้อีก 3 คนแต่สั่ง restart ครั้งเดียวก็ไม่เป็นอีก จากราคาที่จ่ายไปก็ถือว่าคุ้มอยู่

Yii2 Fixed jQuery version

งานที่ทำใช้ jQuery plugin ที่จำกัดอยู่ที่ไม่เกินเวอร์ชั่น 2.1.3 เท่านั้น แต่ทุกครั้งที่ update yii โดยใช้คำสั่ง composer update มันจะเปลี่ยนเจคิวรี่เป็นตัว 2.1.4 ทุกครั้ง ต้องมาเปลี่ยนทุกครั้งเลย แก้ได้โดยไปสั่งใช้คอมโพสเซอร์โหลดตัวที่ต้องการมา

  1. แก้ composer.json เพิ่ม
        "require": {
    ...
            "components/jquery": "2.1.3"
    ...
        },
    
  2. ไปใช้ command พิมพ์ composer update มันจะโหลดเจคิวรี่มาเก็บไว้ที่ \vendor\components\jquery
  3. สั่งให้ยีสองโหลด jquery ตัวนี้มาใช้โดยกำหนด
    ...
        'components'     => [
    ...
            'assetManager' => [
                'bundles' => [
                    'yii\web\JqueryAsset' => [
                        'baseUrl' => '@web',
                        'js' => [
                            '../../vendor/components/jquery/jquery.min.js',
                        ],
                        'sourcePath' => null
                    ],
                ],
            ],
    ...
    

yii จะเปลี่ยน link จาก

<script src="/YiiAdvanced/frontend/web/assets/41df07c8/jquery.js"></script>

เป็น

<script src="/YiiAdvanced/frontend/web/../../vendor/components/jquery/jquery.min.js"></script>

หลังจากนี้ถึงจะอัพเดตกี่ครั้ง jquery ก็จะยังเป็นตัวเดิมอยู่

เชื่อมต่อพีเฮชพีกับ sql server (sqlsrv)

ถึง mysql จะฟรี ดี รับงานหนักๆ ได้ แต่องค์กรหรือบริษัทใหญ่ๆจะเชื่อถือ microsoft sql server มากกว่าคู่บารมี คู่แท้ php & mysql วันนี้เราจะมาทำให้ php connect กับเอสคิวแอล เซิร์ฟเวอร์กัน โดยใช้ driver ตัวใหม่ sqlsrv แทน mssql ที่โดนยกเลิกไป

  1. เช็ค version ของ php ก่อนโดย run command php -v
  2. download Microsoft Drivers for PHP for SQL Server จากเว็บ http://www.microsoft.com โดยตรง เลือก version ให้ตรงกับ php ที่เราใช้
  3. เปิด ตัว driver ขึ้นมา
    • กด yes ยอมรับข้อตกลงซะ คุณจะได้ไปต่อ
    • เลือกโพลเดอร์ที่จะแตกไฟล์ชั่วคราว ยังไม่ใช่ที่ๆ จะติดตั้งโปรแกรมจริง ๆ
    • หลังจาก สร้างไฟล์ใน folder ที่เราเลือกเสร็จแล้วจะมี alert ขึ้นมา แล้วมันจะปิดตัวเองไม่ต้องตกใจ
  4. เข้าไปดูโฟลเดอร์ที่เลือกไว้ จะเห็นไฟล์ เยอะแยะเลย หาไฟล์ที่เลขตรงกับเวอร์ชั่นเดียวกับ php ของเรา เช่น ใช้ php 5.6 ก็เลือกไฟล์ _56 จะเห็นว่ามี 4 ไฟล์ จะสังเกตุว่า มี _nts และ _ts ความหมายก็คือ
    _nts
    ย่อมาจาก Non Thread Safe สำหรับ php ที่ลงแบบ CGI binary
    _ts
    ย่อมาจาก Thread Safe สำหรับ php ที่ลงแบบ Apache module ถ้าใช้ xampp จะใช้ตัวนี้
  5. เปิดโฟลเดอร์เอ็กเท็นชั่นของพีเอชพี xampp จะอยู่ที่ C:\xampp\php\ext คัดลอกไฟล์ที่เราเลือกมา (แค่ 2 ไฟล์) มาวางเพิ่มเข้าไป
  6. เปิดไฟล์ php.ini xampp อยู่ที่ C:\xampp\php\php.ini ค้นหาบรรทัดที่มี extension=
    แล้วเพิ่ม config ไปตามตัวอย่าง

    extension=php_sqlsrv_56_ts.dll
    extension=php_pdo_sqlsrv_56_ts.dll
    
  7. ถ้าลง sql server ในเครื่องเดียวกับ apache ให้ไปปิด service “SQL Server Reporting Services” ก่อน และเปลี่ยน startup type เป็น manual ก่อนเพราะมันใช้ port 80 เหมือนเว็บเซิร์ฟเวอร์ เป็นสาเหตุที่ทำให้ apache start service ไม่ได้
  8. restart apache ไปดู phpinfo ถ้ามี pdo_sqlsrv และ sqlsrv ขึ้นมาก็แสดงว่าลงเอสคิวแอล เซิร์ฟเวอร์ไดร์เวอร์สำเร็จ