Правильный способ CLI PHP в WAMP (WAMP64), при переключении между несколькими версиями PHP в Windows 10 - PullRequest
3 голосов
/ 28 марта 2019

Используется только для того, чтобы поместить каталог wamp php в переменные окружения моей системы, как было сказано здесь: командная строка локально с использованием wamp .Более или менее это очень простая правка переменной среды с добавлением PHP-пути к серверам WAMP, например ;C:\wamp\bin\php\php5.6.40

. Сейчас я изучаю более новые версии, которые WAMP рекомендует не делать (как показано здесь: Как запустить PHP из командной строки Windows в WAMPServer ).

В этом ответе показана умная программа командной строки / .cmd с именем phppath.cmd, предназначенная для пользователей Linux.

Не отредактировано, это выглядит так:

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

Звучит великолепно, но у меня с этим небольшой успех.Как это работает, я помещаю файл phppath.cmd в мой каталог Windows, и он запускается автоматически при запуске Windows.

Возможно, преобразования linux-windows меня немного смутили, но вот мой отредактированный вывод для Windows10 WAMP64 (текущий в моей папке C:\Windows)

@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 * Serch path by default
REM * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
REM * EDIT THE NEXT 3 Parameters to fit your installed WAMPServer
REM * for example I installed WAMPServer on the D: drive you may
REM * have used C:
REM * - baseWamp : is the drive and folder where you installed WAMPServer
REM * - defaultPHPver : is the version of PHP that will be pathed
REM *                   if no Parameter is put on the bat file
REM * - composerInstalled : Where I insatlled composerInstalled
REM * - phpFolder : The folder structure that contains the Multiple
REM *               possible version of PHP I have installed
REM **********************************************************************


set baseWamp=C:\wamp64
set defaultPHPver=7.1.26
set composerInstalled=C:\Users\User\AppData\Roaming\Composer
set phpFolder=C:\wamp64\bin\php

if %1.==. (
    set phpver=C:\wamp64\bin\php\php%defaultPHPver%
) else (
    set phpver=C:\wamp64\bin\php\php
)

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=C:\wamp64\bin\php\php%phpver%
    set PHP_PEAR_INSTALL_DIR=C:\wamp64\bin\php\php%phpver%\pear
    set PHP_PEAR_DOC_DIR=C:\wamp64\bin\php\php%phpver%\docs
    set PHP_PEAR_BIN_DIR=C:\wamp64\bin\php\php%phpver%
    set PHP_PEAR_DATA_DIR=C:\wamp64\bin\php\php%phpver%\data
    set PHP_PEAR_PHP_BIN=C:\wamp64\bin\php\php%phpver%\php.exe
    set PHP_PEAR_TEST_DIR=C:\wamp64\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 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=C:\Users\User\AppData\Roaming\Composer
    set COMPOSER_CACHE_DIR=C:\Users\User\AppData\Roaming\Composer

    PATH=%PATH%;C:\Users\User\AppData\Roaming\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=

Вот здесь и возникает моя путаница.

Используя командную строку phppath в командной строке, я получаю следующееoutput

PHP 7.1.26 (cli) (built: Jan  9 2019 21:51:32) ( ZTS MSVC14 (Visual C++ 2015) x64 )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
---------------------------------------------------------------
PEAR DOES NOT EXIST IN THIS VERSION OF php
---------------------------------------------------------------
COMPOSER INCLUDED IN THIS CONFIG
---------------------------------------------------------------
---------------------------------------------------------------

Кроме того, я не могу изменить версию PHP с помощью командной строки phppath.

Версии в моей установке WAMP64 состоят из 5.6.40 - 7.0.33 - 7.1.26 - 7.2.14 - 7.3.1

То, что я пытаюсь сделать (и хотя phppath.cmd достигнет этого), как видно из этого потока, изменить версии CLI php с помощью простой команды.

phppath 5.6.40

phppath 7.0.33

и т. Д.

