Tại sao phiên bản PHP khác nhau trong phpinfo () và CLI?


27

Tôi nhận ra rằng có một sự trùng khớp giữa phiên bản PHP được báo cáo bởi phpinfo()php -v(trong CLI).

phpinfo():  5.5.24
php -v: 5.6.9

Tôi đang làm việc trên Mac OS X 10.10 (Yosemite) và đã cài đặt một thư viện ( php-version) để cố gắng quản lý các phiên bản PHP.

Nó báo cáo cho tôi 3 phiên bản khác nhau được cài đặt trên máy tính xách tay của tôi:

  5.4.41
  5.5.25
* 5.6.9

Tôi muốn đặt cùng một phiên bản PHP trong cả Apache và CLI.

Làm thế nào tôi có thể nói với Apache phiên bản PHP nào sử dụng?

Tôi đã cố gắng viết dòng này trong httpd.conf:

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

Sau đó:

sudo apachectl restart

Nhưng tất cả những điều này không giải quyết được vấn đề. Trong thông tin PHP của tôi, tôi vẫn có: 5.5.24



1
@bertieb Câu hỏi thực sự tương tự như câu hỏi khác. Tôi chỉ trả lời nó , nhưng có vấn đề cụ thể ở đây tôi cũng sẽ cố gắng trả lời.
JakeGould

Câu trả lời:


14

Một vài vấn đề khác nhau ở đây đều ẩn dưới khái niệm nhầm lẫn phiên bản PHP, vì vậy sẽ cố gắng giải quyết từng vấn đề một cách rõ ràng nhất có thể. Đầu tiên này:

Tôi nhận ra rằng có một sự trùng khớp giữa phiên bản PHP được báo cáo bởi phpinfo()php -v(trong CLI).

phpinfo():  5.5.24
php -v: 5.6.9

PHP CLI không giống như mô-đun PHP Apache.

Như tôi đã giải thích trong câu trả lời cho câu hỏi khác này ở đây , đừng hoảng sợ! Nếu bạn lo lắng về phiên bản PHP mà máy chủ Apache của bạn đang sử dụng, thì kết quả đầu ra phpinfo()luôn là điều bạn nên chú ý. Mô-đun PHP Apache và nhị phân dòng lệnh PHP là hai thứ khác nhau không can thiệp lẫn nhau.

Chỉ cần chú ý đến đầu ra phpinfo()nếu bạn quan tâm đến việc thiết lập phiên bản mô-đun PHP chính xác trong Apache.

Điều đó nói rằng, dường như bạn vẫn gặp sự cố khi tải mô-đun PHP chính xác được tải trong Apache:

Tôi đã cố gắng viết dòng này trong httpd.conf:

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

Hãy chắc chắn rằng máy chủ Apache của bạn đang tải mô-đun PHP chính xác.

Mặc dù những gì bạn đã làm về mặt kỹ thuật là chính xác, lý do duy nhất tôi có thể thấy để nó không hoạt động là bằng cách nào đó có một lệnh khác LoadModule php5_moduletrong các tệp cấu hình Apache thay thế giá trị bạn đang đặt dòng đó.

Tôi khuyên bạn nên xem qua các ứng dụng httpd.confmà tôi cho là nằm ở đây /etc/apache2/httpd.confvà xem có lẽ thực sự LoadModule php5_modulecó cái nào khác mà bạn đã bỏ lỡ hoặc không nhận thấy khi chỉnh sửa tệp đó không. Nhìn vào tệp tương đương của tôi trong Mac OS X 10.9.5, tôi thấy dòng này được nhận xét ra vì tôi không sử dụng các thiết lập Mac OS X Apache / PHP và đọc một cái gì đó như thế này:

#LoadModule php5_module libexec/apache2/libphp5.so

Tất nhiên trong trường hợp của bạn, nó sẽ không bị lỗi. Thông tin chi tiết về cách định cấu hình Apache và PHP để phát triển web có thể được tìm thấy trên trang web này .

Nghiêm túc xem xét việc sử dụng MAMP như một giải pháp thay thế cho các quirks Mac OS X Apache / PHP.

Bây giờ tất cả những gì đã nói, tôi không biết bạn đang cố gắng làm gì, nhưng nếu bạn đang phát triển web trên hệ thống Mac OS X, bạn nên nghiêm túc xem xét sử dụng MAMP thay vì hack ngăn xếp web Mac OS X cốt lõi để có được mọi thứ đang chạy.

