mod_php คืออะไร?


108

ในขณะที่กำลังอ่านบทช่วยสอน Zendฉันพบข้อความต่อไปนี้:

โปรดทราบว่าการตั้งค่า php_flag ใน. htaccess จะใช้ได้เฉพาะเมื่อคุณใช้ mod_php

ใครสามารถอธิบายได้ว่าหมายถึงอะไร?

คำตอบ:


159

mod_phpวิธี PHP, เป็นโมดูล Apache

โดยทั่วไปเมื่อโหลดmod_phpเป็นโมดูล Apache จะช่วยให้ Apache จะตีความไฟล์ PHP (เหล่านั้นจะถูกตีความโดยmod_php )


แก้ไข:มี(อย่างน้อย)สองวิธีในการเรียกใช้ PHP เมื่อทำงานกับ Apache:

  • การใช้CGI : กระบวนการ PHP เปิดตัวโดย Apache และเป็นกระบวนการ PHP ที่ตีความโค้ด PHP ไม่ใช่ Apache เอง
  • การใช้ PHP เป็นโมดูล Apache (เรียกว่าmod_php) : จากนั้นตัวแปล PHP จะถูก "ฝัง" ไว้ในกระบวนการ Apache: ไม่มีกระบวนการ PHP ภายนอกซึ่งหมายความว่า Apache และ PHP สามารถสื่อสารได้ดีขึ้น


และแก้ไขใหม่หลังจากความคิดเห็น : ใช้ CGI หรือmod_phpขึ้นอยู่กับคุณ: เป็นเพียงเรื่องของการกำหนดค่าเว็บเซิร์ฟเวอร์ของคุณ

หากต้องการทราบว่าเซิร์ฟเวอร์ของคุณใช้วิธีใดในขณะนี้คุณสามารถตรวจสอบผลลัพธ์ของphpinfo(): ควรมีบางอย่างที่ระบุว่า PHP ทำงานผ่านmod_php (หรือmod_php5)หรือผ่าน CGI

นอกจากนี้คุณยังอาจต้องการที่จะดูที่php_sapi_name()ฟังก์ชั่น: มันส่งกลับชนิดของการเชื่อมต่อระหว่างเว็บเซิร์ฟเวอร์และของ PHP


หากคุณเช็คในไฟล์คอนฟิกูเรชันของ Apache เมื่อใช้mod_phpงานควรมีLoadModuleบรรทัดดังนี้:

LoadModule php5_module        modules/libphp5.so

(ชื่อไฟล์ทางด้านขวาอาจแตกต่างกัน - ใน Windows เช่นควรเป็น a .dll)


ฉันใช้ xampp เพื่อติดตั้งแพ็คเกจ php, apache และ mysql ... แล้วการตั้งค่าของฉันจะเป็นอย่างไร?
SpikETidE

คุณควรเปิดใช้งานหาก PHP ไม่ทำงานในขณะนี้ ถ้า PHP ใช้งานได้แล้วก็ต้องใช้ CGI ซึ่งในกรณีนี้คุณอาจต้องทำมากกว่าแค่เปิดใช้งานโมดูล โมดูลอาจไม่มีอยู่ในระบบด้วยซ้ำ
d11wtq

1
ได้..!. เมื่อฉันเรียกใช้ phpinfo () ฉันเห็นว่า mod_php5 รวมอยู่ในส่วน Loaded Modules .... และนั่นหมายความว่าฉันได้รันเป็นโมดูล apache ... ใช่ไหม
SpikETidE

3
mod_phpเป็นการกำหนดค่าที่พบมากที่สุด
troelskn

@Pascal ฉันจะบอกว่าmod_phpไม่ใช่ PHP จริง มันเป็นเพียงส่วนเสริมของ Apache หรือมากกว่านั้นฉันคิดว่าคุณควรเริ่มจากคำตอบด้วยคำจำกัดความของPHP หมายถึงอะไรกันแน่ ?
Pacerier

58

คำตอบนี้นำมาจากTuxRadar :

เมื่อเรียกใช้ PHP ผ่านเว็บเซิร์ฟเวอร์ของคุณมีสองตัวเลือกที่แตกต่างกัน: เรียกใช้โดยใช้ CGI SAPI ของ PHP หรือเรียกใช้เป็นโมดูลสำหรับเว็บเซิร์ฟเวอร์ แต่ละคนมีประโยชน์ของตัวเอง แต่โดยรวมแล้วโมดูลนี้เป็นที่ต้องการ

