ทำไมเวอร์ชัน PHP แตกต่างกันใน phpinfo () และ CLI


27

ฉันรู้ว่ามีการจับคู่พลาดระหว่างเวอร์ชัน PHP ที่รายงานโดยphpinfo()และphp -v(ใน CLI)

phpinfo():  5.5.24
php -v: 5.6.9

ฉันกำลังทำงานกับ Mac OS X 10.10 (โยเซมิตี) และติดตั้งไลบรารี ( php-version) เพื่อพยายามจัดการเวอร์ชัน PHP

มันรายงานว่าฉันติดตั้งแล็ปท็อปของฉัน 3 เวอร์ชันแตกต่างกัน

  5.4.41
  5.5.25
* 5.6.9

ฉันต้องการตั้งค่า PHP รุ่นเดียวกันทั้งใน Apache และ CLI

ฉันจะบอก Apache ได้ว่าใช้ PHP เวอร์ชันไหน

ฉันพยายามเขียนบรรทัดนี้ในhttpd.conf:

LoadModule php5_module    /usr/local/opt/php56/libexec/apache2/libphp5.so

แล้ว:

sudo apachectl restart

แต่ทั้งหมดนี้ไม่ได้แก้ปัญหา ... ในข้อมูล PHP ของฉันฉันยังมี: 5.5.24


ดูเพิ่มเติมที่superuser.com/questions/969861/…
bertieb

1
@bertieb คำถามก็เหมือนกับคำถามอื่น ๆ ฉันเพิ่งตอบไปแต่มีปัญหาเฉพาะที่นี่ฉันจะพยายามตอบเช่นกัน
JakeGould

2
มีความเป็นไปได้ที่ซ้ำกันของphpinfo () และ php -v แสดงเวอร์ชั่นที่แตกต่างกันของ PHP
Pmpr

คำตอบ:


14

ปัญหาที่แตกต่างกันเล็กน้อยที่นี่ทั้งหมดซ่อนอยู่ภายใต้แนวคิดของความสับสนของเวอร์ชัน PHP ดังนั้นจะพยายามระบุที่อยู่แต่ละรายการให้ชัดเจนที่สุดเท่าที่จะทำได้ แรกนี้:

ฉันรู้ว่ามีการจับคู่พลาดระหว่างเวอร์ชัน PHP ที่รายงานโดยphpinfo()และphp -v(ใน CLI)

phpinfo():  5.5.24
php -v: 5.6.9

PHP CLI ไม่เหมือนกับ PHP Apache module

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

เพียงแค่ให้ความสนใจกับผลลัพธ์ของphpinfo()ถ้าคุณมีความกังวลเกี่ยวกับการตั้งค่าโมดูล PHP รุ่นที่ถูกต้องใน Apache

ที่กล่าวว่าคุณยังคงมีปัญหาในการโหลดโมดูล PHP ที่ถูกต้องใน Apache:

ฉันพยายามเขียนบรรทัดนี้ในhttpd.conf:

LoadModule php5_module    /usr/local/opt/php56/libexec/apache2/libphp5.so

ตรวจสอบให้แน่ใจว่าเซิร์ฟเวอร์ Apache ของคุณกำลังโหลดโมดูล PHP ที่ถูกต้อง

ในขณะที่สิ่งที่คุณทำดูเหมือนว่าถูกต้องในทางเทคนิคเหตุผลเดียวที่ฉันเห็นได้ว่าสิ่งนี้ไม่ทำงานคือมีLoadModule php5_moduleคำสั่งอื่นในไฟล์กำหนดค่า Apache ที่แทนที่ค่าที่คุณตั้งค่าบรรทัดนั้น

ฉันขอแนะนำให้ดูผ่านhttpd.conf- ซึ่งฉันคิดว่าอยู่ที่นี่/etc/apache2/httpd.conf- และดูว่าบางทีอาจมีอีกอย่างLoadModule php5_moduleที่คุณพลาดหรือไม่ได้สังเกตเห็นเมื่อแก้ไขไฟล์นั้น ดูไฟล์ที่เทียบเท่าของฉันใน Mac OS X 10.9.5 ฉันเห็นว่าบรรทัดถูกคอมเม้นท์เนื่องจากฉันไม่ได้ใช้การตั้งค่า Mac OS X Apache / PHP และอ่านสิ่งนี้:

#LoadModule php5_module libexec/apache2/libphp5.so

แน่นอนในกรณีของคุณมันจะไม่แสดงความคิดเห็น รายละเอียดเพิ่มเติมเกี่ยวกับการกำหนดค่า Apache และ PHP สำหรับการพัฒนาเว็บสามารถพบได้ในเว็บไซต์นี้

พิจารณาใช้ MAMP อย่างจริงจังเป็นทางเลือกแทนนิสัยใจคอ Mac OS X Apache / PHP

ตอนนี้สิ่งที่กล่าวมาทั้งหมดฉันไม่รู้ว่าคุณกำลังพยายามทำอะไร แต่ถ้าคุณกำลังพัฒนาเว็บไซต์บนระบบ Mac OS X คุณควรพิจารณาใช้MAMPอย่างจริงจังแทนการแฮ็คเว็บสแต็กหลักของ Mac OS X เพื่อให้ได้สิ่งต่าง ๆ วิ่ง.

