<?php function DABackupWeekOfMonth ($time) { $firstDateOfMonth = date('Y-m-01', $time); $firstDayOfMonth = intval(date('N', strtotime($firstDateOfMonth))); $firstDayOfMonth %= 7; // make Sunday as 0 (7 -> 0) $date = intval(date('d', $time)); return ceil(($date + $firstDayOfMonth) / 7); }
Category: PHP
TortoiseSVN error while loading shared libraries
Error message:
$ svn C:/Program Files/TortoiseSVN/bin/svn.exe: error while loading shared libraries: libapr_tsvn.dll: cannot open shared object file: No such file or directory
Solution:
- Extract TortoiseSVN-x.x.x.xxxxx-x64-svn-x.xx.x.msi installer with 7-zip
- Move F_libapr to C:\Program Files\TortoiseSVN\bin\libapr_tsvn.dll
- Move F_libaprutil to C:\Program Files\TortoiseSVN\bin\libaprutil_tsvn.dll
Remove incomplete multibyte character from string (PHP)
<?php $cleaned = mb_convert_encoding($raw, 'UTF-8', 'UTF-8');
Gracefully stop PHP process with PCNTL
เวลาเขียน process ไรสักอย่างด้วย PHP ที่ใส่ loop ไว้เพื่อให้มันทำงานไปตลอดจนกว่าจะโดน kill เราสามารถใช้ PCNTL เพื่อให้ script PHP รู้ว่ามีคนขอ ให้ process หยุดทำงานได้แล้ว ถ้ามีงานที่ทำต่อเนื่องอยู่ยังไม่ถึง checkpoint จะได้มีโอกาสทำต่อให้เสร็จก่อน และก็ exit; ตัวเองซะ ไม่ต้องไปทำ task ต่อไป.
Continue reading “Gracefully stop PHP process with PCNTL”PHP fill PDF Form
มีโปรแกรม PDFtk ที่มันกรอกฟอร์มได้ (ความสามารถหลายอย่างเกี่ยวกับการจัดการ PDF)
ติดตั้งบน CentOS 7 มันไม่มี Official repos ก็จะเสียวๆ หน่อย — https://www.linuxglobal.com/pdftk-works-on-centos-7/
แล้วใช้ library ตัวนี้ในการเรียกใช้ PDFtk (รู้สึกว่ามันจะเรียกผ่านฟังก์ชั่น proc_open ใน php)
https://github.com/mikehaertl/php-pdftk
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);
.
PHP preg_match named back references
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
ปัญหา CURL ไป https:// บางที่แล้ว error
ถ้าเสิร์ช Google หลายๆ ที่จะบอกให้ปิด CURLOPT_SSL_VERIFYPEER ตอนเรียกใช้ curl ซึ่งจริงๆ แล้วเพื่อความปลอดภัย เราไม่ควรจะปิดการเช็คตรงนั้น
สำหรับวิธีแก้ที่ถูกต้องคือ ให้เราไปดาวน์โหลดไฟล์ cacert.pem จากเว็บนี้ http://curl.haxx.se/docs/caextract.html มา
แล้วแก้ที่ไฟล์ php.ini ลักษณะนี้
curl.cainfo="c:\php\cacert.pem" openssl.cafile="c:\php\cacert.pem"
Installing Apache 2.4, PHP 5.5 Windows 7
- สร้างโฟลเดอร์ c:/wamp/
- ดาวน์โหลดไฟล์ httpd-2.4.7-win32-VC11.zip (ถ้าอยากได้เวอร์ชั่นล่าสุดให้ดูที่เว็บนี้ http://www.apachelounge.com/download/) บทความนี้เลือกใช้ win32 เพราะว่า VC11 x86 Thread Safe ในเว็บ PHP มันยังเป็น experimental อยู่
- เอาไฟล์ของ httpd ที่โหลดในข้อก่อนหน้า มา Extract ไว้ที่พาท
c:/wamp/apache2.4_win32/ - ดาวน์โหลดไฟล์ php-5.5.7-Win32-VC11-x86.zip (ถ้าอยากได้เวอร์ชั่นล่าสุดหาดูจากที่นี่ http://windows.php.net/download/ ให้เลือกอันที่เป็น VC11 Thread Safe ส่วนถ้า x64 มันไม่ experimental แล้ว ก็น่าโหลดเอามาใช้นะ แต่ต้องเปลี่ยน httpd ให้เป็น win64 ด้วย)
- สร้างโฟลเดอร์ c:/wamp/php-5.5.7_win32/ เอาไฟล์ที่โหลดก่อนนี้มาใส่พาทนี้
- แก้ไฟล์ c:/wamp/apache2.4_win32/conf/httpd.conf
Replace: c:/Apache24/htdocs With: c:/wamp/www
- เติม code นี้เข้าไปที่ด้านล่างสุด
LoadModule php5_module "c:/wamp/php-5.5.7/php5apache2_4.dll" AddHandler application/x-httpd-php .php PHPIniDir "c:/wamp/php-5.5.7" DirectoryIndex index.html index.php
- Load Module ดังนี้
- mod_expires.so
- mod_headers.so
- mod_rewrite.so
- mod_socache_shmcb.so
- mod_ssl.so
- mod_vhost_alias.so
- Uncomment บรรทัดนี้ Include conf/extra/httpd-ssl.conf
- แก้ไฟล์ c:/wamp/apache2.4_win32/conf/extra/httpd-ssl.conf
- SSLCertificateFile “C:\wamp\apache2.4_win32\conf\server.crt”
- SSLCertificateKeyFile “C:\wamp\apache2.4_win32\conf\server.key”
- DocumentRoot “c:/wamp/www”
- ไปที่โฟลเดอร์ php-5.5.7_win32 แล้ว copy php.ini-development ตั้งชื่อไฟล์เป็น php.ini
- แก้ไฟล์ php.ini
- extension_dir = “C:/wamp/php-5.5.7_win32/ext”
- date.timezone = “Asia/Bangkok”
- enable extensions
- php_curl.dll
- php_gd2.dll
- php_imap.dll
- php_mbstring.dll
- php_mysql.dll
- php_mysqli.dll
- php_openssl.dll
- php_tidy.dll
- เติมโค๊ดนี้ที่ท้ายไฟล์
zend_extension="c:\wamp\php-5.5.7_win32\ext\dbg-php-5.5.dll" [debugger] debugger.enabled=on debugger.profiler_enabled=on debugger.hosts_allow= 127.0.0.1 localhost ::1 127.0.0.1 debugger.hosts_deny=ALL debugger.ports=7869
- copy ไฟล์ dbg-php-5.5.dll จากในโฟลเดอร์โปรแกรม phpED ไปใส่ตรง c:\wamp\php-5.5.7_win32\ext\ ด้วย
- เปิด cmd โดย run as administrator
- รันคำสั่ง
- cd /wamp/apache2.4_win32/conf/
- ..\bin\openssl.exe req -config openssl.cnf -x509 -nodes -subj “/C=TH/ST=Bangkok/L=Bangkok/O=localhost/OU=SEC/CN=localhost” -days 1825 -newkey rsa:2048 -keyout server.key -out server.crt
- c:\wamp\apache2.4_win32\bin\httpd.exe -k install
- (ข้อนี้ข้ามไปก็ได้ ไว้ถ้ามีปัญหาค่อยกลับมาทำ)
ใน Environment Variables ตรง System Variables
ที่ตัวแปร PATH ให้เติม C:\wamp\apache2.4_win32\; C:\wamp\apache2.4_win32\bin ต่อเข้าไป
วิธีการ configure vhost
<VirtualHost 127.0.0.1:80> DocumentRoot "C:/wamp/site2/" ServerName www.site2.local ServerAlias site2.local www.site2.local </VirtualHost> <VirtualHost 127.0.0.1:443> DocumentRoot "C:/wamp/site2/" ServerName www.site2.local ServerAlias site2.local www.site2.local SSLEngine on SSLCertificateFile "c:/Wamp/Apache2.4_win32/conf/server.crt" SSLCertificateKeyFile "c:/Wamp/Apache2.4_win32/conf/server.key" </Virtual>
ถ้าในกรณีที่ DocumentRoot ของ VirtualHost อยู่คนละพาทกับ DocumentRoot หลักใน httpd.conf ให้ไปเพิ่ม <Directory … > ….. </Directory> ใน httpd.conf ด้วย