php - 在 WAMP (WAMP64) 中 CLI PHP 的正确方法,同时在 Windows 10 上的多个 PHP 版本之间切换
问题描述
以前只是将 wamp php 目录放在我的系统环境变量中,如下所示:命令行本地使用 wamp。这或多或少是一个非常简单的环境变量编辑添加WAMP服务器PHP路径,例如;C:\wamp\bin\php\php5.6.40
我现在正在学习 WAMP 建议不要这样做的更新版本(如下所示:How To Run PHP From Windows Command Line in WAMPServer)。
在那个答案中,它显示了一个为 Linux 用户量身定制的聪明的命令行/.cmd
程序。phppath.cmd
未经编辑,它看起来像这样:
@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 转换可能让我有点困惑,但这是我为 Windows 10 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
我得到以下输出
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
---------------------------------------------------------------
---------------------------------------------------------------
此外,我无法使用 phppath 命令行更改我的 PHP 版本。
我的 WAMP64 安装版本包括5.6.40
- 7.0.33
- 7.1.26
- 7.2.14
-7.3.1
我正在尝试做的(尽管phppath.cmd
会实现),如在该线程中所见,使用简单的命令更改 php CLI 版本。
phppath 5.6.40
phppath 7.0.33
ETC
7.1.26 (cli)
但是这些命令是无效的,它们处理正确,无论是否指定,命令行总是显示 PHP 。
当我尝试将上述脚本从 linux 转换为 Windows 10 时,我是否搞砸了我的路径或其他什么?我试图确保所有路径都是合适的。
编辑:使用 W10 x64 版本 WAMP 3.1.7。阅读有使用 Powershell 的问题,或者phppath.cmd
不是为 powershell 设计的,所以我使用该程序Cmder
来执行命令行功能。
编辑 2:发现 php 7.1.26 确实在我的环境变量中。我只是在查看 USER env 变量。不知何故,它进入了 SYSTEM 环境变量(不完全确定如何)。删除了可能导致冲突的条目。进行更多测试..
现在才能phppath.cmd
正常工作。
编辑3:现在最后一次编辑..我稍后会尝试更多地解决这个问题,如果有人有任何见解,请提供!因此,正如我所说的 wamp php 目录位于系统环境变量中,一旦我删除了该条目ERROR C:/wamp64 or PHP in path.
,WAMP 中的错误消息 [ ] 就消失了。
至于在 PHP CLI 版本之间切换/更改——截至目前,这是一种创可贴的解决方案,但可行……如果我只是将phppath.cmd
文件C:\Windows
夹中的文件从 set defaultPHPver=7.1.26
另一个版本更改为在命令行上使用 phppath 更改 PHP CLI 版本(重新启动后)。set defaultPHPver=7.0.33
set defaultPHPver=5.6.40
它似乎是如何工作的......
(在 cmd 文件中手动设置默认路径...)... 打开一个 CLI,如 cmder 输入..
php路径
(这里我在我的 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
---------------------------------------------------------------
---------------------------------------------------------------
然后我可以继续使用默认的php
CLI 功能..
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
需要键入php
命令才能工作。
所以现在这很好而且可行。我只需手动将其编辑为phppath.cmd
我想要的默认版本并重置我的计算机。
唯一的问题是,按照说明,phppath.cmd
应该能够使用我上面尝试的命令即时更改 PHP CLI 版本。这当然比每次我想更改版本时都必须手动编辑 .cmd 文件并重新启动要好。
任何人都知道为什么我的 Windows 10 修改后phppath.cmd
不会通过命令行更改版本,只能通过修改文件并重新启动计算机?将不胜感激......最后一步下来:)
编辑:评论有点长,总结定义%PATH%
确实pathBak
是答案,如@michael_heath 所示使用下面的脚本完全可以在我的Windows 10机器上工作,版本更改等等。
解决方案
在未编辑的第 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
。 - 如果所选 PHP 版本中不存在 Pear 变量,请取消定义。
- 添加
%pathBak%
以存储原始PATH
值,因此PATH
如果在同一会话中再次运行脚本,则可以重用原始值。 - 添加了参数
dir
。将列出文件夹名称,以便您查看可用的版本。
推荐阅读
- python - 无法在 Windows 7 上使用 Python 3.6.0 构建扭曲(pip install twisted)
- java - Spring Data Jpa 展示
- go - 新 github 项目中的供应商库
- javascript - 多维数组名 [*] 选择器
- corda - 在 Flows 中直接访问网络 API
- unity3d - 如何在 Unity3D 上检测附加构建模式?
- c++ - 0xC0000005:访问冲突读取位置 0xCDCDCDCD
- python - “不支持的图像对象”,使用 Tesseract
- sql - windows10中的sqlcmd脚本访问数据后停止运行
- python - KeyError 在我转换数据类型时出现,尽管我在数据框中有该列