Tag Archive configuration

Byphunsanit

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 อีกครั้ง ถ้าเจอแปลว่าการติดตั้งเสร็จแล้ว

Byphunsanit

ติดตั้ง 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 ดู)
Byphunsanit

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

Byphunsanit

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 อ่าน

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

Byphunsanit

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>';
    }
...

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