Come eseguire il codice PHP dalla riga di comando?


163

Vorrei eseguire una singola istruzione php come if(function_exists("my_func")) echo 'function exists'; direttamente con la riga di comando senza dover utilizzare un file php separato.

Come è possibile ?


1
fare function_exists () senza usare altri file contenenti la funzione definita dall'utente non sarà molto buono, tranne che per testare la versione di PHP, che puoi scoprire in altri modi. Per quale funzione vuoi provare?
Matt Gibson

Sto cercando di provare questa funzione: sg_load ()
Steve

2
Sembra davvero che tu voglia scoprire se l'estensione php di sourceguardian è abilitata?
Matt Gibson

2
allora phpinfo () dovrebbe dirti.
jpic

Risposte:


257

Se hai intenzione di fare PHP nella riga di comando, ti consiglio di installare phpsh, una shell PHP decente .È molto più divertente.

Comunque, il comando php offre due opzioni per eseguire il codice dalla riga di comando :

-r <code>        Run PHP <code> without using script tags <?..?>
-R <code>        Run PHP <code> for every input line

È possibile utilizzare l'opzione -r di php come tale:

php -r 'echo function_exists("foo") ? "yes" : "no";'

Il comando PHP sopra riportato dovrebbe generare no e restituire 0 come puoi vedere:

>>> php -r 'echo function_exists("foo") ? "yes" : "no";'
no
>>> echo $? # print the return value of the previous command
0

Un altro interruttore divertente è php -a :

-a               Run as interactive shell

È un po 'zoppo rispetto a phpsh , ma se non vuoi installare la fantastica shell interattiva per php creata da Facebook per ottenere il completamento della scheda, la cronologia e così via , usa -a come tale :

>>> php -a
Interactive shell

php > echo function_exists("foo") ? "yes" : "no";
no
php > 

Se non funziona sulla tua scatola come sulla mia scatola * es * ( testato su Ubuntu e Arch), probabilmente la tua configurazione di PHP è sfocata o rotta . Se si esegue questo comando:

php -i | grep 'API'

Si dovrebbe vedere:

Server API => Command Line Interface

In caso contrario , ciò significa che forse un altro comando fornirà il CLI SAPI . Prova php-cli, forse è un pacchetto o un comando disponibile nel tuo sistema operativo.

Se fate vedi che il tuo comando php usa la CLI (Command Line Interface) SAPI (Server API), quindi eseguiphp -h | grep code per scoprire quale interruttore folle - poiché questo non è cambiato da un anno - consente di eseguire il codice nella tua versione / configurazione.

Un altro paio di esempi, solo per assicurarsi che funzioni sulle mie scatole:

>>> php -r 'echo function_exists("sg_load") ? "yes" : "no";' 
no
>>> php -r 'echo function_exists("print_r") ? "yes" : "no";' 
yes

Si noti inoltre che è possibile che un'estensione sia caricata nella CLI e non nella CGI o Apache SAPI. È probabile che diverse SAPI PHP utilizzino file php.ini diversi , ad es. /etc/php/cli/php.iniVs /etc/php/cgi/php.inivs /etc/php/apache/php.inisu un box Gentoo. Scopri con quale file ini viene utilizzato php -i | grep ini.


Forse la tua configurazione php è rotta. Ho aggiornato la mia risposta includendo suggerimenti per capirlo.
jpic

Aggiunta una nota su php -a che potrebbe esserti utile.
jpic

6
Si noti che phpsh non è più gestito dal suo autore (Facebook) e qualcuno nella pagina di Google Gruppi ha dichiarato nel 2012 che "phpsh non è più realmente supportato o utile" . Potresti cercare nel Boris REPL per una console php migliorata.
Ben Creasy,

3

Sulla riga di comando:

php -i | grep sourceguardian

Se è lì, riceverai del testo. In caso contrario, non otterrai nulla.


4
O sono cieco o questa risposta non ha nulla a che fare con la domanda. Come si suppone che questa risposta risponda alla domanda " Come eseguire il codice PHP direttamente dalla riga di comando, senza salvare il codice PHP nel .phpfile? "?
Trejder,

15
@trejder Per un momento mi sono chiesto se avevo risposto alla domanda sbagliata, ma poi ho guardato la cronologia delle modifiche e i commenti. Questo risponde a ciò di cui l'OP sembrava aver davvero bisogno: scoprire se era stata caricata una particolare estensione PHP. Da allora la domanda è stata riformulata, quindi non si adatta così bene ora.
Matt Gibson,

3

Puoi usare :

 echo '<?php if(function_exists("my_func")) echo "function exists"; ' | php

Anche il tag breve " <? = " Può essere utile:

 echo '<?= function_exists("foo") ? "yes" : "no";' | php
 echo '<?= 8+7+9 ;' | php

Il tag di chiusura "?>" È facoltativo, ma non dimenticare l'ultimo ";" !


2
Questo sembra essere più un problema della risposta accettata di 7 anni. Utilizzando php -rnon è necessario preoccuparsi di aprire i tag PHP.
miken32,

1

Utilizzo di PHP dalla riga di comando

usa " invece di ' su windows quando usi la versione cli con -r

php -r "echo 1"

-- corretta

php -r 'echo 1'

- errato

  PHP Parse error:  syntax error, unexpected ''echo' (T_ENCAPSED_AND_WHITESPACE), expecting end of file in Command line code on line 1
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.