185 votes

Comment puis-je exécuter un code PHP à partir de la ligne de commande ?

J'aimerais exécuter une seule instruction PHP du type 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 ?

293voto

jpic Points 17307

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

Quoi qu'il en soit, le php la commande 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 's -r switch comme tel :

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

La commande PHP ci-dessus devrait sortie 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 interrupteur 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 créé par Facebook, qui permet de compléter les onglets, de consulter l'historique, etc. alors utiliser -a comme tel :

>>> php -a
Interactive shell

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

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

php -i | grep 'API'

Vous devrait voir :

Server API => Command Line Interface

Si vous ne le faites pas ce qui signifie que peut-être qu'une autre commande fournira le CLI SAPI . Essayez php-cli ; il s'agit peut-être d'un paquetage ou d'une commande disponible dans votre système d'exploitation.

Si vous le faites veillez à ce que votre php utilise l'interface CLI (command-line interface) SAPI (Server API), puis exécutez la commande php -h | grep code à trouver quel commutateur de folie - car cela n'a pas changé depuis un an-. permet d'exécuter du code dans votre version/setup.

Encore quelques exemples, juste pour être sûr que ça 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 le CLI et non dans le CGI ou Apache SAPI. Il est probable que plusieurs SAPI PHP utilisent des fichiers php.ini différents. par exemple, /etc/php/cli/php.ini vs. /etc/php/cgi/php.ini vs. /etc/php/apache/php.ini sur un Gentoo Linux boîte. Découvrez quel fichier ini est utilisé avec php -i | grep ini .

11voto

user1942505 Points 352

Utilisation de PHP en ligne de commande

Utilisez " au lieu de ' sous 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

N'oubliez pas le point-virgule pour fermer la ligne.

4voto

fred727 Points 11

Vous pouvez utiliser :

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

L'étiquette 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 " ;" final !

3voto

Pour courir Shell PHP par la commande Windows,

  1. php -a

Il ouvrira le shell PHP ci-dessous sous Windows, où je testais, un simple square_val() fonction.

function square_val($num, $pow){
  return $num**$pow;
}

Le code ci-dessus a été testé.

Pour tester que le code ci-dessus fonctionne echo square_val(4, 2); et ensuite echo square_val(4, 0.5);

php-shell-command-line

3voto

Matt Gibson Points 5774

Sur la ligne de commande :

php -i | grep sourceguardian

S'il est là, vous obtiendrez du texte. Sinon, vous n'obtiendrez rien.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X