Tag Archive config

apache: port

สาเหตุที่ต้องเปลี่ยน port apache จากมาตราฐาน 80, 443 เพราะว่า server ลง iis เอาไว้และต้องการใช้งานทั้งคู่ไปพร้อมๆ กันเลย แต่ที่ลงไว้มันจะชนกันใช้พร้อมกันไม่ได้

วิธีเปลียนก็ไม่ยากแค่หา config ที่มันเขียนเลข port อยู่แล้วใส่เลข port อื่นที่ไม่มีใครใช้ firewall ไม่ block เข้าไปแทน อย่างจะเปลี่ยนจากมาตราฐาน http port 80 เป็น 84 และ https 443 เป็น 85

  1. เปิดไฟล์ C:\xampp\apache\conf\httpd.conf แล้วแก้บรรทัด
    1. Listen 80 แก้เป็น
      Listen 84
    2. ServerName localhost:80 แก้เป็น
      ServerName localhost:84
  2. เปิดไฟล์ C:\xampp\apache\conf\extra\httpd-ssl.conf แล้วแก้บรรทัด
    1. Listen 443 แก้เป็น
      Listen 85
    2. <VirtualHost _default_:443> แก้เป็น
      <VirtualHost _default_:85>
    3. ServerName www.example.com:443 แก้เป็น
      ServerName www.example.com:85
  3. restart apache
  4. ทดสอบโดยการเปิดเว็บเช่น http://localhost:84 และ https://localhost:85

จริง ๆ แล้วมีผู้ได้กรุณาเขียนวิธีเปลี่ยน apache port ไว้ละเอียดมาก How to change XAMPP apache server port? และดู port ที่ว่างได้จากกิสต์ Well-known ports

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

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 ที่เราแยกออกมา

สร้าง muti site ใน laravel

ต้องการสร้างเว็บรองรับหลายๆ บริษัท โดยที่ใช้ code ชุดเดียวกันและให้ฝ่ายที่ดูแลสามารถเพิ่มข้อมูลและเว็บไซต์ ได้เองโดยที่ไม่ต้องใช้ความรู้ทางด้านการเขียนโปรแกรมเลย

เจอ package ชื่อ delatbabel/site-config แต่เพราะว่าเค้ารองรับแค่ laravel 5.1 เลยต้องสร้าง project ใหม่ตั้งแต่ต้นเลย

  1. พิมพ์ command
    composer create-project laravel/laravel sites "5.1.*"
  2. แก้ config ในไฟล์ .env ให้ติดต่อ databse ได้
    ...
        DB_CONNECTION=mysql
        DB_HOST=127.0.0.1
        DB_DATABASE=sites
        DB_USERNAME=root
        DB_PASSWORD=xxx
    ...
  3. เพิ่ม package ในไฟล์ composer.json
    ...
        "require": {
        "php": ">=5.5.9",
        "laravel/framework": "5.1.*",
    ...
        "delatbabel/site-config": "~1.0"
        },
    ...
  4. run command
        composer update
        
  5. เปิดไฟล์ config\app.php เพิ่ม
    ...
        'providers' => [
    ...
        Delatbabel\SiteConfig\SiteConfigServiceProvider::class,
    ...
        ],
    ...
        'aliases' => [
    
        'SiteConfigSaver'   => Delatbabel\SiteConfig\Facades\SiteConfigSaver::class,
    
        ],
    ...
  6. เพิ่ม Boostrap the Config Loader ใน 2 ไฟล์ คือ \app\Console\Kernel.php และ \app\Http\Kernel.php ต้องครบ 2 ไฟล์นะครับ ผมใส่ไม่ครบงงอยู่นานมากทำไม่มันมันใช้ไม่ได้
    ...
        protected function bootstrappers()
        {
            $bootstrappers = parent::bootstrappers();
    
            // Add the SiteConfig bootstrapper to the end.
            $bootstrappers[] = 'Delatbabel\SiteConfig\Bootstrap\LoadConfiguration';
    
            return $bootstrappers;
        }
    ...
  7. Incorporate and Run the Migrations โดย run command
        php artisan vendor:publish --tag=migrations --force
        php artisan migrate

การติดตั้งเสร็จแล้ว ที่นี้จะทดลองใช้งาน

  1. สร้างไฟล์ \app\Http\Controllers\HomeController.php
      <?php
    
    namespace App\Http\Controllers;
    
    use App\User;
    use App\Http\Controllers\Controller;
    
    class HomeController extends Controller {
    
        /**
         * Show the profile for the given user.
         */
        public function index()
        {
    
            return 'title = '.config('config.title');
    
            $config = config()->all();
    
            return '<pre>'. print_r($config ,true).'</pre>';
        }
    
    }
    
  2. เพิ่ม route ในไฟล์ \app\Http\routes.php
    ...
    Route::get('/', 'HomeController@index');
    ...
    
  3. ทดลอง set domain ขึ้นมาเทส เปิดไฟล์ C:\Windows\System32\drivers\etc\hosts
    ...
    127.0.0.1	phunsanit.com
    127.0.0.1	pitt.com
    ...
    
  4. เพิ่มข้อมูลทกสอบโดยใช้
    INSERT INTO `configs` (`id`, `website_id`, `environment`, `group`, `key`, `value`, `type`, `created_at`, `updated_at`) VALUES
    (1, 1, NULL, 'config', 'title', 'localhost', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00'),
    (2, 1, 'prod', 'config', 'title', 'localhost ON production', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00'),
    (3, 1, 'test', 'config', 'title', 'localhost IN TEST SERVER', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00'),
    (4, 2, NULL, 'config', 'title', 'pitt.com', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00'),
    (5, 2, 'prod', 'config', 'title', 'pitt.com ON production', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00'),
    (6, 2, 'test', 'config', 'title', 'pitt.com IN TEST SERVER', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00');
    
    INSERT INTO `websites` (`id`, `name`, `http_host`, `environment`, `created_by`, `updated_by`, `created_at`, `updated_at`, `deleted_at`) VALUES
    (1, 'prototype', 'localhost', 'test', NULL, NULL, '0000-00-00 00:00:00', '0000-00-00 00:00:00', NULL),
    (2, 'prototype', 'pitt.com', 'test', NULL, NULL, '0000-00-00 00:00:00', '0000-00-00 00:00:00', NULL);
    
  5. ทดสอบโดยเปิด http://localhost/mcms/public/ และ http://pitt.com/mcms/public/

นำไปดัดแปลงให้เหมาะกับงานที่ทำครับ

ติดตั้ง 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 ขึ้นมา

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