So führen Sie PHP über die Windows-Befehlszeile in WAMPServer aus

81

Ich bin neu in PHP und wollte PHP über die Kommandozeile ausführen. Ich habe WAMP installiert und die "Systemvariablen" auf meinen PHP-Ordner (der ist C:\wamp\bin\php\php5.4.3) gesetzt.

Wenn ich zu Run-> CMD-> tippe php -aund die Eingabetaste drücke, heißt es interactive mode enabled. Aber wenn ich schreibe echo 'Hi';, zeigt es nichts.

Ich sehe sogar nichts wie 'php> ", wenn ich tippe php -aund die Eingabetaste drücke.

Daman
quelle
Soweit ich das beurteilen kann, ist die einzig richtige Option für Windows die Verwendung des ausgezeichneten psysh , das aus dieser anderen SO-Antwort empfohlen wird: stackoverflow.com/a/33790472/327074
icc97

Antworten:

72

Die PHP-CLI, wie sie genannt wird (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-Skripte erstellen möchten, die über die Befehlszeile ausgeführt werden sollen, ist dies einfach und sehr nützlich.

Erstellen Sie sich eine Batch-Datei wie diese, nennen wir sie phppath.cmd:

PATH=%PATH%;c:\wamp\bin\php\phpx.y.z
php -v

Wechseln Sie x.y.zin 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 in Ihrem PATH befindet, damit Sie es von überall ausführen können.

Legen Sie nun in einem Befehlsfenster eine CD in Ihren Quellordner und führen Sie> phppath aus.

Dann renne

php your_script.php

Es sollte wie ein Traum funktionieren.

Hier ist ein Beispiel, das PHP Composer und PEAR bei Bedarf konfiguriert und vorhanden 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.4.3
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 diese zu erhalten

> phppath 5.6.30
RiggsFolly
quelle
1
Es funktioniert, danke. Können Sie erklären, wie das funktioniert? Ich sehe den Pfad zum PHP-Ordner, aber wie verknüpft er ihn mit der Befehlszeilenvariablen "PHP" und was macht dieser PATH =% PATH%?
TetraDev
PATH=%PATH%sagt, erstellen Sie eine neue PATH-Umgebungsvariable mit dem aktuellen Pfad, dh %PATH%plus dem neuen Verzeichnis, das wir hinzufügen möchten. Windows durchsucht Ordner im PATH nach ausführbaren Dateien, z. B. 'php.exe', die im aktuellen Arbeitsverzeichnis nicht gefunden werden können.
RiggsFolly
1
Es funktioniert gut auf W10. Sie müssen etwas falsch gemacht haben
RiggsFolly
Das OP forderte effektiv eine PHP-REPL in Windows an. Ich glaube nicht, dass dies die Frage beantwortet
icc97
1
@Cullub funktioniert nicht in Power Shell - in normaler Shell funktioniert es
Johanness
36

Ich erinnere mich, dass ich vor einigen Jahren einmal auf dieses Problem gestoßen bin, weil Windows keine Readline und daher keine interaktive Shell hat. Um den interaktiven PHP-Modus ohne Readline-Unterstützung zu verwenden, können Sie dies stattdessen tun:

C:\>php -a 
Interactive mode enabled 

<?php 
echo "Hello, world!"; 
?> 
^Z 
Hello, world!

Geben Sie nach dem Aufrufen des interaktiven Modus das PHP-Tag " Öffnen" ( <?php) und "Schließen" ( ?>) ein und beenden Sie mit dem Steuerelement Z ( ^Z), das das Dateiende angibt .

Ich erinnere mich auch, dass ich die Lösung aus dem Benutzerkommentar der PHP-Site gefunden habe: http://www.php.net/manual/en/features.commandline.interactive.php#105729

Hendra Uzia
quelle
PHP 7.1 wurde readlineim Windows Build aktiviert. Dadurch php -awerden Sie auf die nehmen Interactive Shellund der Ausführung von Befehlen zu ermöglichen , wie Sie die Eingabetaste drücken, keine Notwendigkeit zu geben <?phpusw. ... siehe diesen Kommentar für den Unterschied: be2.php.net/manual/en/...
superphonic
12

Versuchen Sie es mit einer Batchdatei

  1. Notizblock öffnen
  2. Art php -S localhost:8000
  3. Datei als .batErweiterung speichern ,server.bat
  4. Klicken server.batSie nun auf die Datei, auf der Ihr Server bereit isthttp://localhost:8000

Abhängigkeit

Wenn Sie den Fehler haben, dass PHP keinen internen oder externen Befehl erkennt, gehen Sie zu Umgebungsvariable und bearbeiten Sie den Pfad zu php.exe "C:\wamp\bin\php\php5.4.3"

Nishchit Dhanani
quelle
Mit WAMPServer sollten Sie dem Pfad niemals etwas hinzufügen. Es zerstört die Möglichkeit, einfach zwischen mehreren Versionen von PHP
RiggsFolly
11

Das Problem, das Sie beschreiben, klingt so, als ob in Ihrer PHP-Version möglicherweise das Readline-PHP-Modul fehlt und die interaktive Shell nicht funktioniert. Ich stütze dies auf diese PHP-Fehlerübermittlung .

Versuche zu rennen

php -m

Und sehen Sie, ob "readline" in der Ausgabe erscheint.

Es kann gute Gründe geben, readline aus der Distribution zu streichen. PHP wird normalerweise von einem Webserver ausgeführt. Daher ist es für die meisten Anwendungsfälle nicht wirklich erforderlich. Ich bin sicher, dass Sie PHP-Code in einer Datei über die Eingabeaufforderung ausführen können, indem Sie:

php file.php

Es gibt auch das phpsh- Projekt, das eine (bessere) interaktive Shell für PHP bietet. Einige Leute hatten jedoch Probleme, es unter Windows auszuführen (ich habe es nicht selbst versucht).

Bearbeiten : Nach der Dokumentation hier , readlinewird unter Windows unterstützt:

Hinweis: Diese Erweiterung ist auf Windows-Plattformen nicht verfügbar.

Wenn dies korrekt ist, haben Sie folgende Möglichkeiten:

  • Vermeiden Sie die interaktive Shell und führen Sie einfach PHP-Code in Dateien über die Befehlszeile aus - dies sollte gut funktionieren
  • Versuchen Sie, phpsh unter Windows zum Laufen zu bringen
driis
quelle
Nein, es erscheint nicht? Was bedeutet das?
Daman
Dies bedeutet, dass der interaktive Modus in Ihrer PHP-Distribution nicht funktioniert. Ich denke, Sie sollten den Code am besten in .php-Dateien einfügen und diese über die Befehlszeile oder über einen Webserver ausführen - das sollte funktionieren. Der Link in meiner Antwort erwähnt, dass Sie PHP aus dem Quellcode kompilieren und einbinden können readline, um dies zum Laufen zu bringen - aber das könnte unter Windows ein kleines Unterfangen sein, wenn Sie nicht über die erforderliche Erfahrung verfügen und die gesamte Toolchain installiert ist.
Driis
@driis Ich hatte Python installiert, um phpsh von Facebook zu verwenden, aber nach vielen Recherchen stellte ich fest, dass phpsh nicht mit Python 3 kompatibel ist :( Etwas Ähnliches wie phpsh, das von Python 3 unterstützt wird?
Daman
@Daman, sorry, mir ist nichts bekannt. Vielleicht Python 2 installieren? Ich denke auch, dass die Leute Probleme hatten, phpsh auch unter Windows auszuführen. Ich habe es selbst nicht ausprobiert.
Driis
10

Wenn Sie nur ein schnelles Code-Snippet ausführen möchten, können Sie die Option -r verwenden:

php -r "echo 'hi';"

-r ermöglicht das Ausführen von Code ohne Verwendung von Skript-Tags <?..?>

James Lock
quelle
4

Sie können PHP-Seiten mit php.exe ausführen, eine PHP-Datei mit PHP-Code erstellen und im Cmd schreiben "[PATH to php.ext]\php.exe [path_to_file]\file.php"

Adidi
quelle
Was ist der Pfad Ihrer php.exe?
Adidi
C: \ wamp \ bin \ php \ php5.4.3 \ php.exe
Daman
1
Also erstellen wir sagen wir den PHP-Seitennamen test.php mit <? php echo ('test'); ?> - Platziere es in c: / öffne deine Kommandozeile und tippe "C: \ wamp \ bin \ php \ php5.4.3 \ php.exe" "c: \ test.php" - was siehst du?
Adidi
2

AKTUALISIERT Nach wenigen Recherchen bestand die beste Lösung darin, diese Informationen in einem anderen Stackoverflow-Thread zu verwenden, um Strg + Z-Eingaben und auch die Scree-Ausgabe zu vermeiden. Also, anstatt php -adu solltest verwendencall "php.exe" -f NAMED_SCRIPT.php

ALTE Readline ist unter Windows nicht möglich, daher funktioniert keine der in PHP geschriebenen PHP-Shells. Es gibt jedoch eine Problemumgehung mit einem interaktiven Modus.

2 gemeinsame Probleme hier. Sie können das Ergebnis erst sehen, wenn der Befehl STRG Z ausgeführt wird, um das endgültige Code / die endgültige 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 kehren Sie zu cmd zurück, nicht zum interaktiven Modus -a.

Speichern Sie diesen Inhalt in einer .bat-Datei und definieren Sie Ihren PHP-Pfad in Windows-Variablen, oder ändern Sie stattdessen php.exe in "vollständiger Pfad zu exe":

::
:: PHP Shell launch wrapper
::
@ECHO off
call "php.exe" -a

echo.
echo.

call "PHP Shell.bat"

Dies ist ein einfacher Batch-Start - ein Modus von php.exe. Wenn es PHP startet, stoppen Sie das Skript, auch wenn keine Pause geschrieben wird, da "in" das interaktive Warten auf Eingabe ist. Wenn Sie STRG Z drücken, wird der SIGSTEP (nächster Schritt) und nicht der SIGSTOP (Schließen, normalerweise STRG + C) angezeigt. Lesen Sie dann die nächste Anweisung, die ein rekursiver Aufruf von .bat selbst ist. Da Sie sich immer im PHP-Modus befinden, gibt es keinen Befehl zum Beenden. Sie müssen STRG + C verwenden oder das Ausgangskreuz mit der Maus drücken. (Nein alt + f4)

Sie können auch den Konverter "Bat to Exe" verwenden, um die Verwendung zu vereinfachen.

m3nda
quelle
1

Führen Sie diese Schritte aus, wenn Sie Ihre alte PHP-Version nicht benötigen:

  • öffne wamp und klicke mit der rechten Maustaste auf wamp manager als gehe: tools / Ändere die PHP CLI Version als ändere die PHP Version auf die neueste
  • ein anderes Mal klicken Sie mit der rechten Maustaste auf wamp manager als go: tools / Löschen Sie ungewöhnliche Versionen und löschen Sie die älteste Version, auf der Ihr System besteht, um Ihre PC-PHP-Version zu sein: D.
  • Gehen Sie zu Control Panel / Benutzerkonto / Ändern Sie meine Umgebungsvariablen und klicken Sie in der PATH-Variablen auf Bearbeiten und fügen Sie Ihren neuesten PHP-Versionspfad hinzu, der sich in Ihrem Wamp Server Bin-Ordner befindet
  • Schließen Sie alle Befehlszeilen oder IDEs, starten Sie sie neu und suchen Sie nach PHP-V

das funktioniert gut

Mohammad Hadi
quelle
0

Das liegt daran, dass Sie sich im 'Interaktiven Modus' befinden, in dem PHP alles auswertet, was Sie eingeben. Um das Endergebnis zu sehen, drücken Sie 'Strg + Z' und die Eingabetaste. Sie sollten das ausgewertete Ergebnis jetzt sehen :)

ps starte den cmd als Administrator!

saan
quelle
0

Die folgende Lösung ist speziell für Wamp-Umgebungen vorgesehen:

Das hat mich eine Weile gefesselt, alle anderen Vorschläge ausprobiert, $ PATH usw. hat sogar die Windows-Registrierung nach Hinweisen durchsucht:

Die GUI (wampmanager) zeigt an, dass ich Version 7 ausgewählt habe, und ja, wenn ich phpinfo () auf einer Seite im Browser habe, wird mir die Version 7.xx mitgeteilt, aber php -v in der Eingabeaufforderung meldet eine 5.xx.

Wenn Sie mit der rechten Maustaste auf den Wampmanager klicken, gehen Sie zu Symbol-> Tools-> Nicht verwendete Versionen löschen und entfernen Sie die alte Version. Lassen Sie die Dienste neu starten. Die Eingabeaufforderung gibt dann eine 7.xx zurück

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 mit CLI zu verwendende Version angegeben wird (der Parameter heißt phpCliVersion). . Ich habe es geändert, den Server neu gestartet ... dachte, ich hätte es gelöst, aber keine Auswirkung, vielleicht war ich ein wenig ungeduldig, also habe ich das Gefühl, dass darin möglicherweise einige Kilometer liegen.

Hoffe das hilft jemandem

BuddhaLincoln
quelle
1
Die alte Version, wie Sie sie nennen, ist die Version von PHP, gegen die alle internen Skripte von WAMPServer getestet werden. Wenn Sie PHP5.xx entfernen, besteht das Risiko, dass diese Skripte nicht funktionieren!
RiggsFolly
-1

Legen Sie in Windows Ihre Datei php.exe in Windows / System32 oder einem anderen ausführbaren Systemordner ab, gehen Sie zur Befehlszeile, geben Sie php ein und drücken Sie die Eingabetaste. Wenn kein Fehler generiert wird, können Sie PHP in der Befehlszeile verwenden . Wenn Sie Ihre php.exe an einem anderen Ort als den Standardsystemordnern festgelegt haben, müssen Sie den Pfad in den Umgebungsvariablen festlegen! Sie können auf folgendem Weg dorthin gelangen ...

Systemsteuerung -> System -> Bearbeiten Sie die Umgebungsvariablen Ihres Kontos -> Umgebungsvariablen -> Pfad -> Bearbeiten Sie dann den absoluten Pfad Ihrer php.exe und folgen Sie dem gleichen Verfahren wie im ersten Absatz, wenn nichts im Fehler enthalten ist Abteilung, dann sind Sie bereit, PHP von der Kommandozeile zu verwenden!

user3308965
quelle
Setzen Sie niemals PHP auf den PATH, wenn Sie WAMPServer verwenden. Auf WAMPServer können viele PHP-Versionen installiert sein. Wenn Sie eine Version in das PTH einfügen, können Sie nicht zwischen den Versionen wechseln.
RiggsFolly