Directadmin Custombuild 2.0 Multi PHP versions selectable by .htaccess

Tested on CentOS 6 x86_64

วิธีติดตั้ง PHP หลายเวอร์ชั่น โดยแต่ละเว็บสามารถเลือกเวอร์ชั่นที่ต้องการผ่านไฟล์ .htaccess ได้เองเลย
รองรับ php 5.2 – 5.6 โดยจะใช้เวอร์ชั่นใหนบ้างก็ compile ให้ครบ

ทำการติดตั้ง Directadmin ให้เรียบร้อย ถ้าลงใหม่ก็เลือก custombuild 2.0 กับ php1=5.3/suphp php2=no
หมายเหตุ: หากต้องการ update mysql ควรทำให้เรียบร้อยก่อน เพราะการเปลี่ยน version mysql จะต้อง compile php ใหม่ด้วย แนะนำให้ใช้ mysql 5.5 หรือ 5.6

ขั้นตอนที่ 1 โหลด custombuild 2.0 (ถ้าติดตั้งด้วย custombuild 2 อยู่แล้วก็ข้ามไป)

cd /usr/local/directadmin
rm custombuild.tar.gz
mv custombuild custombuild.old
wget http://files10.directadmin.com/services/custombuild/2.0/custombuild.tar.gz
tar xzf custombuild.tar.gz

ขั้นตอนที่ 2 ตั้งค่า options.conf ของ custombuild ตามนี้

php1_release=5.3
php1_mode=suphp
php2_release=no

php_ini=yes
php_timezone=Asia/Bangkok
php_ini_type=production

x_mail_header=yes

mod_ruid2=no

ขั้นตอนที่ 3 อัพเดต apache 2.4 (สำหรับเครื่องที่ติดตั้งไว้เก่าเป็น apache 2.2 ถ้าติดตั้งด้วย custombuild 2 เป็น apache 2.4 อยู่แล้วก็ข้ามไป)

cd /usr/local/directadmin/custombuild
./build apache

ขั้นตอนที่ 4 suphp

cd /usr/local/directadmin/custombuild
./build suphp

ขั้นตอนที่ 5 compile php 5.3 5.4 5.5 5.6

cd /usr/local/directadmin/custombuild
./build set php1_release 5.3
./build set php1_mode suphp
./build set php2_release no
./build php d (ถ้าเพิ่งติดตั้งใหม่สั่ง php n ถ้าติดตั้งนานแล้วสั่ง php d เพื่อให้ update lib ต่างๆด้วยเลย)

./build set php1_release 5.4
./build php n

./build set php1_release 5.5
./build php n

./build set php1_release 5.6
./build php n

ขั้นตอนที่ 6 compile php 5.2 (ถ้าไม่ต้องการใช้ php 5.2 ก็ข้ามไปข้อ 7 เลย)

cd /usr/local/directadmin/custombuild
wget http://files10.directadmin.com/services/custombuild/php-5.2.17.tar.gz
wget http://files10.directadmin.com/services/custombuild/php-5.2.x-mail-header.patch
tar xzf php-5.2.17.tar.gz
patch -p0 < php-5.2.x-mail-header.patch cd php-5.2.17 สร้างไฟล์ configure.php5 ใหม่ตามนี้ #!/bin/sh "./configure" \ "--prefix=/usr/local/php52" \ "--enable-force-cgi-redirect" \ "--enable-fastcgi" \ "--program-suffix=52" \ "--with-config-file-scan-dir=/usr/local/php52/lib/php.conf.d" \ "--with-curl=/usr/local/lib" \ "--with-gd" \ "--with-gettext" \ "--with-jpeg-dir=/usr/local/lib" \ "--with-freetype-dir=/usr/local/lib" \ "--with-kerberos" \ "--with-mcrypt" \ "--with-mhash" \ "--with-mysql=/usr" \ "--with-mysqli=/usr/bin/mysql_config" \ "--with-pcre-regex=/usr/local" \ "--with-pdo-mysql=/usr" \ "--with-pear=/usr/local/lib/php" \ "--with-png-dir=/usr/local/lib" \ "--with-xsl" \ "--with-zlib" \ "--with-zlib-dir=/usr/local/lib" \ "--with-openssl" \ "--with-iconv=/usr/local" \ "--enable-bcmath" \ "--enable-calendar" \ "--enable-exif" \ "--enable-ftp" \ "--enable-gd-native-ttf" \ "--enable-magic-quotes" \ "--enable-soap" \ "--enable-sockets" \ "--enable-mbstring" \ "--enable-zip" \ "--enable-wddx" sh configure.php5 make && make install cp php.ini-recommended /usr/local/php52/lib/php.ini ขั้นตอนที่ 7 กำหนด version php ของระบบ (php ที่เรียกใช้ผ่าน command shell / cron และ directadmin เรียกใช้งาน เปลี่ยน ? เป็นเวอร์ชั่นที่ต้องการ แนะนำเป็น 5.3,5.4) cd /usr/local/bin rm php ln -s /usr/local/php5?/bin/php5? php ขั้นตอนที่ 8 กำหนด php เวอร์ชั่นต่างๆ ให้ suphp แก้ไขไฟล์ /usr/local/suphp/etc/suphp.conf ใน section handlers (compile เวอร์ชั่นใหนบ้างก็ใส่ให้ครบตามนั้น) [handlers] ;Handler for php-scripts x-httpd-php52="php:/usr/local/php52/bin/php-cgi52" x-httpd-php53="php:/usr/local/php53/bin/php-cgi53" x-httpd-php54="php:/usr/local/php54/bin/php-cgi54" x-httpd-php55="php:/usr/local/php55/bin/php-cgi55" x-httpd-php56="php:/usr/local/php56/bin/php-cgi56" แก้ไขไฟล์ /etc/httpd/conf/extra/httpd-suphp.conf

AddHandler x-httpd-php5? .inc .php .php3 .php4 .php5 .php56 .phtml ## จะเป็นเวอร์ชั่น default php ของเว็บทั้งระบบ เปลี่ยน ? เป็นเวอร์ชั่นที่ต้องการ


suPHP_Engine on
###suPHP_ConfigPath /usr/local/php53/lib/
suPHP_AddHandler x-httpd-php52
suPHP_AddHandler x-httpd-php53
suPHP_AddHandler x-httpd-php54
suPHP_AddHandler x-httpd-php55
suPHP_AddHandler x-httpd-php56

เสร็จแล้ว restart httpd

service httpd restart

ขั้นตอนที่ 9 reset file owner ของแต่ละ user (ทั้งระบบจะใช้ php เป็นโหมด cgi ไม่จำเป็นต้อง chmod 777 เหมือนกับ php_cli (DSO) หากเดิมใช้ระบบ php cli อยู่ จะต้อง reset owner ไฟล์ที่เป็น apache มาเป็น user )

cd /usr/local/directadmin/scripts && ./set_permissions.sh user_homes
find /home/*/domains/*/public_html -type d -print0 | xargs -0 chmod 711
find /home/*/domains/*/public_html -type f -print0 | xargs -0 chmod 644
cd /usr/local/directadmin/data/users && for i in `ls`; do { chown -R $i:$i /home/$i/domains/*/public_html;}; done;

กรณีเปิดให้ใช้งาน cgi ก็สั่ง 3 บรรทัดนี้เพิ่ม (ปกติปิดใช้งาน)

find /home/*/domains/*/public_html -type f -name ‘*.cgi*’ -exec chmod 755 {} \;
find /home/*/domains/*/public_html -type f -name ‘*.pl*’ -exec chmod 755 {} \;
find /home/*/domains/*/public_html -type f -name ‘*.pm*’ -exec chmod 755 {} \;

ขั้นตอนที่ 10 สำหรับเว็บที่ต้องการใช้ php version ต่างจาก default ของระบบ ก็กำหนดเวอร์ชั่นของ php ผ่านไฟล์ .htaccess ของเว็บนั้น

สร้าง/แก้ไข ไฟล์ .htaccess ใน folder public_html (ให้มี owner เป็น user นั้นๆ) แล้วเพิ่ม code ต่อไปนี้ลงไป


AddHandler x-httpd-php5? .inc .php .php3 .php4 .php5 .php53 .phtml ## เวอร์ชั่น php ที่จะใช้ เปลี่ยน ? เป็นเวอร์ชั่นที่ต้องการ
suPHP_ConfigPath /home/user/ ## กรณีต้องการใช้ php.ini ส่วนตัว ให้สร้างไฟล์ php.ini ไว้ใน path ที่กำหนด โดยอยู่ใน /home/user นั้นๆ เช่น /home/user/php/ กรณีใช้ php.ini ของระบบ ก็ลบบรรทัดนี้ออกหรือใส่ # ไว้

หมายเหตุ: กำหนดนามสกุลไฟล์เท่าที่ใช้จริงก็พอ เช่น .inc .php แค่นี้ก็พอ เพราะปกติ .php5 .php53 ไม่ได้ใช้อยู่แล้ว


AddHandler x-httpd-php5x .inc .php .phtml
suPHP_ConfigPath /home/user/

หมายเหตุ:
1. หาก update php ใหม่ด้วย custombuild 2 (ยกเว้น php5.2 ที่ compile เอง) จะต้องทำ ขั้นตอนที่ 7 และ 8 ใหม่ทุกครั้ง เพราะ custombuild จะแก้เหลือเวอร์ชั่นที่เพิ่ง compile แค่เวอร์ชั่นเดียว
2. ถ้ากำหนด default php ของเว็บทั้งระบบเป็น php 5.2 แนะนำให้สร้างไฟล์ .htaccess ใน /var/www/html กำหนด php เป็น 5.3 หรือ 5.4 จะได้ใช้ roundcube version ล่าสุด และ phpmyadmin version 4 ได้