Ich möchte eine einzelne PHP-Anweisung wie if(function_exists("my_func")) echo 'function exists';direkt mit der Kommandozeile ausführen , ohne eine separate PHP-Datei verwenden zu müssen.
Wie ist es möglich ?
Ich möchte eine einzelne PHP-Anweisung wie if(function_exists("my_func")) echo 'function exists';direkt mit der Kommandozeile ausführen , ohne eine separate PHP-Datei verwenden zu müssen.
Wie ist es möglich ?
Antworten:
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ß.
Auf jeden Fall bietet der Befehl php 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 den Schalter -r von php als solchen verwenden:
php -r 'echo function_exists("foo") ? "yes" : "no";'
Der obige PHP-Befehl sollte ausgegeben no und zurückgegeben werden, 0 wie Sie sehen können:
>>> 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 die fantastische interaktive Shell für PHP installieren möchten, die von Facebook erstellt wurde, um die Tab-Vervollständigung, den Verlauf usw. zu erhalten , verwenden Sie -a als solche :
>>> php -a
Interactive shell
php > echo function_exists("foo") ? "yes" : "no";
no
php >
Wenn es auf Ihrer Box nicht funktioniert wie auf meiner Box * es * ( getestet unter Ubuntu und Arch), ist Ihr PHP-Setup wahrscheinlich unscharf oder kaputt . Wenn Sie diesen Befehl ausführen:
php -i | grep 'API'
Sie sollten sehen:
Server API => Command Line Interface
Wenn Sie dies nicht tun , bedeutet dies, dass möglicherweise ein anderer Befehl die CLI SAPI bereitstellt . Versuchen Sie es mit php-cli. Vielleicht ist es ein Paket oder ein Befehl, der in Ihrem Betriebssystem verfügbar ist.
Wenn Sie feststellen, dass Ihr PHP-Befehl die CLI (Command Line Interface) SAPI (Server API) verwendet, führen Sie aus php -h | grep code, um herauszufinden, welcher verrückte Switch - da sich dies seit Jahren nicht geändert hat - die Ausführung von Code in Ihrer Version / Ihrem Setup ermöglicht.
Noch ein paar Beispiele, nur 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 und nicht in die CGI- oder Apache-SAPI geladen wird. Es ist wahrscheinlich, dass mehrere PHP-SAPIs unterschiedliche php.ini-Dateien verwenden , z. B. /etc/php/cli/php.inivs /etc/php/cgi/php.inivs /etc/php/apache/php.iniauf einer Gentoo-Box. Finden Sie heraus, mit welcher INI-Datei verwendet wird php -i | grep ini.
In der Befehlszeile:
php -i | grep sourceguardian
Wenn es dort ist, erhalten Sie Text. Wenn nicht, bekommen Sie nichts.
.phpDatei zu speichern ?
Sie können verwenden:
echo '<?php if(function_exists("my_func")) echo "function exists"; ' | php
Das kurze Tag " <? = " Kann ebenfalls hilfreich sein:
echo '<?= function_exists("foo") ? "yes" : "no";' | php
echo '<?= 8+7+9 ;' | php
Das schließende Tag "?>" Ist optional, aber vergessen Sie nicht das letzte ";" !
php -rSie sich keine Gedanken über das Öffnen von PHP-Tags machen.
Verwenden von PHP über die Befehlszeile
Verwenden Sie " anstelle von " unter Windows, wenn Sie die CLI-Version mit -r verwenden
php -r "echo 1"
-- richtig
php -r 'echo 1'
-- falsch
PHP Parse error: syntax error, unexpected ''echo' (T_ENCAPSED_AND_WHITESPACE), expecting end of file in Command line code on line 1