Jak uruchomić PHP z wiersza poleceń Windows w WAMPServer

81

Jestem nowy w php i chciałem uruchomić php z linii poleceń. Zainstalowałem WAMP i ustawiłem "Zmienne systemowe" na mój folder php (którym jest C:\wamp\bin\php\php5.4.3).

Kiedy idę do Run-> CMD-> Wpisz php -ai naciśnij Enter, mówi interactive mode enabled. Ale kiedy piszę echo 'Hi';, nic nie pokazuje.

Nawet nie widzę czegoś takiego jak „php>”, kiedy piszę php -ai wciskam Enter.

Daman
źródło
O ile wiem, jedyną właściwą opcją dla systemu Windows jest użycie doskonałego psysh , zalecanego z tej innej odpowiedzi SO: stackoverflow.com/a/33790472/327074
icc97

Odpowiedzi:

72

PHP CLI, jak się nazywa (php dla interfejsu wiersza poleceń) nazywa się php.exe. Znajduje się w c:\wamp\bin\php\php5.x.y\php.exe (gdzie x i y to numery wersji php, które zainstalowałeś)

Jeśli chcesz utworzyć skrypty php do uruchamiania z wiersza poleceń, to świetnie, jest to łatwe i bardzo przydatne.

Utwórz sobie taki plik wsadowy, nazwijmy go phppath.cmd:

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

Zmień x.y.zna prawidłową nazwę folderu dla wersji PHP zainstalowanej na serwerze WAMPServer

Zapisz to w jednym ze swoich folderów, który jest już w Twojej PATH, abyś mógł go uruchomić z dowolnego miejsca.

Teraz z okna poleceń przejdź do folderu źródłowego i uruchom> phppath.

Następnie uruchomić

php your_script.php

Powinien działać jak sen.

Oto przykład, który konfiguruje PHP Composer i PEAR, jeśli jest to wymagane i istnieją

@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=

Wywołaj ten plik poleceń w ten sposób, aby użyć domyślnej wersji PHP

> phppath

Lub uzyskać określoną wersję PHP, taką jak ta

> phppath 5.6.30
RiggsFolly
źródło
1
To działa, dzięki. Czy możesz wyjaśnić, jak to działa? Widzę ścieżkę do folderu php, ale w jaki sposób to wiąże ją ze zmienną wiersza poleceń „php” i co robi ta PATH =% PATH%?
TetraDev
PATH=%PATH%mówi, że utwórz nową zmienną środowiskową PATH z bieżącą ścieżką, tj. %PATH%plus nowy katalog, który chcemy do niego dodać. System Windows przeszukuje foldery w ścieżce PATH, aby znaleźć pliki wykonywalne, np. „Php.exe”, których nie może znaleźć w bieżącym katalogu roboczym.
RiggsFolly
1
Działa dobrze na W10. Musiałeś zrobić coś złego
RiggsFolly
OP skutecznie prosił o PHP REPL w systemie Windows. Nie sądzę, żeby to odpowiadało na pytanie
icc97
1
@Cullub Nie działa w Power Shell - w normalnej powłoce działa
Johanness
36

Pamiętam, jak pewnego razu natknąłem się na ten problem kilka lat temu, ponieważ okna nie mają readline, a więc nie mają powłoki interaktywnej, aby użyć trybu interaktywnego php bez obsługi readline, możesz zamiast tego zrobić:

C:\>php -a 
Interactive mode enabled 

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

Po wejściu w tryb interaktywny, wpisz używając tagu php open ( <?php) i close ( ?>) i zakończ kontrolką Z ( ^Z), która oznacza koniec pliku.

Przypominam też, że rozwiązanie znalazłem z komentarza użytkownika strony php: http://www.php.net/manual/en/features.commandline.interactive.php#105729

Hendra Uzia
źródło
PHP 7.1 zostało readlinewłączone w budowaniu systemu Windows. Robi php -aprzeniesie Cię do Interactive Shelli umożliwiają wykonywanie poleceń, jak trafisz wejść, nie ma potrzeby, aby wpisać <?phpetc ... zobacz ten komentarz do różnicy: be2.php.net/manual/en/...
superphonic
12

Spróbuj użyć pliku wsadowego

  1. Otwórz notatnik
  2. rodzaj php -S localhost:8000
  3. zapisz plik jako .batrozszerzenie,server.bat
  4. teraz kliknij server.batplik, na którym twój serwer jest gotowyhttp://localhost:8000

Zależność

Jeśli pojawi się błąd, php nie rozpoznaje żadnego polecenia wewnętrznego ani zewnętrznego, przejdź do zmiennej środowiskowej i edytuj ścieżkę do php.exe "C:\wamp\bin\php\php5.4.3"