ประโยชน์ของ MAMP คือมันเป็น Mac OS X ระดับการผลิตที่เทียบเท่ากับ LAMP stack และเนื่องจากมันมุ่งสู่การพัฒนาเว็บในโลกแห่งความเป็นจริงมันจึงมีโมดูลและการตั้งค่าทั้งหมดตามที่ควรจะมีในการตั้งค่า

ปัญหาหลักของ Apache และ PHP บน Mac OS X คือซอฟต์แวร์มักล้าสมัยความเจ็บปวดในการกำหนดค่า / ปรับแต่งและจัดการและปวดหัวในการแก้ไขปัญหาเมื่อเกิดเหตุการณ์เช่นนี้ และจะเป็นอย่างไรถ้ามีการอัปเดต Mac OS X ที่จะลบการตั้งค่า Apache และ PHP ออกอย่างระมัดระวัง คุณกลับมาที่จตุรัสหนึ่ง


เหตุใดคุณจึงตอบซ้ำนี้แทนที่จะทำเครื่องหมายคำถามว่าซ้ำซ้อน
Pmpr

@Trix เพราะนั่น“ ซ้ำ” เป็นคำตอบที่คล้ายกันสำหรับคำถามที่แตกต่างกันที่โพสต์ภายในไม่กี่วัน ในขณะที่ฉันตอบความคิดเห็นที่คล้ายกันที่นี่ “ @bertieb คำถามจะคล้ายกับคำถามอื่น ๆ ฉันเพิ่งตอบไป แต่มีปัญหาเฉพาะที่นี่ฉันจะพยายามตอบเช่นกัน - JakeGould 12 กันยายน '15 เวลา 0:42” หนึ่งคำถามเกี่ยวกับความแตกต่างระหว่าง PHP จากบรรทัดคำสั่ง อื่น ๆ เกี่ยวกับที่และโมดูล PHP ปัญหา
JakeGould

4

ฉันพบวิธีแก้ปัญหาของฉันแล้ว หลังจากแก้ไข/etc/apache2/httpd.confฉันใช้รีสตาร์ท apache โดยใช้:

sudo apachectl restart

ด้วยเหตุผลบางอย่างที่ใช้คำสั่งนี้ Apache จะไม่ดึงข้อมูลอัพเดตในhttpd.confและโหลดการตั้งค่าเก่า

โดยใช้:

sudo apachectl -k stop
sudo apachectl -k start

สร้างการรีสตาร์ทอย่างหนักของบริการทั้งหมดและอ่านการอัปเดตในไฟล์ปรับแต่งแล้วอ่านเส้นทางใหม่สำหรับphp5_module:

/usr/local/opt/php56/libexec/apache2/libphp5.so

ขอบคุณ@JakeGould สำหรับคำอธิบายของเขาด้วย


แก้ไขการโพสต์เพื่อลบการ-kตั้งค่าสถานะจากapachectlคำสั่งเนื่องจากถ้าคุณตรวจสอบapachectl -hว่าตัวเลือกการตั้งค่าสถานะ / ไม่อยู่ที่นั่น ไม่มีความคิดว่าคุณได้สิ่งนั้นมาจากไหน นอกจากนี้ในขณะที่คุณทำstopและstartล้างสิ่งต่าง ๆ สิ่งที่แปลกก็คือrestartบนระบบ Linux ทำสิ่งนั้นอย่างแน่นอน หากคุณตรวจสอบสคริปต์ที่อยู่ใน/usr/sbin/apachectl(มันเป็นสคริปต์ดังนั้นใช้โปรแกรมแก้ไขข้อความเพื่อดู) ดูเหมือนว่าจะทำเช่นนั้นเช่นกัน บางทีใน Mac OS X LaunchDaemonsสำหรับ Apache นั้น“ แปลก” เมื่อเทียบกับ Linux มาตรฐาน? อย่างไรก็ตามคุณแก้ไขได้ดี
JakeGould

สำหรับข้อมูลของคุณฉันพบคำสั่งด้วยแฟล็ก
Salvatore Dibenedetto

คุณถูก. ฉันตรวจสอบผลลัพธ์“ ช่วย” ของ/usr/sbin/apachectl(โดยไม่ต้องมีคำสั่งใด ๆ ) และมันระบุอย่างชัดเจน, [-k start|restart|graceful|graceful-stop|stop]. ฉันคุ้นเคยกับวิธีที่ Apache ใช้งานบนระบบ Linux ได้แล้วตอนนี้ดูเหมือนว่าฉันลืมเกี่ยวกับการ-kตั้งค่าสถานะเพื่อใช้กับapachectlคำสั่ง ดังนั้นการรู้ว่าปัญหาที่แท้จริงที่คุณมีคือคุณกำลังพยายามที่จะเริ่มต้นใหม่ด้วยคำสั่งนี้sudo apachectl restartเมื่อมันควรจะได้มีธงเพิ่มเช่นนี้-k sudo apachectl -k restart
JakeGould
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.