Tôi có nhu cầu sử dụng nhiều phiên bản PHP trên XAMPP cùng lúc do có những dự án phải kết nối đến những dịch vụ dùng phiên bản PHP rất cũ.

Trước đây do không biết nên tôi đã phải cài thêm bản XAMPP cũ hơn ra một chỗ khác rất là dư thừa. Ngoài ra vì tôi sẽ phải khởi động một Apache Web Server mới nên sẽ cần thay đổi cổng HTTP/HTTPS, từ đó dẫn đến phức tạp trong triển khai.

Thật may vì cuối cùng tôi cũng tìm được câu trả lời hoàn hảo từ StackOverflow.

Giả sử tôi đang cài đặt phiên bản XAMPP mới nhất tại thời điểm viết bài là 8.0.12 chứa phiên bản PHP 8.0.12. Đường dẫn cài đặt tại C:\xampp. Các bước cài đặt thêm bản PHP cũ hơn như sau:

Tải về PHP phiên bản cũ

Tải PHP phiên bản NTS (Non Thread Safe – là phiên bản chứa php-cgi.exe) tại website php.net (chọn file ZIP có chứa -nts- trong tên).

Ví dụ, muốn sử dụng PHP 5.6.40 thì tải về file php-5.6.40-nts-win32-vc11-x64.zip.

Giải nén file ZIP vào thư mục cài đặt XAMPP, ví dụ C:\xampp\php56.

Cấu hình php.ini

Copy file php.ini-development trong thư mục C:\xampp\php56 nói trên thành php.ini rồi bỏ comment dòng sau:

extension_dir = "ext"

Ngoài ra, để tránh tình trạng không tương thích do các extension của PHP chưa được bật đầy đủ, hãy tải XAMPP có phiên bản PHP tương ứng tại SourceForge để tham khảo nội dung file php.ini trong đó và merge những cấu hình cần thiết bằng WinMerge chẳng hạn.

Ví dụ với PHP 5.6.40 là phiên bản xampp-windows-x64-5.6.40-1-vc11.zip.

Cấu hình XAMPP Apache

Mở file httpd.conf , tìm đến dòng

# XAMPP settings
Include "conf/extra/httpd-xampp.conf"

Thêm tiếp vào dòng cấu hình sau đây để Apache load thêm một file config dành riêng cho phiên bản PHP tùy chỉnh của chúng ta, ví dụ đặt tại \xampp\apache\conf\extra\http-xampp-php56.conf.

# PHP 5.6
Include "conf/extra/httpd-xampp-php56.conf"

Tạo file httpd-xampp-php56.conf trong thư mục \xampp\apache\conf\extra rồi thêm vào đoạn cấu hình sau. Mục đích là dùng mod_action tạo giao diện CGI cho PHP 5.6 (ví dụ application/x-httpd-php56-cgi).

ScriptAlias /php56 "C:/xampp/php56"
Action application/x-httpd-php56-cgi /php56/php-cgi.exe
<Directory "C:/xampp/php56">
    AllowOverride None
    Options None
    Require all denied
    <Files "php-cgi.exe">
        Require all granted
    </Files>
</Directory>

Với những phiên bản PHP khác ví dụ như 7.4 (bản cuối cùng là 7.4.25) ta cũng làm tương tự như vậy.

Cấu hình sử dụng phiên bản PHP tùy chỉnh

Ta có thể cấu hình những file PHP trong thư mục nào sử dụng PHP 5.6, ví dụ thư mục htdocs\old_service. Mở file php-xampp-php56.conf đã tạo ở trên để thêm vào đoạn sau.

<Directory "C:/xampp/htdocs/old_service">
    <FilesMatch "\.php$">
        SetHandler application/x-httpd-php56-cgi
    </FilesMatch>
</Directory>

Hoặc ta có thể tạo thêm một VirtualHost tương ứng với một domain nào đó như sau:

<VirtualHost *:80>
    ServerName oldservice.example.com
    DocumentRoot "C:/xampp/htdocs/old_service"
    <Directory "C:/xampp/htdocs/old_service">
        Require all granted
    </Directory>
    <FilesMatch "\.php$">
        SetHandler application/x-httpd-php56-cgi
    </FilesMatch>
</VirtualHost>

Cuối cùng ta khởi động lại Apache trên XAMPP rồi truy cập thử vào URL tương ứng ví dụ http://localhost/old_service hoặc nếu dùng VirtualHost là http://oldservice.example.com để xem kết quả.