รัน PHP พร้อมกันหลายเวอร์ชั่นบน Apache เดียว

บทความนี้จะแนะนำวิธีการทำให้สามารถรัน 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

อ้างอิง:

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *

คุณอาจใช้แท็กHTMLและแอททริบิวต์เหล่านี้: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>