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 ได้