Як запустити PHP з командного рядка Windows у WAMPServer


81

Я новачок у php і хотів запустити php із командного рядка. Я встановив WAMP і встановив "Системні змінні" в мою папку php (яка є C:\wamp\bin\php\php5.4.3).

Коли я переходжу до Run-> CMD-> Введіть php -aі натисніть Enter, це говоритьinteractive mode enabled . Але коли я пишу, echo 'Hi';це нічого не показує.

Навіть я не бачу нічого на зразок 'php> ", коли я php -aвводжу та натискаю enter.



Наскільки я можу сказати , єдино правильний варіант для Windows , щоб використовувати відмінну psysh , рекомендовану від цього іншого SO відповіді: stackoverflow.com/a/33790472/327074
icc97

Відповіді:


72

CLP PHP, як його називають (php для інтерфейсу командного рядка), називається php.exe Він живе в c:\wamp\bin\php\php5.x.y\php.exe (де x та y - номери версій php, які ви встановили)

Якщо ви хочете створити php-скрипти для запуску з командного рядка, тоді це чудово, це просто і дуже корисно.

Створіть собі командний файл, подібний до цього, давайте зателефонуємо йому phppath.cmd:

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

Змініть x.y.zдійсне ім’я папки для версії PHP, яку ви встановили в WAMPServer

Збережіть це в одній зі своїх папок, яка вже є у вашому PATH, щоб ви могли запустити її з будь-якого місця.

Тепер у вікні команд cd у вихідну папку та запустіть> phppath.

Тоді біжи

php your_script.php

Це повинно працювати як мрія.

Ось приклад, який налаштовує PHP Composer та PEAR, якщо потрібно, і вони існують

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

Викличте цей командний файл так, щоб використовувати версію PHP за замовчуванням

> phppath

Або отримати конкретну версію PHP, подібну цій

> phppath 5.6.30

1
Це працює, дякую. Чи можете ви пояснити, як це працює? Я бачу шлях до папки php, але як це пов'язано зі змінною командного рядка "php", і що робить PATH =% PATH%?
TetraDev

PATH=%PATH%каже створити нову змінну середовища PATH із поточним шляхом, тобто %PATH%плюс новий каталог, який ми хочемо додати до нього. Windows шукає папки в PATH, щоб знайти виконувані файли, тобто "php.exe", який він не може знайти в поточному робочому каталозі.
RiggsFolly

1
Це прекрасно працює на W10. Ви, мабуть, зробили щось не так
RiggsFolly

OP фактично просив PHP REPL у Windows. Не думаю, що це відповідає на питання
icc97

1
@Cullub Не працює в Power Shell - у звичайній оболонці це працює
Йоганнес,

36

Я пам’ятаю, що колись кілька років тому я натрапив на цю проблему, це тому, що у вікнах немає лінії зчитування, отже, немає інтерактивної оболонки, щоб використовувати інтерактивний режим php без підтримки лінії зв’язку, ви можете зробити це замість цього:

C:\>php -a 
Interactive mode enabled 

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

Після входу в інтерактивний режим введіть за допомогою відкриваючого ( <?php) та закриваючого ( ?>) php тегу та закінчуйте контролем Z (^Z ), який позначає кінець файлу.

Я також нагадую, що я знайшов рішення в коментарі користувача сайту php: http://www.php.net/manual/en/features.commandline.interactive.php#105729


PHP 7.1 readlineувімкнено у збірці Windows. Виконання php -aприведе вас до Interactive Shellі дозволить виконувати команди під час натискання клавіші Enter, не потрібно вводити текст<?php і т.д. ... бачить цей коментар на різницю: be2.php.net/manual/en / ...
superphonic

12

Спробуйте використати командний файл

  1. Відкрийте блокнот
  2. типу php -S localhost:8000
  3. зберегти файл як .batрозширення,server.bat
  4. тепер натисніть на server.batфайл, на якому ваш сервер готовийhttp://localhost:8000

Залежність

якщо у вас помилка php не розпізнає жодної внутрішньої чи зовнішньої команди, перейдіть до змінної середовища та відредагуйте шлях до php.exe "C:\wamp\bin\php\php5.4.3"


