Comment exécuter du code PHP depuis la ligne de commande?

163

Je voudrais exécuter une seule instruction php comme if(function_exists("my_func")) echo 'function exists';directement avec la ligne de commande sans avoir à utiliser un fichier php séparé.

Comment est-ce possible ?

Steve
la source
1
faire function_exists () sans utiliser d'autres fichiers contenant une fonction définie par l'utilisateur ne sera pas très bon, sauf pour tester la version PHP, que vous pouvez découvrir d'autres manières. Quelle fonction souhaitez-vous tester?
Matt Gibson
Je cherche à tester cette fonction: sg_load ()
Steve
2
On dirait que ce que vous voulez vraiment est de savoir si l'extension php sourceguardian est activée?
Matt Gibson
2
alors phpinfo () devrait vous le dire.
jpic

Réponses:

257

Si vous allez faire PHP dans la ligne de commande, je vous recommande d'installer phpsh, un shell PHP décent . C'est beaucoup plus amusant.

Quoi qu'il en soit, la commande php propose deux commutateurs pour exécuter du code à partir de la ligne de commande :

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

Vous pouvez utiliser le commutateur -r de php comme tel:

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

La commande PHP ci-dessus devrait afficher no et renvoyer 0 comme vous pouvez le voir:

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

Un autre commutateur amusant est php -a :

-a               Run as interactive shell

C'est un peu nul comparé à phpsh , mais si vous ne voulez pas installer le génial shell interactif pour php créé par facebook pour obtenir l'achèvement des onglets, l'historique, etc. , alors utilisez -a comme tel :

>>> php -a
Interactive shell

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

Si cela ne fonctionne pas sur votre boîte comme sur ma boîte * es * ( testée sur Ubuntu et Arch), alors votre configuration PHP est probablement floue ou cassée . Si vous exécutez cette commande:

php -i | grep 'API'

Vous devriez voir:

Server API => Command Line Interface

Si vous ne le faites pas , cela signifie qu'une autre commande fournira peut - être le SAPI CLI . Essayez php-cli, c'est peut-être un package ou une commande disponible dans votre système d'exploitation.

Si vous voyez que votre commande php utilise la CLI (interface de ligne de commande) SAPI (API du serveur), alors exécutez php -h | grep codepour savoir quel commutateur fou - comme cela n'a pas changé depuis un an - permet d'exécuter du code dans votre version / configuration.

Encore quelques exemples, juste pour m'assurer que cela fonctionne sur mes boîtes:

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

Notez également qu'il est possible qu'une extension soit chargée dans la CLI et non dans le CGI ou Apache SAPI. Il est probable que plusieurs SAPI PHP utilisent différents fichiers php.ini , par exemple /etc/php/cli/php.inivs /etc/php/cgi/php.inivs /etc/php/apache/php.inisur une boîte Gentoo. Découvrez avec quel fichier ini est utilisé php -i | grep ini.

jpic
la source
Peut-être que votre configuration php est cassée. J'ai mis à jour ma réponse, y compris des astuces pour la comprendre.
jpic
Ajout d'une note sur php -a qui pourrait vous être utile.
jpic
6
Notez que phpsh n'est plus maintenu par son auteur (Facebook) et quelqu'un sur la page Google Groupes a déclaré en 2012 que "phpsh n'est plus vraiment supporté ou utile" . Vous pouvez consulter le Boris REPL pour une console php améliorée.
Ben Creasy
3

Sur la ligne de commande:

php -i | grep sourceguardian

Si c'est là, vous recevrez du texte. Sinon, vous n'obtiendrez rien.

Matt Gibson
la source
4
Soit je suis aveugle, soit cette réponse n'a rien à voir avec la question. Comment cette réponse est censée répondre à la question posée " Comment exécuter du code PHP directement à partir de la ligne de commande, sans enregistrer le code PHP dans un .phpfichier? "?
trejder
15
@trejder Pendant un moment, je me suis demandé si j'avais répondu à la mauvaise question, mais j'ai ensuite regardé l'historique des modifications et les commentaires. Cela répond à ce dont l'OP semblait vraiment avoir besoin: savoir si une extension PHP particulière a été chargée. La question a depuis été reformulée, elle ne va donc pas si bien maintenant.
Matt Gibson
3

Vous pouvez utiliser :

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

La balise courte " <? = " Peut également être utile:

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

La balise de fermeture "?>" Est facultative, mais n'oubliez pas le dernier ";" !

fred727
la source
2
Cela semble être plus difficile que la réponse acceptée par les 7 ans. En utilisant, php -rvous n'avez pas à vous soucier de l'ouverture des balises PHP.
miken32
1

Utiliser PHP depuis la ligne de commande

utilisez " au lieu de " sur Windows lors de l'utilisation de la version cli avec -r

php -r "echo 1"

-- correct

php -r 'echo 1'

-- Incorrect

  PHP Parse error:  syntax error, unexpected ''echo' (T_ENCAPSED_AND_WHITESPACE), expecting end of file in Command line code on line 1
user1942505
la source