Lợi ích của MAMP là Mac OS X ở mức sản xuất cực kỳ tương đương với ngăn xếp LAMP. Và vì nó hướng đến sự phát triển web trong thế giới thực, nó có tất cả các mô-đun và cấu hình thiết lập chính xác như người ta nên thiết lập chúng.

Vấn đề cốt lõi với Apache và PHP trên Mac OS X là phần mềm thường lỗi thời, khó cấu hình / điều chỉnh và quản lý và đau đầu để gỡ lỗi khi những thứ như thế này xảy ra. Và điều gì sẽ xảy ra nếu một bản cập nhật Mac OS X xuất hiện cùng với việc xóa sạch các thiết lập Apache và PHP được thiết lập cẩn thận của bạn? Bạn đã trở lại một hình vuông.


Tại sao bạn trả lời trùng lặp này thay vì đánh dấu câu hỏi là trùng lặp?
Pmpr

@Trix Bởi vì sao chép trùng lặp đó là một câu trả lời tương tự cho một câu hỏi khác nhau được đăng trong vòng vài ngày của nhau. Khi tôi trả lời một nhận xét tương tự ở đây , Câu hỏi @bertieb thực sự giống với câu hỏi khác. Tôi chỉ trả lời nó, nhưng có vấn đề cụ thể ở đây tôi cũng sẽ cố gắng trả lời. - JakeGould ngày 12 tháng 9 năm 15 lúc 3:42 Một câu hỏi là về sự khác biệt giữa PHP từ dòng lệnh. Khác là về vấn đề mô-đun AND PHP.
JakeGould

4

Tôi tìm thấy giải pháp cho vấn đề của tôi. Sau khi chỉnh sửa, /etc/apache2/httpd.conftôi sử dụng để khởi động lại apache bằng cách sử dụng:

sudo apachectl restart

Vì một số lý do sử dụng lệnh này, Apache sẽ không tìm nạp các bản cập nhật trong httpd.confvà tải cấu hình cũ.

Sử dụng:

sudo apachectl -k stop
sudo apachectl -k start

Thực hiện một loại khởi động lại cứng của tất cả các dịch vụ và cũng đọc các bản cập nhật trong tệp cấu hình và cuối cùng đọc đường dẫn mới cho php5_module:

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

Cũng cảm ơn @JakeGould vì lời giải thích của anh ấy .


Đã chỉnh sửa bài đăng để xóa -kcờ khỏi các apachectllệnh vì nếu bạn kiểm tra apachectl -hcờ / tùy chọn đó không tồn tại ở đó. Không biết bạn đã lấy nó từ đâu. Ngoài ra, trong khi bạn nêu rõ việc làm stopstartdọn dẹp mọi thứ, điều kỳ lạ là restarttrên các hệ thống Linux thực hiện chính xác điều đó. Nếu bạn kiểm tra tập lệnh nằm trong /usr/sbin/apachectl(đó là tập lệnh nên sử dụng bất kỳ trình soạn thảo văn bản nào để xem) thì có vẻ như nó cũng thực hiện chính xác điều đó. Có lẽ trên Mac OS X, LaunchDaemonsđối với Apache chỉ là một trò chơi kỳ quặc khi so sánh với Linux tiêu chuẩn? Dù sao, tuyệt vời bạn đã giải quyết điều này.
JakeGould

Chỉ cần thông tin của bạn, tôi đã tìm thấy lệnh có cờ -k ở đây: httpd.apache.org/docs/2.2/stopping.html
Salvatore Dibenedetto

Bạn nói đúng. Tôi đã xem qua kết quả đầu ra giúp đỡ của Viking /usr/sbin/apachectl(không có bất kỳ lệnh nào) và nó nêu rõ , [-k start|restart|graceful|graceful-stop|stop]. Tôi đã quá quen với cách Apache hoạt động trên các hệ thống Linux, dường như tôi quên mất -kcờ để sử dụng với apachectlcác lệnh. Vì vậy, biết rằng vấn đề thực sự bạn gặp phải là bạn đã cố gắng khởi động lại bằng lệnh này sudo apachectl restartkhi cần -kthêm cờ như thế này sudo apachectl -k restart.
JakeGould
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.