З WAMPServer ви ніколи не повинні додавати нічого до шляху. Це знищує можливість легкого переключення між кількома версіями PHP
RiggsFolly

11

Проблема, яку ви описуєте, схожа на вашу версію PHP, можливо, не вистачає модуля PHP readline, через що інтерактивна оболонка не працює. В основі цього лежить подання помилки PHP .

Спробуйте бігти

php -m

І подивіться, чи не з’явиться на виході "readline".

Можуть бути вагомі причини для пропуску лінії зчитування з розподілу. PHP, як правило, виконується веб-сервером; так що це насправді не потрібно для більшості випадків використання. Я впевнений, що ви можете виконати PHP-код у файлі з командного рядка, використовуючи:

php file.php

Існує також phpsh проект який забезпечує (кращу) інтерактивну оболонку для PHP. Однак у деяких людей виникають проблеми із запуском під Windows (я сам цього не пробував).

Редагувати : Відповідно до документації тут , readlineWindows не підтримує:

Примітка. Це розширення недоступне на платформах Windows.

Отже, якщо це правильно, ваші варіанти:

  • Уникайте інтерактивної оболонки, а просто виконуйте PHP-код у файлах з командного рядка - це має добре працювати
  • Спробуйте змусити phpsh працювати під Windows

Ні, він не з'являється? Що це означає?
Даман

Це означає, що інтерактивний режим не працює у вашому дистрибутиві PHP. Я думаю, вам краще за все вставити код у файли .php і виконати їх із командного рядка або через веб-сервер - це має спрацювати. Посилання в моїй відповіді зазначає, що ви можете скомпілювати PHP із джерела та включити, readlineщоб це працювало, - але це може бути невеликою справою в Windows, якщо у вас немає необхідного досвіду та встановлено весь ланцюжок інструментів.
driis

@driis Я встановив python для використання phpsh з Facebook, але після багатьох досліджень я виявив, що phpsh не сумісний з python 3 :( Щось те саме, що phpsh, що підтримується python 3?
Даман

@Daman, вибач, я нічого не знаю. Можливо, встановити Python 2? Крім того, я думаю, що люди також мали проблеми із запуском phpsh під Windows, знову ж таки, я не пробував сам.
driis

10

Якщо ви хочете просто запустити швидкий фрагмент коду, ви можете використовувати опцію -r:

php -r "echo 'hi';"

-r дозволяє запускати код без використання тегів скриптів <?..?>


4

Ви можете запускати php-сторінки за допомогою php.exe, створювати деякі php-файли з php-кодом і в cmd писати "[PATH to php.ext]\php.exe [path_to_file]\file.php"


який шлях до вашого php.exe?
Адіді 24.03.13

C: \ wamp \ bin \ php \ php5.4.3 \ php.exe
Даман,

1
тому створіть, скажімо, назву php-сторінки test.php з <? php echo ('test'); ?> - розмістіть його на c: / відкрийте свій командний рядок і введіть "C: \ wamp \ bin \ php \ php5.4.3 \ php.exe" "c: \ test.php" - що ви бачите?
Адіді

2

ОНОВЛЕНО Після кількох досліджень, найкращим рішенням було використовувати цю інформацію ще один потік stackoverflow, щоб уникнути введення ctrl + z, а також з виводу скрині. Отже, замість php -aвас слід використовуватиcall "php.exe" -f NAMED_SCRIPT.php

СТАРА лінія зчитування неможлива під Windows, тому жодна з існуючих оболонок php, написаних на php, не буде працювати. Але є обхідний шлях із використанням інтерактивного режиму.

Тут є 2 загальні проблеми. Ви не можете побачити результат, доки не виконаєте команду CTRL Z, щоб вказати фінал коду / файлу, як EOF. Коли ви це робите, результат у більшості випадків друкується результат і швидко закривається вікно. У будь-якому випадку, ви повернетесь до cmd, а не до інтерактивного режиму.

Збережіть цей вміст у .bat-файлі та визначте PHP PATH у змінних Windows або змініть php.exe на "повний шлях до exe":

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

echo.
echo.

call "PHP Shell.bat"

Це простий пакетний запуск - режим php.exe. Коли він запускає php, зупиніть скрипт, навіть пауза не записується, оскільки "входить" в інтерактивний режим очікування введення. Коли ви натискаєте CTRL Z, отримуєте SIGSTEP (наступний крок), а не SIGSTOP (закриття, зазвичай CTRL + C), а потім читаєте наступне втручання, що є рекурсивним викликом самого .bat. Оскільки ви завжди в режимі PHP -a, немає команди виходу. Ви повинні використовувати CTRL + C або натиснути мишу на вихідний хрестик. (Без alt + f4)

Ви також можете використовувати конвертер "Bat to Exe" для простого використання.


1

просто виконайте ці дії, якщо вам не потрібна ваша стара версія php:

  • відкрийте wamp та клацніть правою кнопкою миші на менеджері wamp, ніж go: tools / Змінити PHP CLI версію, ніж змінити версію php на останню
  • інший раз клацніть правою кнопкою миші на диспетчері вампів, ніж go: tools / Видаліть несерйозні версії та видаліть найстарішу версію, на якій наполягає ваша система, щоб вона була вашою версією ПК на php: D
  • перейдіть до панелі керування / облікового запису користувача / змініть змінні мого середовища, а у змінній PATH натисніть редагувати та додайте останній шлях до версії php, який знаходиться у папці bam вашого сервера Wamp
  • закрийте всі командні рядки або IDE і перезапустіть їх і перевірте php -v

це добре працює


0

Це тому, що ви перебуваєте в "Інтерактивному режимі", де php оцінює все, що ви вводите. Щоб побачити кінцевий результат, потрібно виконати 'ctrl + z' та Enter. Ви повинні побачити оцінений результат зараз :)

