INSERT IGNORE in Laravel eloquent

Laravel ไม่ทำ insert ignore ไว้ให้ใช้ เพราะว่ามันเป็นคำสั่ง SQL ที่ไม่เป็นสากลโลก DB engine หลายๆ ตัว ไม่มีให้ใช้ แต่ถ้าเราใช้ MySQL แล้วอยากจะใช้ insert ignore ก็เอา trait ตัวนี้มาใช้โลด

ติดตั้งใส่ project

composer require jdavidbakr/replaceable-model

แล้วไปเรียกใน Model ที่เราต้องการเพิ่มความสามารถให้มัน

<?php
class Example extends Model
{
    // ...
    
    use \jdavidbakr\ReplaceableModel\ReplaceableModel;
    
    // ...
}

ทีนี้ก็เรียกใช้ตามอัธยาศัย

<?php
\App\Example::insertIgnore($inserts);

.

PhpStorm fully-classified class name from autocomplete

ค่าเริ่มต้นของ phpStorm เวลา enter ชื่อคลาสออกมาจาก autocomplete มันจะไป import class ไว้ที่ด้านบน ( use … ) แล้วกรอกเฉพาะชื่อคลาสให้เราตรงที่กำลังเขียนโค๊ด. แต่ผมชอบที่จะเรียกใช้ fully-classified class name มากกว่า เพราะว่าผมไม่ได้ตั้งชื่อคลาสแบบสื่อความหมายได้ด้วยตัวเอง จะต้องเห็น namespace ด้วย ถึงจะรู้ว่ามันคืออะไร เช่น \App\Models\Orders\Book กับ \App\Models\Products\Book. (ปัญหานี้ผมเดาว่าน่าจะเป็นที่ผมตั้งชื่อคลาสไม่ถูกหลักละมั้ง ._.”). นอกจากสาเหตุที่กล่าวไปแล้ว ยังมีอีกอย่าง คือ เวลาที่ผมไม่ได้ออกแบบล่วงหน้าก่อนทำงาน ผมมักจะต้องมีเหตุให้ย้าย code ไปมาระหว่างไฟล์ ซึ่งปัญหาที่เกิด คือ เวลาที่ย้ายตัว code ไป ตัว import class ด้านบนมันไม่ได้เปลี่ยนตามไปด้วย ดังนั้นการใช้ fully-classified class name ก็ช่วยให้ย้าย code ไปมาได้เลย ไม่ต้องนั่งเช็คตรง import ด้านบน.

ซึ่ง PhpStorm เปิดให้เราปรับได้ว่าจะใช้ fully-classified class name ใน Settings Continue reading “PhpStorm fully-classified class name from autocomplete”

สร้าง shortcut ให้รันคำสั่งใน git-bash.exe

TL;DR

"C:\Program Files\Git\git-bash.exe" --cd="D:\projects\larex" -c "php artisan serve"

สำหรับคนขี้เกียจ… แทนที่จะต้องเปิด git-bash ขึ้นมาแล้วสั่งรันคำสั่งต่างๆ อะไรที่ต้องใช้บ่อยๆ เราก็สร้างไว้เป็น shortcut เลยเพื่อความสะดวก จะได้ไม่ต้องเปิดมาพิมพ์ทุกครั้ง. ที่จริงคำสั่งที่ไม่ค่อยได้ใช้บ่อยๆ (แต่จะมีโอกาสต้องใช้ซ้ำ) จะสร้างไว้เป็น shortcut ก็สะดวกในแง่ที่ไม่ต้องจำคำสั่ง.

PHP 7 ZTS on CentOS (PowerDNS as RBL)

ล่าสุด setup เครื่องนึง สำหรับทำหน้าที่เช็ค RBL (Realtime Blackhole List) เพื่อจะให้อีเมลเซิร์ฟเวอร์ทุกเครื่องมาเช็คผ่านตรงนี้. สาเหตุจริงๆ ที่ต้องทำแบบนี้เป็นเพราะว่า IP DNS ของ IDC บางที่โดน RBL บางที่บล็อคไม่ให้ใช้งาน ก็เลยตั้งใจมาเปิดเครื่องนึงสำหรับทำหน้าที่นี้โดยเฉพาะแล้วกัน โดยวางไว้ที่ IDC ที่ไม่โดน RBL บล็อค จะได้เช็คได้ครบทุกที่ แล้วเซิร์ฟเวอร์ที่อื่นก็มาวานให้เจ้าตัวนี้มันเป็นผู้ตรวจสอบให้.

ตัวเซิร์ฟเวอร์ติดตั้งเป็น PowerDNS + Pipe backend โดยเขียน php script เพื่อไปเช็คกับ RBL แต่ละที่. ตอนแรกเขียนเป็น for loop ง่ายๆ ในการไล่เช็คกับ RBL แต่ละที่ แต่ปัญหา คือ มันทำให้ response time ของเรามันนานเกินไป. เพื่อที่จะแก้ปัญหานี้ เราเลยลองหาวิธีเขียน pararell บน PHP เพื่อให้มันเช็ค RBL ทุกๆ ที่ไปพร้อมๆ กันเลย  เป็นครั้งแรกที่ใช้ PHP แบบนี้ ก็เลยจะบันทึกเก็บไว้หน่อยแล้วกัน. Continue reading “PHP 7 ZTS on CentOS (PowerDNS as RBL)”

Replace static-path symbolic link to reletive-path

เคสปัญหา megento มันสร้าง symbolic link พวก static file ไว้ใน pub/ แต่มันสร้างแบบ static-path ลากมาตั้งแต่ /home/ เลย เลยทำให้มันปัญหากับสิทธิ์เว็บเซิร์ฟเวอร์ในการเข้าถึงไฟล์ เก็บคำสั่งไว้คร่าวๆ ก่อนแล้วกัน

#!/bin/sh

find -type l > links

while read i; do
 target=$(readlink "${i}");
 if [[ $target == /home/* ]]; then
 count=$(grep -o "/" <<< "$i" | wc -l)
 count=$(( $count - 1 ))
 prefix=$( printf "%${count}s\n" | sed "s# #../#g" );
 suffix=$( echo $target | sed 's#^.*/public_html/##' );
 newlink="${prefix}${suffix}"
 ln -sfv $newlink $i;
 fi;
done < links

 

Installing memcache on PHP 7.1

แปะเก็บไว้

CentOS 6 (prerequisite)

# install webtatic repo
rpm -Uvh https://mirror.webtatic.com/yum/el6/latest.rpm
# install memcache things
yum -y install yum-plugin-replace
yum -y install libmemcached
yum -y replace libmemcached --replace-with libmemcached10
yum -y install libmemcached10-devel.x86_64

CentOS 7 (prerequisite)

yum -y install libmemcached-devel

 Install memcached.so

yum -y install git
cd ~
rm -rf php-memcached
git clone https://github.com/php-memcached-dev/php-memcached.git
cd php-memcached
git checkout php7
phpize
./configure --disable-memcached-sasl
make
make install