Nishchit Dhanani
źródło
Z WAMPServer nigdy nie powinieneś niczego dodawać do ścieżki. Niszczy możliwość łatwego przełączania się między wieloma wersjami PHP
RiggsFolly
11

Problem, który opisujesz, brzmi tak, jakby twoja wersja PHP nie zawierała modułu readline PHP, co powoduje, że powłoka interaktywna nie działa. Opieram się na tym zgłoszeniu błędu PHP .

Spróbuj biegać

php -m

I zobacz, czy na wyjściu pojawi się „readline”.

Pominięcie readline z dystrybucji może mieć dobre powody. PHP jest zwykle wykonywane przez serwer WWW; więc w większości przypadków nie jest to potrzebne. Jestem pewien, że możesz wykonać kod PHP w pliku z wiersza poleceń, używając:

php file.php

Istnieje również projekt phpsh , który zapewnia (lepszą) interaktywną powłokę dla PHP. Jednak niektórzy ludzie mieli problemy z uruchomieniem go w systemie Windows (sam tego nie próbowałem).

Edycja : zgodnie z dokumentacją tutaj , readlinenie jest obsługiwana w systemie Windows:

Uwaga: to rozszerzenie nie jest dostępne na platformach Windows.

Więc jeśli to prawda, masz następujące opcje:

  • Unikaj powłoki interaktywnej i po prostu wykonaj kod PHP w plikach z wiersza poleceń - to powinno działać dobrze
  • Spróbuj uruchomić phpsh w systemie Windows
driis
źródło
Nie, to się nie pojawia? Co to znaczy?
Daman,
Oznacza to, że tryb interaktywny nie działa w Twojej dystrybucji PHP. Myślę, że najlepiej będzie umieścić kod w plikach .php i uruchomić je z wiersza poleceń lub przez serwer WWW - to powinno działać. Link w mojej odpowiedzi wspomina, że ​​możesz skompilować PHP ze źródła i dołączyć readlinego, aby to działało - ale może to być trochę wysiłku w systemie Windows, jeśli nie masz potrzebnego doświadczenia i zainstalowano cały zestaw narzędzi.
driis
@driis Zainstalowałem Pythona, aby używać phpsh z Facebooka, ale po wielu badaniach stwierdziłem, że phpsh nie jest kompatybilny z pythonem 3 :( Coś tak samo jak phpsh, które jest obsługiwane przez python 3?
Daman
@Daman, przepraszam, nic nie wiem. Może zainstalować Python 2? Wydaje mi się również, że ludzie mają problemy z uruchomieniem phpsh w systemie Windows, ponownie, sam tego nie próbowałem.
driis
10

Jeśli chcesz po prostu uruchomić szybki fragment kodu, możesz użyć opcji -r:

php -r "echo 'hi';"

-r pozwala na uruchamianie kodu bez używania tagów skryptu <?..?>

James Lock
źródło
4

Możesz uruchamiać strony php za pomocą php.exe, utwórz plik php z kodem php i napisz cmd "[PATH to php.ext]\php.exe [path_to_file]\file.php"

Adidi
źródło
jaka jest ścieżka do twojego php.exe?
Adidi
C: \ wamp \ bin \ php \ php5.4.3 \ php.exe
Daman
1
więc utwórz powiedzmy, że nazwa strony php test.php z <? php echo ('test'); ?> - umieść go na c: / otwórz wiersz poleceń i wpisz „C: \ wamp \ bin \ php \ php5.4.3 \ php.exe” „c: \ test.php” - co widzisz?
Adidi
2

ZAKTUALIZOWANO Po kilku badaniach, najlepszym rozwiązaniem było użycie tej informacji w innym wątku przepełnienia stosu, aby uniknąć wejścia ctrl + z, a także wyjścia osypiska. Więc zamiast tego php -apowinieneś użyćcall "php.exe" -f NAMED_SCRIPT.php

OLD Readline nie jest możliwy pod Windows, więc żadna z istniejących powłok php napisanych w php nie będzie działać. Istnieje jednak obejście za pomocą -a trybu interaktywnego.

2 wspólne problemy tutaj. Nie możesz zobaczyć wyniku, dopóki nie wykona polecenia CTRL Z, aby wskazać końcowy kod / plik, taki jak EOF. Kiedy to zrobisz, w większości przypadków wynik jest drukowany i szybko zamykane okno. W każdym razie wrócisz do cmd, a nie do trybu interaktywnego -a.

Zapisz tę zawartość w pliku .bat i zdefiniuj swoją ścieżkę PHP PATH w zmiennych systemu Windows lub zmień plik php.exe na „pełną ścieżkę do exe”:

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

echo.
echo.

call "PHP Shell.bat"

Jest to proste uruchamianie w trybie Batch -a programu php.exe. Kiedy uruchamia php, zatrzymaj skrypt nawet bez przerwy, ponieważ jest „w” interaktywnym oczekiwaniu na wejście. Kiedy naciśniesz CTRL Z, otrzymujesz SIGSTEP (następny krok), a nie SIGSTOP (blisko, zwykle CTRL + C), a następnie przeczytaj następne polecenie, które jest rekurencyjnym wywołaniem samego .bat. Ponieważ zawsze jesteś w trybie PHP -a, nie ma polecenia wyjścia. Musisz użyć CTRL + C lub nacisnąć myszką w krzyżyk wyjściowy. (Bez alt + f4)

Możesz także użyć konwertera „Bat to Exe”, aby ułatwić korzystanie z niego.

m3nda
źródło
1

po prostu wykonaj następujące kroki, jeśli nie potrzebujesz starej wersji php:

  • otwórz wamp i kliknij prawym przyciskiem myszy wamp managera, a następnie przejdź: narzędzia / Zmień wersję PHP CLI niż zmień wersję php na najnowszą
  • innym razem kliknij prawym przyciskiem myszy wamp managera, a potem idź: narzędzia / Usuń nieużywane wersje i usuń najstarszą wersję, którą twój system nalega na wersję php twojego komputera: D
  • przejdź do panelu sterowania / konta użytkownika / zmień moje zmienne środowiskowe iw zmiennej PATH kliknij edytuj i dodaj ścieżkę do najnowszej wersji php, która znajduje się w folderze bin serwera wamp
  • zamknij wszystkie linie poleceń lub środowiska IDE i uruchom je ponownie i sprawdź, czy nie ma php -v

to działa dobrze

Mohammad Hadi
źródło
0

Dzieje się tak, ponieważ jesteś w „trybie interaktywnym”, w którym php ocenia wszystko, co wpiszesz. Aby zobaczyć efekt końcowy, naciśnij klawisze Ctrl + Z i Enter. Powinieneś teraz zobaczyć oszacowany wynik :)

