it-swarm.com.ru

Как бежать PHP Из командной строки Windows в WAMPServer

Я новичок в php и хотел запустить php из командной строки. Я установил WAMP и установил «Системные переменные» в моей папке php (C:\wamp\bin\php\php5.4.3).

Когда я иду в Run -> CMD -> Введите php -a и нажимаю ввод, он говорит interactive mode enabled. Но когда я пишу echo 'Hi';, это ничего не показывает.

Я даже не вижу ничего похожего на 'php> ", когда набираю php -a и нажимаю ввод.

77
Daman

CLI 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, чтобы вы могли запустить ее из любого места.

Теперь из командного окна перейдите в вашу исходную папку и запустите> 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.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=

Вызовите этот командный файл, чтобы использовать версию PHP по умолчанию

> phppath

Или получить конкретную версию PHP, например

> phppath 5.6.30
67
RiggsFolly

Я помню, как однажды, когда я наткнулся на эту проблему несколько лет назад, это связано с тем, что в окнах нет readline, а значит, нет интерактивной оболочки, чтобы использовать php интерактивный режим без поддержки readline, вы можете сделать это вместо этого:

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

36
Hendra Uzia

Попробуйте использовать командный файл

  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"

12
Nishchit Dhanani

Проблема, которую вы описываете, звучит так, как будто в вашей версии PHP может отсутствовать модуль readline PHP, из-за чего интерактивная оболочка не работает. Я основываю это на этой PHP ошибке подчинении.

Попробуйте запустить 

php -m

И посмотрите, появляется ли readline в выводе.

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

php file.php

Существует также проект phpsh , который предоставляет (лучшую) интерактивную оболочку для PHP. Однако у некоторых людей возникли проблемы с запуском его под Windows (я сам не пробовал Это).

Edit: Согласно документация здесь , readline не поддерживается в Windows:

Примечание. Это расширение недоступно на платформах Windows.

Итак, если это правильно, ваши варианты:

  • Избегайте интерактивной оболочки и просто выполняйте код PHP в файлах из командной строки - это должно работать хорошо
  • Попробуйте заставить phpsh работать под Windows
11
driis

Если вы хотите просто запустить быстрый фрагмент кода, вы можете использовать опцию -r:

php -r "echo 'hi';"

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

10
James Lock

Вы можете запустить php-страницы с помощью php.exe Создать php-файл с php-кодом и в cmd write "[PATH to php.ext]\php.exe [path_to_file]\file.php" 

3
Adidi

UPDATED После нескольких исследований лучшим решением было использовать эту информацию другой поток stackoverflow , чтобы избежать ввода ctrl + z, а также из вывода scree . Итак, вместо php -a вы следует использовать call "php.exe" -f NAMED_SCRIPT.php

OLD Readline невозможен в 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" для простоты использования.

2
erm3nda

Следующее решение специально для окружающей среды:  

Это немного меня обмануло, я попробовал все остальные предложения, $ PATH и т.д. Даже искал реестр Windows в поисках подсказок:

GUI (wampmanager) показывает, что у меня выбрана версия 7, и да, если я phpinfo () на странице в браузере, он сообщит мне свою версию 7.x.x, а php -v в командной строке выдает 5.x.x

Если вы щелкнете правой кнопкой мыши на заголовке wampmanager и выберите icon-> tools-> delete неиспользуемые версии и удалите старую версию, дайте ей перезапустить сервисы, а затем команда Prompt вернет 7.x.x

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

Надеюсь, что это помогает кому-то

1
BuddhaLincoln

просто сделайте эти шаги, если вам не нужна старая версия php:

  • откройте wamp и щелкните правой кнопкой мыши на wamp manager, затем перейдите: tools/Change PHP CLI версии, чем изменить версию php на последнюю
  • в другой раз щелкните правой кнопкой мыши на wamp manager, затем перейдите: tools/Delete unuserd version и удалите самую старую версию, на которой ваша система настаивает, чтобы она была вашей версией php для ПК: D
  • перейдите в панель управления/учетную запись пользователя/измените мои переменные окружения и в переменной PATH нажмите edit и добавьте путь вашей последней версии php, который находится в папке bin вашего сервера wamp
  • закройте все командные строки или IDE, перезапустите их и проверьте на наличие php -v

это хорошо работает

0
Mohammad Hadi

Это потому, что вы находитесь в «Интерактивном режиме», где php оценивает все, что вы печатаете. Чтобы увидеть конечный результат, вы нажимаете Ctrl + Z и Enter. Вы должны увидеть оцененный результат сейчас :)

постскриптум запустить cmd от имени администратора!

0
saan