การเรียกใช้ PHP เป็น CGI หมายความว่าโดยพื้นฐานแล้วคุณจะบอกตำแหน่งของไฟล์ปฏิบัติการ PHP ของเว็บเซิร์ฟเวอร์ของคุณและเซิร์ฟเวอร์จะเรียกใช้ไฟล์ปฏิบัติการนั้นโดยให้สคริปต์ที่คุณเรียกทุกครั้งที่คุณเยี่ยมชมเพจ นั่นหมายความว่าทุกครั้งที่คุณโหลดหน้า PHP จำเป็นต้องอ่าน php.ini และตั้งค่าต้องโหลดส่วนขยายทั้งหมดจากนั้นจึงต้องเริ่มงานแยกวิเคราะห์สคริปต์ - มีงานซ้ำ ๆ มากมาย

เมื่อคุณเรียกใช้ PHP เป็นโมดูล PHP จะอยู่ภายในเว็บเซิร์ฟเวอร์ของคุณโดยเริ่มต้นเพียงครั้งเดียวโหลดการตั้งค่าและส่วนขยายเพียงครั้งเดียวและยังสามารถจัดเก็บข้อมูลในเซสชันต่างๆ ตัวอย่างเช่นตัวเร่ง PHP อาศัย PHP ที่สามารถบันทึกข้อมูลแคชข้ามคำขอซึ่งเป็นไปไม่ได้โดยใช้เวอร์ชัน CGI

ข้อได้เปรียบที่ชัดเจนของการใช้ PHP เป็นโมดูลคือความเร็ว - คุณจะเห็นการเพิ่มความเร็วอย่างมากหากคุณแปลงจาก CGI เป็นโมดูล หลายคนโดยเฉพาะผู้ใช้ Windows ไม่ตระหนักถึงสิ่งนี้และยังคงใช้ php.exe CGI SAPI ซึ่งเป็นเรื่องที่น่าเสียดาย - โมดูลมักจะเร็วขึ้นสามถึงห้าเท่า

อย่างไรก็ตามมีข้อได้เปรียบที่สำคัญอย่างหนึ่งในการใช้เวอร์ชัน CGI นั่นคือ PHP จะอ่านการตั้งค่าทุกครั้งที่คุณโหลดหน้าเว็บ เมื่อ PHP ทำงานเป็นโมดูลการเปลี่ยนแปลงใด ๆ ที่คุณทำในไฟล์ php.ini จะไม่เกิดขึ้นจนกว่าคุณจะรีสตาร์ทเว็บเซิร์ฟเวอร์ซึ่งทำให้เวอร์ชัน CGI ดีกว่าหากคุณกำลังทดสอบการตั้งค่าใหม่จำนวนมากและต้องการดูการตอบสนองทันที


@JohannEchavarria ถ้าคุณไม่ได้เพิ่มอะไรบ้าๆมากมายการรีสตาร์ทเซิร์ฟเวอร์จะใช้เวลาเพียงไม่กี่วินาที สำหรับระบบสมัยใหม่ "ปกติ" ที่มี SSD ใช้เวลาไม่ถึง 2 วินาที
Pacerier

12

เซิร์ฟเวอร์ของคุณจำเป็นต้องติดตั้งโมดูล php เพื่อให้สามารถแยกวิเคราะห์โค้ด php ได้

หากคุณใช้ Ubuntu คุณสามารถทำได้อย่างง่ายดายด้วย

sudo apt-get install apache2

sudo apt-get install php5

sudo apt-get install libapache2-mod-php5

sudo /etc/init.d/apache2 restart

มิฉะนั้นคุณอาจรวบรวม apache ด้วย php: http://dan.drydog.com/apache2php.html

การระบุระบบปฏิบัติการเซิร์ฟเวอร์ของคุณจะช่วยให้ผู้อื่นตอบคำถามได้เฉพาะเจาะจงมากขึ้น


5

หมายความว่าคุณต้องติดตั้ง PHP เป็นโมดูลใน Apache แทนที่จะเริ่มเป็นสคริปต์ CGI


3

เพื่อเพิ่มคำตอบเหล่านี้คือ mod_php เป็นวิธีที่เก่าแก่ที่สุดและช้าที่สุดในเซิร์ฟเวอร์ HTTPD เพื่อใช้ PHP ไม่แนะนำเว้นแต่คุณจะใช้ Apache HTTPD และ PHP เวอร์ชันเก่า php-fpm และ proxy_cgi เป็นวิธีการที่ต้องการ


0

mod_php เป็นล่าม PHP

จากเอกสารสิ่งสำคัญอย่างหนึ่งของ mod_php คือ

"mod_php ไม่ใช่เธรดที่ปลอดภัยและบังคับให้คุณติดกับ mpm prefork (หลายกระบวนการไม่มีเธรด) ซึ่งเป็นการกำหนดค่าที่ช้าที่สุดที่เป็นไปได้"

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.