Як запустити 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.