ฉันจะบอก Apache ให้ใช้ PHP ได้อย่างไร


34

ฉันทำงานApache2บนMac OS X (10.5) ฉันเพิ่งรวบรวมPHP 5.2.8และในที่สุดก็pdo-mysqlทำงานได้(หรืออย่างนั้นฉันคิดว่า)

คำสั่งเทอร์มินัลนี้:

php --version

แสดง5.2.8และฉันได้ติดตั้งโมดูลที่ถูกต้องแล้ว

แต่เมื่อฉันทำphpinfo(), Apacheทิ้งPHP 5.2.6 (รุ่นก่อนหน้าของฉัน, ไม่มีpdo_mysql)

ฉันจะบอก Apache ที่โหลด PHP ได้อย่างไร httpd.confมีเส้น:

LoadModule php5_module        libexec/apache2/libphp5.so

แต่ฉันไม่รู้ว่ามันคืออะไร

นั่นคือสิ่งที่ฉันต้องเปลี่ยน?


เมื่อคุณรวบรวม php คุณใช้ทำการติดตั้งหรือไม่ หากคุณพบเส้นทางที่ติดตั้งโมดูลของคุณและเปลี่ยนการตั้งค่า Apache ให้ชี้ไปที่ Mac มี apache เวอร์ชันเป็นของตัวเองและ php5 ติดตั้งไว้แล้วซึ่งเป็นสาเหตุที่คุณเห็นเวอร์ชันอื่น
Ruggs


ผู้ใช้ที่อยู่อาศัยในประเทศดูความคิดเห็น @Mick
BatteryAcid

1
คุณแก้ปัญหาของคุณหรือไม่ คำตอบทั้งหมดเป็นเพียงสิ่งที่บ้า
Pmpr

ไม่มีคำตอบเหล่านี้ตอบคำถาม นี้เป็นที่แปลกประหลาด ...
quant

คำตอบ:


14

ฉันคิดว่าคำตอบเหล่านี้ไม่ได้ตอบคำถามจริงๆ httpd -Vระดับรากจะถูกกำหนดโดยใช้คำสั่ง สิ่งนี้จะแสดงให้คุณเห็นว่าตัวเลือกใดที่ Apache daemon สร้างขึ้นด้วยเวลารวบรวม นี่คือสิ่งที่ตัวควบคุมhttpdกำหนดตำแหน่งที่จะมองหาการกำหนดค่า ไฟล์และ. so โมดูลโดยค่าเริ่มต้น

ตัวอย่างเช่น:

% httpd -V
Server version: Apache/2.2.17 (Unix)
Server built:   Dec 17 2010 11:58:24
Server's Module Magic Number: 20051115:25
Server loaded:  APR 1.3.12, APR-Util 1.3.9
Compiled using: APR 1.3.12, APR-Util 1.3.9
Architecture:   32-bit
Server MPM:     Prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APACHE_MPM_DIR="server/mpm/prefork"
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=128
 -D HTTPD_ROOT="/etc/httpd"
 -D SUEXEC_BIN="/usr/sbin/suexec"
 -D DEFAULT_PIDLOG="logs/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_LOCKFILE="logs/accept.lock"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"

HTTPD_ROOTบรรทัดที่สำคัญในการส่งออกที่เป็น ที่กำหนดROOTไดเรกทอรีของ Apache ที่จะเริ่มต้น/etc/httpdในกรณีของฉันเมื่อมองหาการกำหนดค่า ไฟล์และโมดูล

หมายเหตุ:นี้ไม่ได้เป็นสิ่งเดียวกับROOT DocumentRootสิ่งนี้ROOTมีความเฉพาะเจาะจงกับวิธีhttpdรวบรวม daemon DocumentRootสำหรับการระบุว่าhttpddaemon ควรเริ่มค้นหาเนื้อหาเว็บจริง (ไฟล์. html และอื่น ๆ )

สำหรับhttpd.confไฟล์ของฉันฉันมีรายการโหลดต่อไปนี้:

LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so

ให้นี้เส้นทางเต็มไปยังโมดูลของคุณจะเป็นเช่น:

/etc/httpd/modules/mod_auth_basic.so

นี่คือจากระบบCentOS 5.xแต่เทคนิคยังคงเหมาะสม

BTW อาจสร้างความสับสนเล็กน้อยเพราะในกรณีของ CentOSไฟล์จะถูกจัดระเบียบที่นี่:

% ls /usr/lib/httpd/modules/
libphp5.so            mod_authnz_ldap.so      mod_dav_fs.so      mod_headers.so       mod_perl.so            mod_speling.so

... จากนั้นเข้าถึง Apache daemon httpdผ่านเส้นทางนี้:

% ls -l /etc/httpd/
total 12
drwxr-xr-x 2 root root 4096 Apr 26  2011 conf
drwxr-xr-x 3 root root 4096 Apr 26  2011 conf.d
-rw-r--r-- 1 root root   18 Feb 24  2009 htpasswd
lrwxrwxrwx 1 root root   19 Apr 26  2011 logs -> ../../var/log/httpd
lrwxrwxrwx 1 root root   27 Apr 26  2011 modules -> ../../usr/lib/httpd/modules
lrwxrwxrwx 1 root root   13 Apr 26  2011 run -> ../../var/run

modulesเชื่อมต่อการเชื่อมโยง->/etc/httpd/usr/lib/httpd/modules


slmตามที่ฉันระบุไว้ในโพสต์ก่อนหน้านี้ ServerRoot ถูกกำหนดไว้ในคำสั่ง ServerRoot และไม่มีอะไรเกี่ยวข้องกับ HTTPD_ROOT ซึ่งจะแสดงผ่าน "httpd -V" โปรดดูหน้าเว็บของ Apache ที่อ้างอิงในโพสต์ก่อนหน้าของฉันหรือหากคุณต้องการเปลี่ยนคำสั่ง ServerRoot ในไฟล์ httpd.confของคุณและดูเอง
billynoah