ps uruchom cmd jako Administrator!

saan
źródło
0

Poniższe rozwiązanie jest przeznaczone specjalnie dla środowisk wampirów:

To mnie trochę wystraszyło, wypróbowałem wszystkie inne sugestie, $ PATH itp. Nawet przeszukałem rejestr systemu Windows w poszukiwaniu wskazówek:

GUI (wampmanager) wskazuje, że mam wybraną wersję 7 i tak, jeśli phpinfo () na stronie w przeglądarce powie mi swoją wersję 7.xx, ale php -v w wierszu poleceń zgłasza 5.xx

Jeśli klikniesz prawym przyciskiem myszy ikonę wampmanagera na ikonę-> narzędzia-> usuń nieużywane wersje i usuń starą wersję, pozwól mu ponownie uruchomić usługi, a wiersz polecenia zwróci 7.xx

To rozwiązanie oznacza, że ​​nie masz już starej wersji, jeśli chcesz przełączać się między wersjami php, ale w C: \ wamp64 \ wampmanager.conf znajduje się plik konfiguracyjny, który wydaje się określać wersję do użycia z CLI (parametr nazywa się phpCliVersion) . Zmieniłem to, zrestartowałem serwer ... myślałem, że rozwiązałem to, ale bez efektu, być może byłem trochę niecierpliwy, więc mam wrażenie, że może to być trochę przebieg.

Mam nadzieję, że to komuś pomoże

BuddhaLincoln
źródło
1
Stara wersja, jak ją nazywasz, jest wersją PHP, z którą testowane są wszystkie wewnętrzne skrypty WAMPServer. Jeśli usuniesz PHP5.xx, ryzykujesz, że te skrypty nie będą działać!
RiggsFolly
-1

W systemie Windows umieść plik php.exe w systemie Windows / system32 lub jakimkolwiek innym systemowym folderze wykonywalnym, a następnie przejdź do wiersza poleceń i wpisz php i naciśnij Enter po nim, jeśli nie wygeneruje żadnego błędu, możesz używać PHP w wierszu poleceń . Jeśli ustawiłeś swój php.exe w innym miejscu niż domyślne foldery systemowe, musisz ustawić jego ścieżkę w zmiennych środowiskowych! Możesz się tam dostać następującą ścieżką ....

panel sterowania -> System -> Edytuj zmienne środowiskowe swojego konta -> Wartości środowiskowe -> ścieżka -> edytuj, a następnie ustaw tam bezwzględną ścieżkę do swojego php.exe i postępuj zgodnie z tą samą procedurą co w pierwszym akapicie, jeśli nie ma żadnego błędu dział, jesteś gotowy do korzystania z php z linii poleceń!

user3308965
źródło
Nigdy nie umieszczaj PHP na PATH podczas korzystania z WAMPServer. WAMPServer może mieć zainstalowanych wiele wersji PHP. Umieszczenie jednej wersji w PTH oznacza, że ​​nie można przełączać się między wersjami.
RiggsFolly