Sử dụng nhiều phiên bản PHP trên Apache
Bài đăng này đã không được cập nhật trong 8 năm
Như các bạn biết, việc cài đặt server apache thì trong cùng 1 server chỉ sử dụng được 1 phiên bản của PHP. Nếu như bạn dùng PHP5 thì sẽ không chạy được PHP 7 hoặc ngược lại.
Việc trên gây ra khá nhiều bất tiện trong quá trình phát triển phần mềm, nhất là với việc chuyển đổi (migrate) từ một hệ thống cũ (chạy PHP 5) lên hệ thống mới với phiên bản PHP cao hơn (PHP 7). Nó gây ra cho bạn khá nhiều bất tiện, mỗi khi bạn muốn chuyển đổi về hệ thống cũ để kiểm tra chức năng (function) với hệ thống mới bạn sẽ phải cài đặt lại module PHP cho Apache. Rất rất mất thời gian cho quá trình đó.
Do vậy nay tôi sẽ hướng dẫn bạn cài đặt một server Apache có thể chạy đồng thời nhiều phiên bản PHP khác nhau(PHP 5.4, 5.5, PHP 7....).
Môi trường tôi sử dụng là Mac OS X
, Apache 2.4
, PHP (5.3, 5.4, 7.0)
. Với môi trường Linux thì cũng có thể cài đặt tương tự như trên Mac OS X.
Để cho tiện cho việc cài đặt các module, tôi sử dụng HomeBrew
(dành riêng cho Mac OS X, trên Ubuntu hoặc các phiên bản khác đã có sẵn package manager như apt-get
, yum
...)
1. Cách cài đặt HomeBrew (với linux thì bạn bỏ qua bước này)
Bạn có thể tải cài đặt HomeBrew
tại http://brew.sh
Với MacOS thì bạn cần phải cài XCode
và Command Line Tools
. Sau khi cài đặt XCode bạn cần phải mở XCode và chấp nhận Terms and Conditions
sau đó cài đặt Command Line Tools
bằng câu lệnh:
xcode-select --install
Để cài HomeBrew, bật Terminal và sử dụng câu lệnh:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Sau khi câu lệnh được thực thi bạn đã cài đặt thành công HomeBrew
2. Cài đặt Apache
Trên Mac OS X thì Apache đã được cài sẵn. Việc của chúng ta là bật lên và sử dụng
Khởi động Apache trong Mac OS X bằng cách sử dụng câu lệnh:
$ sudo apachectl start
Nếu bạn muốn dừng Apache thì sử dụng lệnh:
$ sudo apachectl stop
Để restart Apache thì sử dụng lệnh
$ sudo apachectl -k restart
Còn với các bạn sử dụng Linux thì tham khảo cách cài đặt Apache tại: https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-ubuntu
hoặc sử dụng câu lệnh cho Ubuntu như:
sudo apt-get update
sudo apt-get install apache2
2.1 Cấu hình Apache
Để có thể sử dụng multi-version PHP thì bạn cần bật một số extension cho Apache như:
- mod_rewrite
- mod_alias
- mod_vhost_alias
- mod_fcgid (Hướng dẫn cài đặt ở phần sau)
Để bật các extension cho Apache bạn làm theo cách sau:
- Mở và sửa file
/etc/apache2/httpd.conf
với quyềnsudo
. - Tìm đến module cần bật ví dụ
...
#LoadModule rewrite_module libexec/apache2/mod_rewrite.so
...
- Xóa
#
để kích hoạt extension - Khởi động lại Apache
Với module vhost bạn có thể tham khảo thêm tại:
3. Cài đặt PHP
Để có thể sử dụng nhiều phiên bản PHP trên cùng 1 server Apache đồng nghĩa với việc bạn phải cài nhiều phiên bản PHP. Để cài php trên MacOSX khá dễ dàng với HomeBrew
(Trên Linux Ubuntu cũng rất dễ với apt-get
)
Cách cài như sau:
- Bật Terminal
- Sử dụng lệnh sau để cài PHP:
$ brew tap homebrew/dupes
$ brew tap homebrew/versions
$ brew tap homebrew/homebrew-php
$ brew install php54
$ brew unlink php54
$ brew install php55
$ brew unlink php55
$ brew install php56
$ brew unlink php56
$ brew install php70
Sau khi dùng các lệnh trên bạn đã có trong tay PHP 5.4, 5.4, 5.6, 7.0
.
Và bạn cũng sẽ có các file cấu hình php.ini
tương ứng cho từng version PHP tại:
/usr/local/etc/php/5.4/php.ini
/usr/local/etc/php/5.5/php.ini
/usr/local/etc/php/5.6/php.ini
/usr/local/etc/php/7.0/php.ini
Và bạn cũng sẽ có các folder chứa PHP tương ứng như sau:
/usr/local/Cellar/php54/...
/usr/local/Cellar/php55/...
/usr/local/Cellar/php56/...
/usr/local/Cellar/php70/...
Với Linux cách cài đặt và đường dẫn sẽ khác 1 chút.
4. Cài đặt Apache để chạy đa phiên bản PHP
4.1 Cài đặt mod_fcgid
Bạn cài đặt bằng cách sử dụng lệnh sau:
$ brew install mod_fcgid
Sau khi cài đặt thành công bạn sẽ có mod_fcgid
tại thư mục /usr/local/Cellar/mod_fcgid
4.2 Kích hoạt mod_fcgid trong Apache
Để kích hoạt mod_fcgid
bạn làm theo các bước sau:
- Mở file
/etc/apache2/httpd.conf
- Thêm các dòng sau vào cuối file:
LoadModule fcgid_module /usr/local/Cellar/mod_fcgid/2.3.9/libexec/mod_fcgid.so
<IfModule fcgid_module>
AddHandler fcgid-script .fcgi .fpl
FcgidConnectTimeout 20
FcgidMaxRequestLen 268435456
FcgidMaxProcessesPerClass 10
FcgidIOTimeout 300
</IfModule>
- Khởi động lại Apache
4.3 Tạo PHP Launcher với code fcgi
4.3.1 Tạo folder chứa PHP Laucher
Mình sẽ tạo 1 folder cgi-bin
để chứa launcher
Bật Terminal gõ lệnh:
$ mkdir /usr/local/bin/cgi-bin
4.3.2 Set owner và phân quyền (permission) cho folder cgi-bin
$ sudo sudo chown -R _www:_www /usr/local/bin/cgi-bin
$ sudo chmod -R 775 /usr/local/bin/cgi-bin
4.3.3 Tạo script laucher
Để chạy được nhiều phiên bản PHP khác nhau, bạn cần phải tạo các script cho từng phiên bản php khác nhau.
Ví dụ tạo laucher cho php 5.4 bằng cách:
- Tạo file
php54.fcgi
tại/usr/local/bin/cgi-bin
- Nhập nội dung:
#!/bin/bash
exec /usr/local/Cellar/php54/5.4.xxxx/bin/php-cgi
- Phân quyền cho file bằng lệnh
$ sudo sudo chown _www:_www /usr/local/bin/cgi-bin/php54.fcgi
$ sudo chmod 775 /usr/local/bin/cgi-bin/php54.fcgi
Làm tương tự cho các version khác bằng cách thay đổi nội dung script bằng đường dẫn đến folder chứa PHP tương ứng
Khi đó ta sẽ có các script laucher như sau:
/usr/local/bin/cgi-bin/php54.fcgi
/usr/local/bin/cgi-bin/php55.fcgi
/usr/local/bin/cgi-bin/php56.fcgi
/usr/local/bin/cgi-bin/php70.fcgi
4.4 Cài đặt vhost
cho Apache
Bạn có thể tham khảo cách cài vhost thêm tại https://coolestguidesontheplanet.com/how-to-set-up-virtual-hosts-in-apache-on-mac-osx-10-11-el-capitan/
Dưới đây tôi chỉ hướng dẫn bạn cách cài đặt vhost kèm với phiên bản PHP cho từng dự án:
- Ví dụ về 1 file config cho project như sau:
<VirtualHost *:80>
ServerAdmin webmaster@testphp54
DocumentRoot "/Users/tpro/Framgia/testphp54"
ServerName testphp54
CustomLog "/private/var/log/apache2/testphp54-access_log" common
ErrorLog "/private/var/log/apache2/testphp54-error_log"
<Directory "/Users/tpro/Framgia/testphp54">
Options Indexes FollowSymLinks Multiviews
MultiviewsMatch Any
AllowOverride All
Require all granted
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
- Config cho việc gọi launcher PHP bằng cách thêm dòng
FcgidWrapper /usr/local/bin/cgi-bin/php54.fcgi .php
vàSetHandler
cho các filephp
bằng cách thêm đoạn sau:
<FilesMatch \.php$>
SetHandler fcgid-script
</FilesMatch>
- Và bật thực thi
ExecCGI
vàoOptions
trongDirectory
Kết quả bạn nhận được như sau:
<VirtualHost *:80>
ServerAdmin webmaster@testphp54
DocumentRoot "/Users/tpro/Framgia/testphp54"
ServerName testphp54
CustomLog "/private/var/log/apache2/testphp54-access_log" common
ErrorLog "/private/var/log/apache2/testphp54-error_log"
FcgidWrapper /usr/local/bin/cgi-bin/php53.fcgi .php
<Directory "/Users/tpro/Framgia/testphp54">
<FilesMatch \.php$>
SetHandler fcgid-script
</FilesMatch>
Options Indexes FollowSymLinks Multiviews ExecCGI
MultiviewsMatch Any
AllowOverride All
Require all granted
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Vậy là hoàn thành việc cài đặt php theo từng project (vhost
)
Để thay đổi phiên bản khác bạn chỉ cần đổi tên laucher /usr/local/bin/cgi-bin/php53.fcgi
thành /usr/local/bin/cgi-bin/php70.fcgi
Để hệ thống tự nhận file index.php
bạn cần phải thêm index.php
vào sau DirectoryIndex index.html
trong file httpd.conf
của Apache như sau:
...
<IfModule dir_module>
DirectoryIndex index.html index.php
</IfModule>
...
Sau khi thực hiện các bước trên bạn đã có 1 server Apache chạy đa phiên bản PHP.
Thanks for reading!
All rights reserved