web-dev-qa-db-fra.com

Comment exécuter le code PHP à partir de la ligne de commande?

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 ?

147
Steve

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

Quoi qu'il en soit, la commande php offre 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 php - r switch en tant que tel:

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

La commande PHP ci-dessus ci-dessus doit générer no et renvoie 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 boiteux comparé à phpsh, mais si vous ne voulez pas installer l'impressionnant Shell interactif pour php faite par facebook pour obtenir la complétion de tabulation, l'historique, etc. , alors utilisez -a en tant que 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é sur Ubuntu et Arch), puis probablement votre configuration de PHP est 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 que une autre commande fournira peut-être le CLI SAPI . Essayez php-cli, c’est peut-être un paquet ou une commande disponible dans votre système d’exploitation.

Si vous constatez que votre commande php utilise l'interface de ligne de commande SAPI (API du serveur), exécutez php -h | grep code pour Découvrez quel commutateur fou - comme il n'a pas changé depuis un an - permet d'exécuter du code dans votre version/configuration.

Quelques autres 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 PHP SAPI utilisent différents fichiers php.ini , par exemple. /etc/php/cli/php.ini vs /etc/php/cgi/php.ini vs /etc/php/Apache/php.ini sur une boîte Gentoo. Découvrez quel fichier ini est utilisé avec php -i | grep ini.

234
jpic

Sur la ligne de commande:

php -i | grep sourceguardian

Si c'est le cas, vous obtiendrez du texte. Sinon, vous n'obtiendrez rien.

2
Matt Gibson

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 ";" !

0
fred727