Je voudrais pouvoir exécuter une ligne de PHP sur la ligne de commande similaire au fonctionnement des options suivantes:
:~> Perl -e "print 'hi';"
:~> python -c "print 'hi'"
:~> Ruby -e "puts 'hi'"
J'aimerais pouvoir faire:
:~> php "echo 'hi';"
J'ai lu qu'il existe une option -r qui peut faire ce dont j'ai besoin pour php, mais elle ne semble pas être disponible lorsque j'essaie de l'utiliser. J'ai essayé d'utiliser PHP 5.2.13 et PHP 4.4.9 et ni l'un ni l'autre n'ont une option -r disponible).
J'ai écrit ce script (que j'ai appelé run_php.php) - qui fonctionne, mais je ne suis pas un grand fan de celui-ci simplement parce que je pense qu'il devrait y avoir une manière plus "correcte" de le faire.
#!/usr/bin/php5 -q
<?php echo eval($argv[1]); ?>
Ma question est: existe-t-il une option -r? Si oui, pourquoi n'est-il pas disponible lorsque j'exécute --help? S'il n'y a pas d'option -r, quelle est la meilleure façon de le faire (sans écrire un script intermédiaire si possible)?
Merci!
=== EDIT ===
Parce que je ne pense pas que c'était très clair ci-dessus, l'option -r n'est PAS disponible pour moi. Voici la sortie php -h pour les deux versions de PHP que j'utilise).
PHP 4.4.9
Usage: php [-q] [-h] [-s] [-v] [-i] [-f <file>]
php <file> [args...]
-a Run interactively
-C Do not chdir to the script's directory
-c <path>|<file> Look for php.ini file in this directory
-n No php.ini file will be used
-d foo[=bar] Define INI entry foo with value 'bar'
-e Generate extended information for debugger/profiler
-f <file> Parse <file>. Implies `-q'
-h This help
-i PHP information
-l Syntax check only (lint)
-m Show compiled in modules
-q Quiet-mode. Suppress HTTP Header output.
-s Display colour syntax highlighted source.
-v Version number
-w Display source with stripped comments and whitespace.
-z <file> Load Zend extension <file>.
php 5.2.13
Usage: php [-q] [-h] [-s] [-v] [-i] [-f <file>]
php <file> [args...]
-a Run interactively
-C Do not chdir to the script's directory
-c <path>|<file> Look for php.ini file in this directory
-n No php.ini file will be used
-d foo[=bar] Define INI entry foo with value 'bar'
-e Generate extended information for debugger/profiler
-f <file> Parse <file>. Implies `-q'
-h This help
-i PHP information
-l Syntax check only (lint)
-m Show compiled in modules
-q Quiet-mode. Suppress HTTP Header output.
-s Display colour syntax highlighted source.
-v Version number
-w Display source with stripped comments and whitespace.
-z <file> Load Zend extension <file>.
Il n'y a pas d'option -r. Lorsque j'essaie d'utiliser l'option -r, j'obtiens:
Error in argument 1, char 2: option not found r
Désolé pour la confusion.
EDIT2: Oui, il est là dans cli SAPI de PHP 5.2 .
EDIT: Si vous ne pouvez pas mettre à niveau et c'est le cas qu'il n'y a pas une telle option dans PHP 5.2 (je ne l'ai pas à portée de main pour tester), vous pouvez le faire:
glopes @ nebm: ~ $ echo "<? php echo \" hi \\ n\";" | php salut
Original:
Il y a en effet un -r
option (bien que je ne sois pas sûr de PHP 5.2):
D: \> php -r "echo 'hi';"; Hi
Assurez-vous simplement que vous utilisez la version en ligne de commande de PHP. php --version
devrait vous donner quelque chose comme ça (remarquez "cli"):
D: \> php --version PHP 5.3.0 (cli) (build: 20 mai 2010 19:05:12) (DEBUG) Copyright (c) 1997 -2009 Le PHP groupe Zend Engine v2.3.0, Copyright (c) 1998-2009 Zend Technologies
Dans les nouvelles versions de PHP vous tapez simplement "php -a" et vous sautez dans un mode interactif, où vous pouvez expérimenter avec PHP.
La façon la plus simple de le faire est d'utiliser l'indicateur -r. Cependant, j'ai trouvé qu'il n'autorise pas les entrées multilignes. Pour contourner cela, vous pouvez procéder comme suit:
php -r "passthru(file_get_contents('php://stdin'));"
Ce qui vous permet de diriger depuis stdin, comme ceci:
echo -n "echo 'test';" | php -r "passthru(file_get_contents('php://stdin'));"
Cependant, pour répondre à la question d'origine, si l'indicateur -r n'est pas disponible, il est également possible d'utiliser l'indicateur -f - il suffit de passer stdin comme fichier à ouvrir: php -f /dev/stdin
Si vous faites cela, sachez que a) vous devez inclure un espace vide au début de l'entrée, et b) vous devez ouvrir avec <?php
. Exemple:
echo -ne " <?php\necho 'test';" | php -f /dev/stdin
Un point-virgule supplémentaire n'est pas nécessaire à la fin.
Vous pouvez mentionner php -r "echo 'hi';"
au lieu de php -r "echo 'hi';";
Un autre exemple (pour obtenir l'horodatage actuel sur la ligne de commande):
php -r 'print time()."\n";'
Jetez un oeil à cette page sur fonctionnalités de ligne de commande PHP , si vous ne l'avez pas déjà fait. Il y a quelques articles sur les problèmes basés sur le système d'exploitation et les guillemets doubles ou simples.
Je vérifierais également les informations PHP
php -i
pour voir si PHP était compilé avec le support CLI désactivé (--disable-cli).