ServerRoot เป็นวิธีการแทนที่ HTTPD_ROOT HTTPD_ROOT ถูกตั้งค่าในเวลารวบรวมผ่านสวิตช์ --prefix configure โพสต์ของคุณสร้างความแตกต่าง b / w ServerRoot และ DocumentRoot ที่แตกต่างกัน httpd.apache.org/docs/current/mod/core.html#serverroot ดีใจที่เห็นคุณลงทะเบียนชื่อด้วยบัญชี SF ของคุณ!
slm

นี่เป็นการตอบคำถามจริงๆหรือไม่: "ฉันจะบอก Apache ให้ใช้ PHP ได้อย่างไร ?
Pmpr

Trix the OP ยอมรับแล้วใช่
slm

@slm นี่ไม่ตอบคำถาม
quant

4

คุณสามารถค้นหาไฟล์ในระบบของคุณด้วยlocateคำสั่ง:

# locate libphp5.so

มันจะพิมพ์เส้นทางแบบเต็มของไฟล์ทั้งหมดด้วยชื่อนั้น /usr/libexec/apache2/libphp5.soฉันมีหนึ่งที่


1
แล้วอะไรล่ะ นี่เป็นคำตอบของคำถามหรือไม่ หรือวิธีหาไฟล์
Pmpr

1
@Trix ผู้ถามกล่าวว่า "ฉันไม่รู้ว่าเกิดอะไรขึ้น ฉันได้แสดงวิธีการค้นหาว่าอยู่ที่ไหน ฉันสันนิษฐานว่าเมื่อผู้ถามเห็นที่ตั้งอื่น ๆ ทั้งหมดของชื่อไฟล์ที่เป็นปัญหาจะเห็นได้ชัดว่าจะเปลี่ยนการตั้งค่าเพื่อใช้ที่แตกต่างกันอย่างไร
Rob Kennedy

4

ไดเรกทอรีหลักของโมดูลโหลดใน httpd.conf (เช่น: libexec/apache2/libphp5.so) จะถูกกำหนดโดยคำสั่งซึ่งเริ่มต้นโดยปกติจะตั้งค่าให้ServerRoot /usrฉันจะไม่แนะนำให้เปลี่ยนแปลงสิ่งนี้ แต่มันอาจจะมีประโยชน์สำหรับใครบางคนที่จะรู้ว่าเส้นทางนั้นถูกกำหนดไว้อย่างไร

เว็บไซต์ของ Apache บอกว่าเกี่ยวกับServerRoot :

เส้นทางสัมพัทธ์ในคำสั่งการกำหนดค่าอื่น ๆ (เช่นรวมหรือ LoadModule เป็นต้น) จะถูกนำมาสัมพันธ์กับไดเรกทอรีนี้

นอกจากนี้ความคิดเห็นไฟล์ httpd.conf เริ่มต้นยังอ่าน:

ServerRoot: ส่วนบนสุดของแผนผังไดเรกทอรีซึ่งมีการกำหนดค่าข้อผิดพลาดและไฟล์บันทึกของเซิร์ฟเวอร์


2
OP ไม่ได้อยู่หลังการกำหนดให้ ServerRoot เขาได้ถามคำถามว่า "ฉันจะบอก Apache ให้ใช้ PHP ได้อย่างไร" หากคุณต้องการที่จะตอบคำถามจริงๆให้ตอบมัน
Pmpr

3

Apache ควรมองหาโมดูลใน "/ usr / libexec / httpd /" ในนั้นคุณจะพบไฟล์หรือ symlink ชื่อ "libphp5.so" หากเป็น symlink คุณจะต้องเชื่อมโยงไปยัง 5.2.8 ใหม่ libphp5.so มิฉะนั้นเพียงคัดลอก 5.2.8 libphp5.so ไปที่ "/ usr / libexec / httpd /" และรีสตาร์ท apache ด้วย "sudo apachectl restart" .


0

ฉันติดตั้ง Apache และ PHP บนเซิร์ฟเวอร์ตัวใดตัวหนึ่งแล้ว สิ่งนี้ถูกติดตั้งโดยผู้ดูแลระบบ sys ก่อนหน้า ทั้ง Apache และ PHP เป็นไปตามแหล่งที่มา นอกจากนี้ยังมีการติดตั้ง PHP เริ่มต้น เพื่อทราบว่า Apache ใช้ PHP ชนิดใด ฉันเรียกใช้คำสั่งด้านล่าง

   <Install Dir of PHP>/bin/php -i | grep apxs

สิ่งนี้ทำให้ฉันมีเส้นทางไป apache apx

  APACHE_HOME/bin/apxs

นี่ทำให้ฉันมีข้อมูลเกี่ยวกับ Apache ที่กำลังถูกใช้งานโดย PHP นี้ php เริ่มต้นให้ข้อผิดพลาดเมื่อฉันพิมพ์

#php -i | grep apxs 

 Failed loading opcache.so:  opcache.so: cannot open shared object file: No    such file or directory PHP Warning:  PHP Startup: Unable to load dynamic library     '<PHP_HOME>/lib/php/extensions/debug-non-zts-20121212/memcached.so' - <PHP_HOME>/lib/php/extensions/debug-non-zts-20121212/memcached.so: undefined symbol: OnUpdateLongGEZero in Unknown on line 0

ด้วยวิธีนี้ฉันสามารถเข้าใจ php ที่ Apache ใช้


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