Ich bin neu in PHP und wollte PHP von der Kommandozeile ausführen. Ich habe WAMP installiert und die "System Variables" auf meinen PHP-Ordner gesetzt (C:\wamp\bin\php\php5.4.3
).
Wenn ich zu Run
-> CMD
-> php -a
gehe und die Eingabetaste drücke, wird interactive mode enabled
angezeigt. Aber wenn ich echo 'Hi';
schreibe, zeigt es nichts.
Ich sehe sogar nichts wie 'php>', wenn ich php -a
eingebe und die Eingabetaste drücke.
Die CLI PHP (php für die Befehlszeilenschnittstelle) heißt php.exe Sie lebt in c:\wamp\bin\php\php5.x.y\php.exe
(wobei x und y die Versionsnummern von PHP sind, die Sie installiert haben).
Wenn Sie PHP-Scrips erstellen möchten, die von der Kommandozeile aus ausgeführt werden, ist es einfach und sehr nützlich.
Erstellen Sie sich so eine Batchdatei, nennen wir sie phppath.cmd
:
PATH=%PATH%;c:\wamp\bin\php\phpx.y.z
php -v
Ändern Sie x.y.z
in einen gültigen Ordnernamen für eine Version von PHP, die Sie in WAMPServer installiert haben
Speichern Sie dies in einem Ihrer Ordner, der sich bereits auf Ihrem PFAD befindet, damit Sie ihn von überall ausführen können.
Wechseln Sie nun in einem Befehlsfenster in den Quellordner und führen Sie> phppath aus.
Dann renne
php your_script.php
Es sollte wie ein Traum funktionieren.
Hier ist ein Beispiel, mit dem PHP Composer und PEAR konfiguriert werden, sofern dies erforderlich ist
@echo off
REM **************************************************************
REM * PLACE This file in a folder that is already on your PATH
REM * Or just put it in your C:\Windows folder as that is on the
REM * Search path by default
REM * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
REM * EDIT THE NEXT 3 Parameters to fit your installed WAMPServer
REM **************************************************************
set baseWamp=D:\wamp
set defaultPHPver=7.1.9
set composerInstalled=%baseWamp%\composer
set phpFolder=\bin\php\php
if %1.==. (
set phpver=%baseWamp%%phpFolder%%defaultPHPver%
) else (
set phpver=%baseWamp%%phpFolder%%1
)
PATH=%PATH%;%phpver%
php -v
echo ---------------------------------------------------------------
REM IF PEAR IS INSTALLED IN THIS VERSION OF PHP
IF exist %phpver%\pear (
set PHP_PEAR_SYSCONF_DIR=D:\wamp\bin\php\php%phpver%
set PHP_PEAR_INSTALL_DIR=D:\wamp\bin\php\php%phpver%\pear
set PHP_PEAR_DOC_DIR=D:\wamp\bin\php\php%phpver%\docs
set PHP_PEAR_BIN_DIR=D:\wamp\bin\php\php%phpver%
set PHP_PEAR_DATA_DIR=D:\wamp\bin\php\php%phpver%\data
set PHP_PEAR_PHP_BIN=D:\wamp\bin\php\php%phpver%\php.exe
set PHP_PEAR_TEST_DIR=D:\wamp\bin\php\php%phpver%\tests
echo PEAR INCLUDED IN THIS CONFIG
echo ---------------------------------------------------------------
) else (
echo PEAR DOES NOT EXIST IN THIS VERSION OF php
echo ---------------------------------------------------------------
)
REM IF A GLOBAL COMPOSER EXISTS ADD THAT TOO
REM **************************************************************
REM * IF A GLOBAL COMPOSER EXISTS ADD THAT TOO
REM *
REM * This assumes that composer is installed in /wamp/composer
REM *
REM **************************************************************
IF EXIST %composerInstalled% (
ECHO COMPOSER INCLUDED IN THIS CONFIG
echo ---------------------------------------------------------------
set COMPOSER_HOME=%baseWamp%\composer
set COMPOSER_CACHE_DIR=%baseWamp%\composer
PATH=%PATH%;%baseWamp%\composer
rem echo TO UPDATE COMPOSER do > composer self-update
echo ---------------------------------------------------------------
) else (
echo ---------------------------------------------------------------
echo COMPOSER IS NOT INSTALLED
echo ---------------------------------------------------------------
)
set baseWamp=
set defaultPHPver=
set composerInstalled=
set phpFolder=
Rufen Sie diese Befehlsdatei wie folgt auf, um die Standardversion von PHP zu verwenden
> phppath
Oder um eine bestimmte Version von PHP wie folgt zu erhalten
> phppath 5.6.30
Ich erinnere mich an ein Mal, als ich vor ein paar Jahren über dieses Problem gestolpert bin, weil Windows keine readline hat, also keine interaktive Shell. Um den php-interaktiven Modus ohne Readline-Unterstützung zu verwenden, können Sie stattdessen Folgendes tun:
C:\>php -a
Interactive mode enabled
<?php
echo "Hello, world!";
?>
^Z
Hello, world!
Wenn Sie in den interaktiven Modus gewechselt haben, geben Sie öffnendes (<?php
) und schließendes (?>
) php-Tag ein und beenden Sie das Steuerelement Z (^Z
), das das Dateiende angibt.
Ich erinnere mich auch, dass ich die Lösung aus dem php-Site-Benutzerkommentar gefunden habe: http://www.php.net/manual/de/features.commandline.interactive.php#105729
Versuchen Sie es mit Batch-Datei
php -S localhost:8000
.bat
Erweiterung, server.bat
server.bat
-Datei, die Ihr Server für http://localhost:8000
bereit hältwenn Sie den Fehler haben, dass PHP keinen internen oder externen Befehl erkennt, gehen Sie zur Umgebungsvariablen und bearbeiten Sie den Pfad zu php.exe "C:\wamp\bin\php\php5.4.3"
Das Problem, das Sie beschreiben, klingt so, als ob in Ihrer Version von PHP das Modul readline PHP fehlt, wodurch die interaktive Shell nicht funktioniert. Ich stütze mich auf diesen PHP Fehler Vorlage.
Versuchen Sie zu laufen
php -m
Und sehen Sie, ob in der Ausgabe "readline" angezeigt wird.
Es kann gute Gründe dafür geben, dass readline nicht in der Distribution enthalten ist. PHP wird normalerweise von einem Webserver ausgeführt. Daher ist es für die meisten Anwendungsfälle nicht wirklich erforderlich. Ich bin sicher, Sie können PHP Code in einer Datei von der Eingabeaufforderung aus ausführen:
php file.php
Es gibt auch das Projekt phpsh , das eine (bessere) interaktive Shell für PHP bereitstellt. Einige Leute hatten jedoch Probleme, es unter Windows auszuführen (ich habe es nicht selbst versucht.).
Edit: Laut der Dokumentation hier wird readline
unter Windows nicht unterstützt:
Hinweis: Diese Erweiterung ist auf Windows-Plattformen nicht verfügbar.
Wenn das also richtig ist, haben Sie folgende Möglichkeiten:
Wenn Sie nur ein schnelles Code-Snippet ausführen möchten, können Sie die Option -r verwenden:
php -r "echo 'hi';"
-r erlaubt die Ausführung von Code ohne Script-Tags <?..?>
Sie können PHP-Seiten mit php.exe ausführen Erstellen Sie eine PHP-Datei mit PHP-Code und schreiben Sie in den Befehl cmd write "[PATH to php.ext]\php.exe [path_to_file]\file.php"
.
AKTUALISIERT Nach wenigen Nachforschungen war die beste Lösung die Verwendung dieser info eines anderen stackoverflow-Threads , um die Eingabe von Strg + z und auch von der Scree-Ausgabe zu vermeiden Statt php -a
Sie sollte call "php.exe" -f NAMED_SCRIPT.php
verwenden
OLD Readline ist unter Windows nicht möglich, daher funktionieren keine der in php geschriebenen PHP-Shells. Es gibt jedoch eine Problemumgehung im interaktiven Modus.
2 allgemeine Probleme hier. Sie können das Ergebnis erst sehen, wenn Sie den Befehl CTRL Z ausführen, um das Ende des Codes/der Datei wie EOF anzuzeigen. Wenn Sie dies tun, wird in den meisten Fällen das Ergebnis gedruckt und das Fenster schnell geschlossen. Auf jeden Fall werden Sie zu cmd und nicht zum interaktiven Modus zurückkehren.
Speichern Sie diesen Inhalt in einer .bat-Datei und definieren Sie Ihren PHP -Pfad in Windows-Variablen, oder ändern Sie php.exe stattdessen in "full path to exe":
::
:: PHP Shell launch wrapper
::
@ECHO off
call "php.exe" -a
echo.
echo.
call "PHP Shell.bat"
Dies ist ein einfacher Batch, der den -a-Modus von php.exe startet. Wenn es php startet, stoppen Sie das Skript, auch wenn keine Pause geschrieben wird, da es in das interaktive Warten auf Eingaben "geht". Wenn Sie CTRL Z drücken, erhält SIGSTEP (nächster Schritt) nicht SIGSTOP (close, STRG + C normalerweise), und lesen Sie dann die nächste Anweisung, die einen rekursiven Aufruf von .bat selbst darstellt. Da Sie sich immer im Modus PHP -a befinden, ist kein Beendigungsbefehl vorhanden. Sie müssen STRG + C verwenden oder das Austrittskreuz mit der Maus drücken. (Nein alt + f4)
Sie können auch "Bat to Exe" Konverter verwenden, um die Verwendung zu erleichtern.
Die folgende Lösung ist speziell für Wamp-Umgebungen:
Dies fackelte mich für eine Weile, versuchte alle anderen Vorschläge, $ PATH usw. suchte sogar die Windows-Registry nach Hinweisen:
Die GUI (wampmanager) zeigt an, dass ich Version 7 ausgewählt habe und ja, wenn ich phpinfo () in einer Seite des Browsers sage, wird mir seine Version 7.x.x noch php -v im Befehl Aufforderung meldet eine 5.x.x
Wenn Sie mit der rechten Maustaste auf den Wampmanager-Kopf klicken, um Symbol-> Tools-> Nicht verwendete Versionen löschen und die alte Version entfernen, die Dienste neu starten zu lassen, wird mit dem Befehl Prompt eine 7.x.x zurückgegeben
Diese Lösung bedeutet, dass Sie nicht mehr über die alte Version verfügen, wenn Sie zwischen PHP-Versionen wechseln möchten. In C:\wamp64\wampmanager.conf befindet sich jedoch eine Konfigurationsdatei, in der die Version angegeben wird, die mit CLI verwendet werden soll (der Parameter heißt phpCliVersion). . Ich habe es gewechselt, den Server neu gestartet ... Ich dachte, ich hätte es gelöst, aber es war vielleicht etwas ungeduldig, daher habe ich das Gefühl, dass einige Kilometer darin stecken.
Hoffe das hilft jemandem
führen Sie einfach diese Schritte aus, wenn Sie Ihre alte PHP-Version nicht benötigen:
das funktioniert gut
Das liegt daran, dass Sie sich im interaktiven Modus befinden, in dem php Ihre Eingaben bewertet. Um das Endergebnis anzuzeigen, führen Sie 'Strg + Z' und die Eingabetaste aus. Sie sollten jetzt das ausgewertete Ergebnis sehen :)
p.s. Führen Sie die cmd als Administrator aus!