PHP sürümü neden phpinfo () ve CLI'da farklı?


27

phpinfo()Ve php -v(CLI) tarafından bildirilen PHP sürümü arasında bir eşleşme olduğunu fark ettim .

phpinfo():  5.5.24
php -v: 5.6.9

Bir Mac OS X 10.10 (Yosemite php-version) üzerinde çalışıyorum ve PHP sürümlerini yönetmeyi denemek için bir kütüphane ( ) kurdum .

Bana dizüstü bilgisayarımda yüklü 3 farklı sürüm bildirir:

  5.4.41
  5.5.25
* 5.6.9

PHP'nin aynı sürümünü hem Apache'de hem de CLI'de ayarlamak istiyorum.

Apache'ye hangi PHP sürümünün kullanıldığını nasıl söyleyebilirim?

Bu satırı şu şekilde yazmaya çalıştım httpd.conf:

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

Sonra:

sudo apachectl restart

Fakat bütün bunlar sorunu çözmedi… PHP bilgilerimde hala var: 5.5.24



1
@bertieb Soru gerçekten de diğerine benzer. Sadece cevap verdim , ama burada da cevaplamaya çalışacağım belirli bir sorun var.
JakeGould,

Yanıtlar:


14

PHP sürüm karmaşası kavramı altında saklanan birkaç farklı konu, her birini mümkün olduğunca net bir şekilde ele almaya çalışacaktır. İlk önce bu:

phpinfo()Ve php -v(CLI) tarafından bildirilen PHP sürümü arasında bir eşleşme olduğunu fark ettim .

phpinfo():  5.5.24
php -v: 5.6.9

PHP CLI, PHP Apache modülüyle aynı değildir.

Buradaki diğer sorunun cevabında açıkladığım gibi, panik yapmayın! Apache sunucunuzun hangi PHP sürümünü kullandığı konusunda endişeleriniz varsa, çıktısı phpinfo()her zaman dikkat etmeniz gereken şeydir. Apache PHP modülü ve PHP komut satırı ikili, birbiriyle çakışmayan iki farklı şeydir.

phpinfo()Apache'de doğru PHP modülü sürümünü ayarlama konusunda endişeleriniz varsa , sadece çıktısına dikkat edin.

Bununla birlikte, hala Apache'ye yüklenen doğru PHP modülünü alma konusunda sorun yaşıyor gibi görünüyorsunuz:

Bu satırı şu şekilde yazmaya çalıştım httpd.conf:

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

Apache sunucunuzun doğru PHP modülünü yüklediğinden emin olun.

Teknik olarak doğru yaptığınız şey doğru görünse de, bunun çalışmamasını görebilmemin tek sebebi, bir şekilde LoadModule php5_moduleApache config dosyalarında, o satırı belirlediğiniz değerin yerini alan başka bir yönerge olmasıdır.

httpd.confBurada bulunduğumu düşündüğüm yerlere bakmanızı tavsiye ederim /etc/apache2/httpd.confve belki de LoadModule php5_modulebu dosyayı düzenlerken kaçırdığınız veya farketmediğiniz bir başkası olup olmadığını görün. Mac OS X 10.9.5'teki eşdeğer dosyama bakıldığında satırın yorumlandığını görüyorum - Mac OS X Apache / PHP kurulumlarını kullanmıyorum - ve bunun gibi bir şey okuyor:

#LoadModule php5_module libexec/apache2/libphp5.so

Tabii ki senin durumunda bu uncommented olurdu. Web sitesi için Apache ve PHP'yi yapılandırma hakkında daha fazla ayrıntı bu sitede bulunabilir .

Mac OS X Apache / PHP tuhaflıklarına alternatif olarak MAMP kullanmayı ciddi olarak düşünün.

Şimdi bunların hepsi, ne yapmaya çalıştığınızı bilmiyorum, ancak bir Mac OS X sisteminde web geliştirme yapıyorsanız, bir şeyler almak için çekirdek Mac OS X web yığınını hacklemek yerine MAMP'ı kullanmayı düşünmelisiniz. çalışan.

MAMP'ın yararı, bir LAMP yığınının eşdeğer bir üretim seviyesi Mac OS X'tir. Ve gerçek dünya web geliştirmeye yönelik olduğu için, tüm modülleri vardır ve ayarları tam olarak ayarlanmış olması gerektiği gibi yapar.

Mac OS X'teki Apache ve PHP ile ilgili temel sorun, yazılımın genellikle eski olması, yapılandırılması / ince ayar yapılması ve yönetilmesi için bir acı ve böyle bir şey olduğunda hata ayıklamak için bir baş ağrısıdır. Peki ya Mac OS X güncellemesi gelirse, dikkatle Apache ve PHP ayarlarınızı temizler? İlk kareye geri döndün.


Soruyu yinelemeli olarak işaretlemek yerine neden bu Yinelemeye cevap verdiniz ?
Pmpr

@Trix Çünkü “yinelenen”, birbirlerinin günleri içinde gönderilen farklı bir soruya benzer bir cevaptır. Burada benzer bir yoruma cevap verdiğim gibi , “@bertieb Soru gerçekten diğerine benzer. Sadece cevap verdim, ama burada da cevaplamaya çalışacağım belirli bir sorun var. - JakeGould 0 Eylül 12 '15 0:42 ”Bir soru PHP arasındaki komut satırından farkı ile ilgili. Diğeri ise bu ve PHP modül sorunları.
JakeGould

4

Sorunumun çözümünü buldum. Düzenlemeden sonra /etc/apache2/httpd.confkullanarak apache'yi yeniden başlattım:

sudo apachectl restart

Bazı sebeplerden dolayı Apache bu komutu kullanarak güncellemeleri getirmeyecek httpd.confve eski config dosyasını yükleyecektir.

Kullanımı:

sudo apachectl -k stop
sudo apachectl -k start

Tüm hizmetleri yeniden başlatmayı zorlaştırın ve ayrıca yapılandırma dosyasındaki güncellemeleri okuyup, aşağıdakiler için yeni yolu okuyun php5_module:

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

Ayrıca @JakeGould'un açıklaması için teşekkürler .


Bayrak / seçeneğin orada olmadığını kontrol ederseniz , -kbayrağı apachectlkomutlardan kaldırmak için yazıyı düzenledi apachectl -h. Bunu nereden aldığın hakkında hiçbir fikrim yok. Eğer yapan devlet Ayrıca, süre stopve startşeyler netleşmiştir, tuhaf şey olduğunu restartLinux sistemlerinde tam olarak bunu yapıyor. /usr/sbin/apachectlİçinde bulunan betiği kontrol ederseniz (bu betiğin görüntülenmesi için herhangi bir metin düzenleyicisini kullanın) tam olarak aynı şekilde görünüyor. Belki Mac OS X'te, LaunchDaemonsstandart Apache ile karşılaştırıldığında Apache için for "tuhaf" mı? Her neyse, bunu çözmen harika.
JakeGould


Haklısın. “Yardım” çıktısına baktım /usr/sbin/apachectl(herhangi bir komut olmadan) ve açıkça belirtildi [-k start|restart|graceful|graceful-stop|stop]. Apache'nin Linux sistemlerinde çalışmasına çok alışkınım, sanırım komutları -kkullanmak için bayrağımı unuttum apachectl. Yani, asıl sorunun sudo apachectl restart, bunun -kgibi bir bayrak eklemesi gerektiği zaman bu komutla yeniden başlatmaya çalıştığınız olduğunu bilmek sudo apachectl -k restart.
JakeGould
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.