но эти команды неэффективны, они обрабатываются правильно, всегда помещайте командную строкузаявляет PHP 7.1.26 (cli) независимо от того, указан ли он.

Не испортил ли я свои пути или что-то в этом роде, когда попытался преобразовать вышеуказанный скрипт из linux в Windows 10?Я попытался убедиться, что все пути были правильными.

edit: Использование W10 x64 версии WAMP 3.1.7.Читайте, были проблемы с использованием Powershell, или, скорее, phppath.cmd не был разработан для powershell, поэтому я использую программу Cmder для функций командной строки.

edit 2: Выяснилось, что php 7.1.26 действительно былв моих переменных окружения .. Я смотрел только на переменные USER env.Каким-то образом он попал в переменные SYSTEM env (не совсем уверен, как).Удалил ту запись, которая могла вызывать конфликты.Перейдем к еще одному тестированию ..

Теперь просто установите phppath.cmd для правильной работы.

edit3: Последнее редактирование на данный момент .. Я постараюсь поэкспериментировать с этим позже, если кто-нибудьесть понимание, пожалуйста, предоставьте!Так как я заявил, что каталог wamp php находится в системных переменных среды, после удаления этой записи сообщение об ошибке [ERROR C:/wamp64 or PHP in path.] в WAMP исчезло.

Что касается переключения / изменения между версиями CLI PHP -на данный момент, решение для лейкопластыря, но работоспособное ... если я просто поменяю файл phppath.cmd в моей папке C:\Windows с set defaultPHPver=7.1.26 на другую версию, например set defaultPHPver=7.0.33 или set defaultPHPver=5.6.40 -- это работает, чтобы изменить версию CLI PHP с помощью phppath в командной строке (ПОСЛЕ перезапуска).

Как это работает ...

(вручную установить defaultpath в файле cmd...) ... Откройте CLI-подобный тип cmder в ..

phppath

(здесь у меня в phppath.cmd есть версия по умолчанию 7.0.x)

PHP 7.0.33 (cli) (built: Dec  5 2018 21:22:29) ( ZTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
---------------------------------------------------------------
PEAR DOES NOT EXIST IN THIS VERSION OF php
---------------------------------------------------------------
COMPOSER INCLUDED IN THIS CONFIG
---------------------------------------------------------------
---------------------------------------------------------------

Затем я могу продолжать использовать функции CLI по умолчанию php.

php -f version.php

Текущая версия PHP 7.0.33

Примечание: если я не инициирую с помощью команды phppath, сначала я получаю типичное сообщение об ошибке - 'php' is not recognized as an internal or external command, operable program or batch file., поэтому введите phppath iдля работы команд php.

Так что сейчас это здорово и работоспособно.Мне просто нужно вручную отредактировать phppath.cmd до версии по умолчанию, которой я хочу, и перезагрузить компьютер.

Единственная проблема заключается в том, что, согласно инструкциям, phppath.cmd должен иметь возможность изменять версию CLI PHP на лету, используя команды, которые я пытался описать выше.Это, конечно, лучше, чем необходимость вручную редактировать файл .cmd и перезапускать каждый раз, когда я хочу изменить версию.

У любого есть понимание того, почему мой Windows 10, модифицированный phppath.cmd, не будет изменять версии с помощьюкомандной строки, только путем изменения файла и перезагрузки компьютера?Буду очень признателен ... последний шаг, чтобы спуститься:)

edit: комментарии стали довольно длинными, чтобы подвести итог определения %PATH%, поскольку pathBak действительно был ответом, как показано в @michael_heath Использованиеприведенный ниже скрипт работает точно так же, как и на моем компьютере с Windows 10, смена версии и все.

1 Ответ

1 голос
/ 28 марта 2019

В строке 20 неотредактировано:

set phpver=%baseWamp%%phpFolder%%1

по сравнению со строкой 28 редактирования:

set phpver=C:\wamp64\bin\php\php

