Ausführen des PHP-Skripts über die Befehlszeile


83

Wie kann ich ein PHP-Skript über die Befehlszeile mit dem PHP-Interpreter ausführen, mit dem Web-Skripte analysiert werden?

Ich habe eine phpinfo.phpDatei, auf die über die Web-Shows zugegriffen Germanwird, die installiert ist. Wenn ich das jedoch phpinfo.phpüber die Befehlszeile mit - php phpinfo.phpund grepfür ausführe German, finde ich es nicht. Also sind beide PHPS unterschiedlich. Ich muss ein Skript ausführen, phpauf dem das Germaninstalliert ist.

Wie kann ich das machen?


1
tun Sie einfach php -iund analysieren Sie das
Lawrence Cherone

1
Was bedeutet das? Ich habe das trotzdem gemacht, aber nichts
Siddharth

1
Bitte fügen Sie weitere Details zur installierten Webserver- Software hinzu, z. B. fügen Sie phpinfo();Ihrer Frage die Ausgabe von hinzu . Auch meine Antwort aktualisiert.
Sampo Sarrala - codidact.org

Antworten:


161

AKTUALISIEREN:

Nach einem Missverständnis habe ich endlich das bekommen, was Sie versuchen zu tun. Sie sollten Ihre Serverkonfigurationsdateien überprüfen. Verwenden Sie Apache2 oder eine andere Serversoftware?

Suchen Sie nach Zeilen, die mit LoadModule php... beginnen. Es gibt wahrscheinlich Konfigurationsdateien / -verzeichnisse mit dem Namen modsoder ähnlichem. Beginnen Sie von dort aus.

Sie können auch die Ausgabe vom Webserver überprüfen php -r 'phpinfo();' | grep phpund die Zeilen damit vergleichen phpinfo();.

phpInteraktiv laufen :

(damit Sie Code in die Konsole einfügen / schreiben können)

php -a

So analysieren Sie die Datei und geben sie an die Konsole aus:

php -f file.php

Datei analysieren und in eine andere Datei ausgeben:

php -f file.php > results.html

Brauchen Sie sonst noch etwas?

Um nur einen kleinen Teil, eine Zeile oder ähnliches auszuführen, können Sie Folgendes verwenden:

php -r '$x = "Hello World"; echo "$x\n";'

Wenn Sie Linux ausführen, tun Sie dies man phpan der Konsole.

Wenn Sie PHP über fpm ausführen möchten / möchten, verwenden Sie cli fcgi

SCRIPT_NAME="file.php" SCRIP_FILENAME="file.php" REQUEST_METHOD="GET" cgi-fcgi -bind -connect "/var/run/php-fpm/php-fpm.sock"

Dabei ist /var/run/php-fpm/php-fpm.sock Ihre PHP-Fpm-Socket-Datei.


4
Nein. Das Problem ist, dass das System mehrere PHPS enthält. Ich muss herausfinden, mit welchem ​​PHP Web-Skripte analysiert werden. Wenn ich PHP von der Konsole aus starte, kann es keine Klasse finden - aber wenn ich dieses Skript aus dem Web aufrufe, ist dieses Problem nicht vorhanden. Es bedeutet also, dass das verwendete PHP anders ist, nicht wahr?
Siddharth

2
@Siddharth Sie sollten dies anhand der S / W-Konfiguration Ihres Servers überprüfen. Fügen Sie Ihre Serverdetails zur Frage hinzu.
Sampo Sarrala - codidact.org

2
Ja. Wie kann ich das überprüfen? Kurz gesagt, wie kann ich das richtige PHP über die Kommandozeile verwenden?
Siddharth

2
Unter Linux können Sie angeben, which phpwelche ausführbare Datei Sie standardmäßig ausführen. Um eine andere ausführbare Datei zu verwenden, müssen Sie den vollständigen Pfad zu der ausführbaren Datei angeben, die Sie verwenden möchten:/path/to/specific/php -f file.php > results.html
Emilio P.

1
schönes Detail, +1 zur Erklärung. Nur hier, um zu kommentieren, achten Sie auf die Umgebungsvariablen. Vielleicht müssen Sie den vollständigen Verzeichnispfad verwenden, auch wenn sich das Skript im selben Verzeichnis befindet wie php.exe
Leandro

3

Ich habe nach einer Lösung für dieses Problem in Windows gesucht, und es scheint, dass Sie das vollständige Verzeichnis ablegen müssen, wenn Sie nicht über die erforderlichen Umgebungsvariablen verfügen. Zum Beispiel. mit einer Datei im selben Verzeichnis wie PHP:

F:\myfolder\php\php.exe -f F:\myfolder\php\script.php

Wenn Sie dieses Wort wörtlich an der Eingabeaufforderung ausführen, >leitet das beim Start wahrscheinlich die Ausgabe von -f ...(wahrscheinlich ein Fehler) in Ihre php.exe-Datei um und löscht den Inhalt.
mwfearnley

2

Unter SuSE gibt es zwei verschiedene Konfigurationsdateien für PHP: eine für Apache und eine für CLI (Befehlszeilenschnittstelle). Im Verzeichnis / etc / php5 / finden Sie ein Verzeichnis "apache2" und ein Verzeichnis "cli". Jeder hat eine "php.ini" -Datei. Die Dateien dienen demselben Zweck (PHP-Konfiguration), gelten jedoch für die beiden verschiedenen Arten der Ausführung von PHP. Diese Dateien laden unter anderem die von PHP verwendeten Module.

Wenn Ihr Betriebssystem ähnlich ist, sind diese beiden Dateien wahrscheinlich nicht identisch. Ihre Apache php.ini lädt wahrscheinlich das Gearman-Modul, die cli php.ini nicht. Bei der Installation des Moduls (automatisch oder manuell) wurde wahrscheinlich nur die Apache php.ini-Datei aktualisiert.

Sie können die Datei Apache php.ini einfach in das Verzeichnis cli kopieren, um die CLI-Umgebung genau wie die Apache-Umgebung zu gestalten.

Oder Sie finden die Zeile, in der das Gearman-Modul geladen wird, in der Apache-Datei und kopieren / fügen sie nur in die CLI-Datei ein.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.