Mengapa versi PHP berbeda dalam phpinfo () dan CLI?

27

Saya menyadari bahwa ada kesalahan pencocokan antara versi PHP yang dilaporkan oleh phpinfo()dan php -v(dalam CLI).

phpinfo():  5.5.24
php -v: 5.6.9

Saya bekerja pada Mac OS X 10.10 (Yosemite) dan menginstal perpustakaan ( php-version) untuk mencoba mengelola versi PHP.

Ini melaporkan saya 3 versi berbeda yang diinstal pada laptop saya:

  5.4.41
  5.5.25
* 5.6.9

Saya ingin mengatur versi PHP yang sama di Apache dan CLI.

Bagaimana saya bisa memberi tahu Apache versi PHP yang digunakan?

Saya mencoba menulis baris ini di httpd.conf:

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

Kemudian:

sudo apachectl restart

Tetapi semua ini tidak menyelesaikan masalah ... Dalam info PHP saya, saya masih memiliki: 5.5.24

Salvatore Dibenedetto
sumber
1
@bertieb Pertanyaannya memang mirip dengan yang lain. Saya baru saja menjawabnya , tetapi ada masalah khusus di sini yang akan saya coba jawab juga.
JakeGould

Jawaban:

14

Beberapa masalah berbeda di sini semuanya bersembunyi di bawah konsep kebingungan versi PHP, jadi akan mencoba untuk mengatasi masing-masing sejelas mungkin. Pertama ini:

Saya menyadari bahwa ada kesalahan pencocokan antara versi PHP yang dilaporkan oleh phpinfo()dan php -v(dalam CLI).

phpinfo():  5.5.24
php -v: 5.6.9

PHP CLI tidak sama dengan modul PHP Apache.

Seperti yang saya jelaskan dalam jawaban untuk pertanyaan lain di sini , jangan panik! Jika Anda khawatir tentang versi PHP yang digunakan server Apache Anda, output dari phpinfo()selalu apa yang harus Anda perhatikan. Modul Apache PHP dan binary baris perintah PHP adalah dua hal berbeda yang tidak saling mengganggu.

Perhatikan output dari phpinfo()jika Anda khawatir tentang pengaturan versi modul PHP yang benar di Apache.

Yang mengatakan, Anda tampaknya masih memiliki masalah mendapatkan modul PHP yang benar dimuat di Apache:

Saya mencoba menulis baris ini di httpd.conf:

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

Pastikan server Apache Anda memuat modul PHP yang benar.

Sementara apa yang Anda lakukan secara teknis tampak benar, satu-satunya alasan saya dapat melihat ini tidak bekerja adalah entah bagaimana ada LoadModule php5_modulearahan lain dalam file konfigurasi Apache yang menggantikan nilai yang Anda tetapkan baris itu.

Saya akan merekomendasikan mencari melalui httpd.conf- yang saya asumsikan terletak di sini /etc/apache2/httpd.conf- dan melihat apakah mungkin memang ada LoadModule php5_moduleyang Anda lewatkan atau tidak perhatikan ketika mengedit file itu. Melihat file saya yang setara di Mac OS X 10.9.5 Saya melihat baris ini dikomentari — karena saya tidak menggunakan pengaturan Mac / X Apache / PHP — dan membaca sesuatu seperti ini:

#LoadModule php5_module libexec/apache2/libphp5.so

Tentu saja dalam kasus Anda itu akan dihapus. Rincian lebih lanjut tentang konfigurasi Apache dan PHP untuk pengembangan web dapat ditemukan di situs ini .

Serius mempertimbangkan menggunakan MAMP sebagai alternatif untuk kebiasaan Mac OS X Apache / PHP.

Sekarang semua itu berkata, Saya tidak tahu apa yang Anda coba lakukan, tetapi jika Anda melakukan pengembangan web pada sistem Mac OS X Anda harus serius mempertimbangkan menggunakan MAMP alih-alih meretas tumpukan web inti Mac OS X untuk mendapatkan sesuatu berlari.