ps запустити cmd від імені адміністратора!


0

Наступне рішення спеціально для навколишнього середовища:

Це мене ненадовго розігнало, спробувало всі інші пропозиції, $ PATH тощо, навіть шукало в реєстрі Windows, шукаючи підказки:

Графічний інтерфейс користувача (wampmanager) вказує, що я вибрав версію 7, і так, якщо я phpinfo () на сторінці в браузері, він повідомить мені свою версію 7.xx, але php -v у командному рядку повідомляє 5.xx

Якщо натиснути правою кнопкою миші на голові wampmanager значок -> інструменти -> видалити невикористані версії та видалити стару версію, нехай вона перезапустить служби, тоді командний рядок поверне 7.xx

Це рішення означає, що у вас більше немає старої версії, якщо ви хочете переключатися між версіями php, але в C: \ wamp64 \ wampmanager.conf є файл конфігурації, який, як видається, визначає версію для використання з CLI (параметр називається phpCliVersion) . Я змінив його, перезапустив сервер ... думав, що я це вирішив, але ніякого ефекту, можливо, я був трохи нетерплячий, тому у мене відчуття, що в цьому може бути якийсь пробіг.

Надія, що комусь допомагає


1
Стара версія, як ви її називаєте, це версія PHP, на яку перевіряються всі власні внутрішні сценарії WAMPServer. Якщо ви видалите PHP5.xx, це означає, що ви ризикуєте не працювати ці скрипти!
RiggsFolly

-1

У Windows помістіть файл php.exe у windows / system32 або будь-яку іншу виконувану папку системи, а потім перейдіть до командного рядка та введіть php та натисніть Enter після нього, якщо він не генерує помилок, тоді ви готові використовувати PHP у командному рядку . Якщо ви встановили свій php.exe десь інше, ніж системні папки за замовчуванням, вам потрібно встановити шлях до нього у змінних середовища! Ви можете дістатися наступним шляхом ....

панель управління -> Система -> Змінні змінних середовища вашого облікового запису -> Змінні середовища -> шлях -> редагування, встановіть там абсолютний шлях вашого php.exe і виконайте ту ж процедуру, що і в першому абзаці, якщо в помилці немає нічого відділ, тоді ви готові використовувати php з командного рядка!


Ніколи не ставте PHP на PATH під час використання WAMPServer. На WAMPServer може бути встановлено багато версій PHP. Поміщення однієї версії в PTH означає, що ви не можете переключатися між версіями.
RiggsFolly
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.