Perché la versione di PHP è diversa in phpinfo () e CLI?


27

Mi sono reso conto che esiste una mancata corrispondenza tra la versione di PHP riportata da phpinfo()e php -v(nella CLI).

phpinfo():  5.5.24
php -v: 5.6.9

Sto lavorando su un Mac OS X 10.10 (Yosemite) e ho installato una libreria ( php-version) per provare a gestire le versioni di PHP.

Mi riporta 3 diverse versioni installate sul mio laptop:

  5.4.41
  5.5.25
* 5.6.9

Vorrei impostare la stessa versione di PHP sia in Apache che nella CLI.

Come posso dire ad Apache quale versione di PHP usare?

Ho provato a scrivere questa riga nel mio httpd.conf:

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

Poi:

sudo apachectl restart

Ma tutto ciò non risolve il problema ... Nelle mie informazioni PHP ho ancora: 5.5.24



1
La domanda di @bertieb è davvero simile a quella dell'altra. Ho appena risposto , ma qui c'è un problema specifico che tenterò di rispondere.
Jake Gould,

Risposte:


14

Alcuni problemi diversi qui si nascondono tutti sotto il concetto di confusione della versione di PHP, quindi cercherò di affrontare ognuno nel modo più chiaro possibile. Innanzitutto questo:

Mi sono reso conto che esiste una mancata corrispondenza tra la versione di PHP riportata da phpinfo()e php -v(nella CLI).

phpinfo():  5.5.24
php -v: 5.6.9

La CLI PHP non è la stessa del modulo Apache PHP.

Come spiego nella risposta a questa altra domanda qui , non fatevi prendere dal panico! Se sei preoccupato della versione di PHP utilizzata dal tuo server Apache, l'output di phpinfo()è sempre ciò a cui dovresti prestare attenzione. Il modulo Apache PHP e il binario della riga di comando PHP sono due cose diverse che non interferiscono l'una con l'altra.

Basta prestare attenzione all'output di phpinfo()se si è preoccupati di impostare la versione corretta del modulo PHP in Apache.

Detto questo, sembra che tu abbia ancora problemi a caricare il modulo PHP corretto in Apache:

Ho provato a scrivere questa riga nel mio httpd.conf:

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

Assicurati che il tuo server Apache stia caricando il modulo PHP corretto.

Mentre quello che hai fatto tecnicamente sembra corretto, l'unica ragione per cui riesco a vedere che questo non funziona è in qualche modo c'è un'altra LoadModule php5_moduledirettiva nei file di configurazione di Apache che sta sostituendo il valore che stai impostando quella linea.

Consiglierei di guardare attraverso il httpd.conf—che presumo si trovi qui /etc/apache2/httpd.conf— e vedere se forse ce n'è davvero un altro LoadModule php5_moduleche ti sei perso o che non hai notato durante la modifica di quel file. Guardando il mio file equivalente in Mac OS X 10.9.5 vedo che la riga è commentata — poiché non uso le configurazioni Apache / PHP di Mac OS X — e legge qualcosa del genere:

#LoadModule php5_module libexec/apache2/libphp5.so

Naturalmente nel tuo caso sarebbe senza commenti. Maggiori dettagli sulla configurazione di Apache e PHP per lo sviluppo web sono disponibili su questo sito .

Prendi seriamente in considerazione l'uso di MAMP come alternativa alle stranezze di Apache / PHP di Mac OS X.

Detto questo, non so che cosa stai tentando di fare, ma se stai facendo lo sviluppo web su un sistema Mac OS X dovresti prendere seriamente in considerazione l'uso di MAMP invece di hackerare lo stack Web principale di Mac OS X per ottenere cose in esecuzione.

Il vantaggio di MAMP è che è un equivalente di Mac OS X di livello estremamente produttivo di uno stack LAMP. E poiché è orientato allo sviluppo web del mondo reale, ha tutti i moduli e le configurazioni configurati esattamente come si dovrebbe averli.

Il problema principale con Apache e PHP su Mac OS X è che il software è in genere obsoleto, un problema da configurare / modificare e gestire e un mal di testa da debug quando si verificano cose del genere. E se arrivasse un aggiornamento di Mac OS X che cancella le impostazioni Apache e PHP attentamente configurate? Sei tornato al punto di partenza.


Perché hai risposto a questo duplicato invece di contrassegnare la domanda come duplicata?
Pmpr

@Trix Perché quel "duplicato" è una risposta simile a una domanda diversa pubblicata a giorni l'uno dall'altro. Mentre rispondo a un commento simile qui , “@bertieb Question è davvero simile a quell'altro. Ho appena risposto, ma qui c'è un problema specifico che tenterò di rispondere. - JakeGould, 12 settembre 15 alle 0:42 "Una domanda riguarda la differenza tra PHP dalla riga di comando. L'altro riguarda i problemi del modulo AND PHP.
Jake Gould

4

Ho trovato la soluzione al mio problema. Dopo la modifica, /etc/apache2/httpd.confho usato per riavviare apache usando:

sudo apachectl restart

Per qualche motivo usando questo comando Apache non recupera gli aggiornamenti in httpd.confe carica la vecchia configurazione.

usando:

sudo apachectl -k stop
sudo apachectl -k start

Effettua una sorta di riavvio forzato di tutti i servizi e legge anche gli aggiornamenti nel file di configurazione e infine leggi il nuovo percorso per php5_module:

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

Grazie anche a @JakeGould per la sua spiegazione .


Ho modificato il post per rimuovere il -kflag dai apachectlcomandi poiché se controlli apachectl -hche il flag / opzione non esista lì. Non ho idea di dove l'hai preso. Inoltre, mentre dichiari di fare stope startchiarire le cose, la cosa strana è che restartsui sistemi Linux fa esattamente questo. Se controlli lo script che si trova in /usr/sbin/apachectl(è uno script, quindi usa qualsiasi editor di testo per visualizzarlo) sembra fare esattamente anche quello. Forse su Mac OS X LaunchDaemonsper Apache è semplicemente "strano" rispetto a Linux standard? Comunque, fantastico, hai risolto questo.
Jake Gould,

Per tua informazione ho trovato il comando con il flag -k qui: httpd.apache.org/docs/2.2/stopping.html
Salvatore Dibenedetto,

Hai ragione. Ho guardato attraverso l'uscita “aiuto” di /usr/sbin/apachectl(senza alcun comando) e si afferma chiaramente, [-k start|restart|graceful|graceful-stop|stop]. Sono così abituato al modo in cui Apache funziona su sistemi Linux, ora mi sembra di aver dimenticato la -kbandiera per l'uso con i apachectlcomandi. Quindi sapendo che il vero problema che hai avuto è stato il tentativo di riavviare con questo comando sudo apachectl restartquando avrebbe dovuto -kaggiungere il flag in questo modo sudo apachectl -k restart.
Jake Gould,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.