บทความนี้จะแนะนำวิธีการทำให้สามารถรัน PHP พร้อมๆกันหลายๆเวอร์ชั่นบน Windows Apache ที่ติดตั้งที่เดียวได้ โดยไม่จำเป็นต้องพึ่งโปรแกรมสลับรุ่น PHP ที่แจกไป. ให้ดาวน์โหลด Apache มาติดตั้ง เช่น ดาวน์โหลดจาก Apache Lounge.
เปิดไฟล์ Apache\conf\httpd.conf และตรวจให้แน่ใจว่าโมดูลเหล่านี้ถูกลบเครื่องหมาย # ข้างหน้าออกเพื่อเปิดใช้งานแล้ว.
LoadModule fcgid_module modules/mod_fcgid.so
ภายใน <IfModule mime_module>...</IfModule>
ให้เพิ่มบรรทัดเหล่านี้ต่อท้าย
<IfModule mime_module>
# ของบรรทัดบนๆไม่ต้องลบ
AddType text/html .php
AddType application/x-httpd-php .php
</IfModule>
ในบรรทัดล่างๆของ httpd.conf บริเวณที่มีการ Include ต่างๆ ให้เพิ่มและตรวจให้แน่ใจว่ามีการเปิดใช้บรรทัดเหล่านี้.
Include conf/extra/httpd-php.conf
Include conf/extra/httpd-vhosts.conf
ติดตั้ง PHP
ดาวน์โหลด php รุ่นต่างๆที่จะใช้ แล้วติดตั้งลงบนตำแหน่งที่ต้องการ ตัวอย่างเช่น D:\wwwserver\php\php7.0, D:\wwwserver\php\php7.1 เป็นต้น.
สร้างไฟล์ Apache\conf\extra\httpd-php.conf โดยในไฟล์นี้จะเป็น PHP รุ่นหลักๆที่จะใช้ ตัวอย่างเช่นมีโดเมน localhost.localhost เป็นโดเมนหลัก และจะใช้ PHP 7.0, ส่วนโดเมน localhost71.localhost ก็ใช้ PHP 7.1 เป็นต้น. ให้กำหนดโค้ดที่จะรัน PHP รุ่นหลักลงไปก่อน. การกำหนดโดเมนเพิ่มบน Windows ผู้อ่านจำเป็นจะต้องแก้ไขไฟล์ C:\Windows\System32\drivers\etc\host ด้วยตนเองก่อน จึงจะเรียกใช้งานได้.
# PHP FastCGI
# ตรวจสอบ path ให้ถูกต้องตรงรุ่น.
FcgidInitialEnv PATH "D:/wwwserver/php/php7.0;C:/WINDOWS/system32;C:/WINDOWS;C:/WINDOWS/System32/Wbem;"
FcgidInitialEnv SystemRoot "C:/Windows"
FcgidInitialEnv SystemDrive "C:"
FcgidInitialEnv TEMP "C:/WINDOWS/Temp"
FcgidInitialEnv TMP "C:/WINDOWS/Temp"
FcgidInitialEnv windir "C:/WINDOWS"
FcgidIOTimeout 64
FcgidConnectTimeout 16
FcgidMaxRequestsPerProcess 1000
FcgidMaxProcesses 50
FcgidMaxRequestLen 8131072
# Location of php.ini
# ตรวจสอบ path ให้ถูกต้องตรงรุ่น.
FcgidInitialEnv PHPRC "D:/wwwserver/php/php7.0"
FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 1000
<Files ~ "\.php$">
AddHandler fcgid-script .php
# ตรวจสอบ path ให้ถูกต้องตรงรุ่น.
FcgidWrapper "D:/wwwserver/php/php7.0/php-cgi.exe" .php
Options +ExecCGI
order allow,deny
allow from all
deny from none
</Files>
แก้ไขไฟล์ Apache\conf\extra\httpd-vhosts.conf โดยให้เพิ่ม Include เหล่านี้ลงไปท้ายไฟล์ เพื่อแยกในกรณีที่มีหลายๆ Virtual host จะได้ไม่แออัดจนเกินไป.
Include conf/extra/vhosts/localhost71.conf
สร้างไฟล์ Apache\conf\extra\vhosts\localhost71.conf ขึ้นมาโดยใช้ตัวอย่างดังต่อไปนี้.
<VirtualHost *:80>
ServerAdmin admin@localhost71.localhost
DocumentRoot "D:/wwwroot"
# โดเมนที่จะใช้กำหนดตรงนี้
ServerName localhost71.localhost
ErrorLog "logs/localhost71-error.log"
CustomLog "logs/localhost71-access.log" common
# php.ini ของแต่ละรุ่น กำหนดแตกต่างกัน ตรวจสอบ path ให้ถูกต้องตรงรุ่น.
FcgidInitialEnv PHPRC "D:/wwwserver/php/php7.1/php.ini"
# บรรทัดล่างนี้ เพิ่มเพื่อให้ระบบใช้ Windows PATH สำหรับ PHP รุ่นนี้โดยเฉพาะ.
FcgidInitialEnv PATH "D:/wwwserver/php/php7.0;C:/WINDOWS/system32;C:/WINDOWS;C:/WINDOWS/System32/Wbem;"
<Directory "D:/wwwroot">
<Files ~ "\.php$">
AddHandler fcgid-script .php
# ตรวจสอบ path ให้ถูกต้องตรงรุ่น.
FcgidWrapper "D:/wwwserver/php/php7.1/php-cgi.exe" .php
Options Indexes FollowSymLinks ExecCGI
AllowOverride All
Order allow,deny
Allow from all
</Files>
</Directory>
</VirtualHost>
แก้ไข php.ini โดยกำหนด path ของ extension หรือโฟลเดอร์ ext ให้ถูกต้อง. ไม่จำเป็นต้องเพิ่ม path ของ PHP ลงใน Environment ของ Windows ยกเว้นแต่จะใช้งานผ่าน command line.
จากนั้น Restart Apache และตรวจดูว่ามัน restart เรียบร้อยไม่มีแจ้งข้อผิดพลาดใดๆ จึงทดสอบเรียกทั้ง 2 โดเมน.
http://localhost.localhost/info.php ควรจะได้ PHP 7.0
http://localhost71.localhost/info.php ควรจะได้ PHP 7.1
อ้างอิง: