it-swarm.com.de

Wie kann man PHP code von der Kommandozeile aus ausführen?

Ich möchte eine einzelne PHP-Anweisung wie if(function_exists("my_func")) echo 'function exists'; direkt mit der Befehlszeile ausführen, ohne eine separate PHP-Datei verwenden zu müssen.

Wie ist es möglich ?

147
Steve

Wenn Sie PHP in der Befehlszeile ausführen möchten, empfehle ich Ihnen, phpsh zu installieren, eine anständige PHP Shell . Es macht viel mehr Spaß.

Wie auch immer, der PHP-Befehl bietet zwei Schalter, um Code über die Befehlszeile auszuführen :

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

Sie können phps - r switch als solches verwenden:

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

Der obige Befehl PHP sollte output no und return 0 Wie du siehst:

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

Ein weiterer lustiger Schalter ist php -a :

-a               Run as interactive Shell

Es ist etwas lahm im Vergleich zu phpsh, aber wenn Sie nicht wollen, installieren Sie das Fantastische interaktive Shell für PHP von Facebook, um die Tab-Vervollständigung, den Verlauf usw. zu erhalten , dann benutze -a als solches :

>>> php -a
Interactive Shell

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

Wenn es nicht funktioniert auf Ihrer Box wie auf meiner Box * es * ( getestet auf Ubuntu und Arch), dann wahrscheinlich ist Ihr PHP Setup verschwommen oder defekt . Wenn Sie diesen Befehl ausführen:

php -i | grep 'API'

Sie sollten sehen:

Server API => Command Line Interface

Wenn Sie nicht , bedeutet dies, dass möglicherweise ein anderer Befehl die CLI SAPI liefert. Probieren Sie php-cli aus, vielleicht ist es ein Paket oder ein Befehl, der in Ihrem Betriebssystem verfügbar ist.

Wenn Sie sehen, dass Ihr PHP-Befehl die CLI (Command Line Interface) SAPI (Server API) verwendet, führen Sie php -h | grep code aus, um ) Finde heraus, welcher verrückte Schalter - da er sich seit einem Jahr nicht geändert hat - erlaubt, Code in deiner Version/deinem Setup auszuführen.

Noch ein paar Beispiele, um sicherzugehen, dass es auf meinen Boxen funktioniert:

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

Beachten Sie außerdem, dass möglicherweise eine Erweiterung in die CLI geladen wird und nicht in die CGI oder die Apache-SAPI. Es ist wahrscheinlich, dass mehrere PHP SAPIs unterschiedliche php.ini-Dateien verwenden , z. /etc/php/cli/php.ini vs /etc/php/cgi/php.ini vs /etc/php/Apache/php.ini auf einer Gentoo-Box. Finden Sie heraus, welche INI-Datei mit php -i | grep ini verwendet wird.

234
jpic

In der Befehlszeile:

php -i | grep sourceguardian

Wenn es dort ist, erhalten Sie Text. Wenn nicht, werden Sie nichts bekommen.

2
Matt Gibson

Sie können verwenden:

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

Das kurze Tag "<? =" kann hilfreich sein für:

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

Das schließende Tag "?>" Ist optional, aber vergessen Sie nicht das letzte ";" !

0
fred727