%1 - это переменная, которая содержит значение первого аргумента сценария,Отредактированная версия отсутствует %1, поэтому она не меняет версию, а использует фиксированный путь.Это может быть вашей основной проблемой.

Попробуйте эту отредактированную версию:

@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 * for example I installed WAMPServer on the D: drive you may
REM * have used C:
REM * - baseWamp : is the drive and folder where you installed
REM *              WAMPServer
REM * - defaultPHPver : is the version of PHP that will be pathed
REM *                   if no Parameter is put on the bat file
REM * - composerInstalled : Where I installed composerInstalled
REM * - phpFolder : The folder structure that contains the Multiple
REM *               possible version of PHP I have installed
REM ***************************************************************

if not defined pathBak set "pathBak=%PATH%"

set "baseWamp=C:\wamp64"
set "defaultPHPver=7.1.26"
set "composerInstalled=%appData%\composer"
set "phpFolder=\bin\php\php"

if "%~1" == "" (
    set "phpVer=%baseWamp%%phpFolder%%defaultPHPver%"
) else if "%~1" == "dir" (
    for /d %%A in ("%baseWamp%%phpFolder%*") do echo %%~nxA
    goto :end
) else (
    set "phpVer=%baseWamp%%phpFolder%%~1"
)

set "PATH=%pathBak%;%phpVer%"
php -v
echo ---------------------------------------------------------------


REM IF PEAR IS INSTALLED IN THIS VERSION OF PHP

if exist "%phpVer%\pear" (
    set "PHP_PEAR_SYSCONF_DIR=%phpVer%"
    set "PHP_PEAR_INSTALL_DIR=%phpVer%\pear"
    set "PHP_PEAR_DOC_DIR=%phpVer%\docs"
    set "PHP_PEAR_BIN_DIR=%phpVer%"
    set "PHP_PEAR_DATA_DIR=%phpVer%\data"
    set "PHP_PEAR_PHP_BIN=%phpVer%\php.exe"
    set "PHP_PEAR_TEST_DIR=%phpVer%\tests"

    echo PEAR INCLUDED IN THIS CONFIG
    echo ---------------------------------------------------------------
) else (
    set "PHP_PEAR_SYSCONF_DIR="
    set "PHP_PEAR_INSTALL_DIR="
    set "PHP_PEAR_DOC_DIR="
    set "PHP_PEAR_BIN_DIR="
    set "PHP_PEAR_DATA_DIR="
    set "PHP_PEAR_PHP_BIN="
    set "PHP_PEAR_TEST_DIR="

    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=%composerInstalled%"
    set "COMPOSER_CACHE_DIR=%composerInstalled%"

    set "PATH=%PATH%;%composerInstalled%"

    rem echo TO UPDATE COMPOSER do > composer self-update
    echo ---------------------------------------------------------------
) else (
    echo ---------------------------------------------------------------
    echo COMPOSER IS NOT INSTALLED
    echo ---------------------------------------------------------------
)

:end
set "baseWamp="
set "defaultPHPver="
set "composerInstalled="
set "phpFolder="
  • Используемые пути из вашей отредактированной версии.
  • Ваши жестко закодированные пути заменены на существующиепеременные.
  • %phpFolder% изменен на относительный путь, который добавляется к %baseWamp% при использовании (как неотредактированная версия).
  • Путь Composer изменен на %appData%\composer, который должен соответствовать вашему жестко заданному пути.
  • Исправлены пути в разделе Pear путем удаления ведущих %baseWamp%\bin\php\php.
  • Отменить определение переменных Pear, если они не существуют в выбранной версии PHP.
  • Добавлено %pathBak% для сохранения оригиналаЗначение PATH, поэтому исходное значение PATH можно использовать повторно, если сценарий снова будет запущен в том же сеансе.
  • Добавлен аргумент dir.Будет перечислять имена папок, чтобы вы могли видеть, какие версии доступны.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...