Manfaat MAMP adalah tingkat produksi yang sangat setara dengan Mac OS X dari tumpukan LAMP. Dan karena diarahkan untuk pengembangan web di dunia nyata, ia memiliki semua modul dan konfigurasi konfigurasi persis seperti yang seharusnya mereka atur.

Masalah inti dengan Apache dan PHP di Mac OS X adalah perangkat lunak biasanya ketinggalan zaman, rasa sakit untuk mengkonfigurasi / tweak dan mengelola dan sakit kepala untuk debug ketika hal-hal seperti ini terjadi. Dan bagaimana jika pembaruan Mac OS X datang yang menghapus pengaturan Anda dengan hati-hati pengaturan Apache dan PHP? Anda kembali ke titik awal.

JakeGould
sumber
Mengapa Anda menjawab Duplikat ini alih-alih menandai pertanyaan sebagai duplikat?
Pmpr
@Trix Karena "duplikat" itu adalah jawaban yang mirip dengan pertanyaan berbeda yang diposting dalam beberapa hari satu sama lain. Saat saya menjawab komentar serupa di sini , “Pertanyaan @bertieb memang mirip dengan yang lainnya. Saya baru saja menjawabnya, tetapi ada masalah khusus di sini yang akan saya coba jawab juga. - JakeGould 12 Sep 15 'jam 0:42 ”Satu pertanyaan adalah tentang perbedaan antara PHP dari baris perintah. Yang lain adalah tentang hal itu DAN modul PHP.
JakeGould
4

Saya menemukan solusi untuk masalah saya. Setelah mengedit /etc/apache2/httpd.confsaya biasa memulai ulang apache menggunakan:

sudo apachectl restart

Untuk beberapa alasan menggunakan perintah ini Apache tidak akan mengambil pembaruan di httpd.confdan memuat konfigurasi lama.

Menggunakan:

sudo apachectl -k stop
sudo apachectl -k start

Buat semacam restart keras semua layanan dan juga membaca pembaruan dalam file konfigurasi dan akhirnya membaca jalur baru untuk php5_module:

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

Terima kasih juga @JakeGould atas penjelasannya .

Salvatore Dibenedetto
sumber
Diedit tulisan untuk menghapus -kbendera dari apachectlperintah karena jika Anda memeriksa apachectl -hbahwa bendera / opsi tidak ada di sana. Tidak tahu dari mana Anda mendapatkannya. Juga, ketika Anda menyatakan melakukan stopdan startmembereskan, yang aneh adalah bahwa restartpada sistem Linux melakukan hal itu. Jika Anda memeriksa skrip yang terletak di /usr/sbin/apachectl(itu skrip, jadi gunakan editor teks apa saja untuk melihatnya) sepertinya melakukan hal yang sama. Mungkin pada Mac OS X LaunchDaemonsuntuk Apache hanya "aneh" jika dibandingkan dengan Linux standar? Bagaimanapun, bagus Anda memecahkan ini.
JakeGould
Hanya untuk info Anda, saya menemukan perintah dengan bendera -k di sini: httpd.apache.org/docs/2.2/stopping.html
Salvatore Dibenedetto
Anda benar. Saya melihat melalui "bantuan" keluaran /usr/sbin/apachectl(tanpa perintah apa pun) dan jelas menyatakan [-k start|restart|graceful|graceful-stop|stop],. Saya sudah terbiasa dengan cara Apache bekerja pada sistem Linux sekarang sepertinya saya lupa tentang -kflag untuk digunakan dengan apachectlperintah. Jadi mengetahui bahwa masalah sebenarnya yang Anda miliki adalah Anda mencoba untuk memulai kembali dengan perintah ini sudo apachectl restartpadahal seharusnya -kbendera ditambahkan seperti ini sudo apachectl -k restart.
JakeGould