如何在 WAMPServer 中从 Windows 命令行运行 PHP

Posted

技术标签:

【中文标题】如何在 WAMPServer 中从 Windows 命令行运行 PHP【英文标题】:How To Run PHP From Windows Command Line in WAMPServer 【发布时间】:2013-03-13 21:17:30 【问题描述】:

我是 php 新手,想从命令行运行 php。我已经安装了 WAMP 并将“系统变量”设置为我的 php 文件夹(即C:\wamp\bin\php\php5.4.3)。

当我转到 Run -> CMD -> 输入 php -a 并回车时,它会显示 interactive mode enabled。但是当我写 echo 'Hi'; 时,它什么也没显示。

当我输入php -a 并按回车键时,我什至看不到“php >”之类的东西。

【问题讨论】:

***.com/questions/7361149/… 据我所知,Windows 的唯一正确选择是使用出色的 psysh,从其他 SO 答案推荐:***.com/a/33790472/327074 【参考方案1】:

PHP CLI(命令行界面的 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 更改为您在 WAMPServer 中安装的 PHP 版本的有效文件夹名称

将其保存到 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=%baseWamp%%phpFolder%%phpver%
    set PHP_PEAR_INSTALL_DIR=%baseWamp%%phpFolder%%phpver%\pear
    set PHP_PEAR_DOC_DIR=%baseWamp%%phpFolder%%phpver%\docs
    set PHP_PEAR_BIN_DIR=%baseWamp%%phpFolder%%phpver%
    set PHP_PEAR_DATA_DIR=%baseWamp%%phpFolder%%phpver%\data
    set PHP_PEAR_PHP_BIN=%baseWamp%%phpFolder%%phpver%\php.exe
    set PHP_PEAR_TEST_DIR=%baseWamp%%phpFolder%%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

【讨论】:

它有效,谢谢。你能解释一下这是如何工作的吗?我看到了 php 文件夹的路径,但它如何与命令行变量“php”相关联,以及 PATH=%PATH% 的作用是什么? PATH=%PATH% 表示使用当前路径创建一个新的 PATH 环境变量,即%PATH% 加上我们要添加到它的新目录。 Windows 搜索 PATH 中的文件夹以查找在当前工作目录中找不到的可执行文件,即“php.exe”。 OP 实际上要求在 Windows 中使用 PHP REPL。我认为这不能回答问题 @Cullub 在 Power Shell 中不工作 - 在普通 shell 中它可以工作 @Cullub 嗨,不,它不是为了在 PowerShell 中使用而编写的【参考方案2】:

我记得几年前我偶然发现了这个问题,因为windows没有readline,所以没有交互式shell,要使用没有readline支持的php交互模式,你可以这样做:

C:\>php -a 
Interactive mode enabled 

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

进入交互模式后,输入使用开始(&lt;?php)和结束(?&gt;)php标签,并以控制Z(^Z)结束,表示文件结束。

我还记得我从 php 的网站用户评论中找到了解决方案:http://www.php.net/manual/en/features.commandline.interactive.php#105729

【讨论】:

PHP 7.1 在 Windows 构建中启用了readline。执行php -a 会将您带到Interactive Shell 并允许在您按Enter 时执行命令,无需输入&lt;?php 等...查看此评论以了解不同之处:be2.php.net/manual/en/…【参考方案3】:

尝试使用批处理文件

    打开记事本 输入php -S localhost:8000 将文件另存为.bat扩展名,server.bat 现在单击server.bat 文件,您的服务器在http://localhost:8000 上准备就绪

依赖

如果出现错误 php 无法识别任何内部或外部命令 然后转到环境变量并编辑 php.exe 的路径 "C:\wamp\bin\php\php5.4.3"

【讨论】:

使用 WAMPServer,您永远不应该在路径中添加任何内容。它破坏了在多个 PHP 版本之间轻松切换的能力【参考方案4】:

您描述的问题听起来像是您的 PHP 版本可能缺少 readline PHP 模块,导致交互式 shell 无法工作。我基于this PHP bug 提交。

尝试运行

php -m

并查看“readline”是否出现在输出中。

从发行版中省略 readline 可能有充分的理由。 PHP 通常由 Web 服务器执行;因此,对于大多数用例来说,它并不是真正需要的。我相信您可以使用以下命令从命令提示符处执行文件中的 PHP 代码:

php file.php

还有phpsh 项目,它为PHP 提供了一个(更好的)交互式shell。但是,有些人在 Windows 下运行时遇到了问题(我没有尝试 这是我自己)。

编辑: 根据the documentation here,Windows下不支持readline

注意:此扩展在 Windows 平台上不可用。

所以,如果这是正确的,你的选择是:

避免使用交互式 shell,只在命令行中执行文件中的 PHP 代码 - 这应该很好用 尝试让 phpsh 在 Windows 下工作

【讨论】:

不它不出现?这是什么意思? 这意味着交互模式在您的 PHP 发行版中不起作用。我认为您最好将代码放在 .php 文件中并从命令行或通过 Web 服务器执行这些文件 - 这应该可以。我的答案中的链接提到您可以从源代码编译 PHP 并包含 readline 以使其正常工作 - 但如果您没有所需的经验并且安装了整个工具链,这在 ​​Windows 上可能需要一点努力. @driis 我已经安装了 python 以使用 Facebook 的 phpsh,但经过大量研究后我发现 phpsh 与 python 3 不兼容 :( 任何与 python 3 支持的 phpsh 相同的东西? @Daman,对不起,我什么都不知道。也许安装 Python 2 ?另外,我认为人们在 Windows 下运行 phpsh 也遇到了问题,我自己也没有尝试过。【参考方案5】:

如果您只想运行快速代码 sn-p 您可以使用 -r 选项:

php -r "echo 'hi';"

-r 允许运行代码而不使用脚本标签&lt;?..?&gt;

【讨论】:

【参考方案6】:

您可以使用 php.exe 运行 php 页面 用 php 代码创建一些 php 文件并在 cmd 中写入 "[PATH to php.ext]\php.exe [path_to_file]\file.php"

【讨论】:

你的 php.exe 的路径是什么? C:\wamp\bin\php\php5.4.3\php.exe 所以创建让我们说 php 页面名称 test.php 和 - 把它放在 c:/ 打开你的命令行并输入 "C:\wamp\bin\php\php5.4.3\php.exe" "c:\test.php" - 你看到了什么?【参考方案7】:

更新 经过一些研究,最好的解决方案是使用该信息another *** thread 来避免 ctrl+z 输入以及 scree 输出。 因此,您应该使用 call "php.exe" -f NAMED_SCRIPT.php 而不是 php -a

Readline 在 Windows 下是不可能的,所以现有的用 php 编写的 php shell 都不能工作。但是有一个使用 -a 交互模式的解决方法。

这里有 2 个常见问题。在执行 CTRL Z 命令以指示代码/文件的结尾(如 EOF)之前,您无法看到结果。当您这样做时,大多数情况下的结果是打印结果和快速关闭窗口。无论如何,您将返回到 cmd 而不是 -a 交互模式。

将此内容保存到 .bat 文件中,并将您的 PHP PATH 定义为 Windows 变量,或者将 php.exe 修改为“exe 的完整路径”:

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

echo.
echo.

call "PHP Shell.bat"

这是一个简单的批处理启动-a模式的php.exe。当它启动 php 时,即使没有暂停也不会写入停止脚本,因为它“进入”了交互式等待输入。当您按 CTRL Z 时,获取 SIGSTEP(下一步)而不是 SIGSTOP(关闭,通常是 CTRL+C),然后阅读下一个指令,这是对 .bat 本身的递归调用。因为你总是进入 PHP -a 模式,没有退出命令。您必须使用 CTRL+C 或用鼠标点击退出十字。 (没有 alt+f4)

您也可以使用“Bat to Exe”转换器方便使用。

【讨论】:

【参考方案8】:

那是因为您处于“交互模式”,php 会评估您键入的所有内容。要查看最终结果,请执行“ctrl+z”并回车。您现在应该可以看到评估结果了 :)

附言以管理员身份运行 cmd!

【讨论】:

【参考方案9】:

以下解决方案专门针对 wamp 环境:

这让我困惑了一会儿,尝试了所有其他建议,$PATH 等甚至搜索了 Windows 注册表寻找线索:

GUI(wampmanager)表明我选择了版本 7,是的,如果我在浏览器的页面中使用 phpinfo(),它会告诉我它的版本 7.xx,但命令提示符中的 php -v 会报告 5.xx

如果你右键点击wampmanager头图标->工具->删除未使用的版本并删除旧版本,让它重新启动服务然后命令提示符将返回一个7.x.x

此解决方案意味着如果您想在 php 版本之间切换,则不再拥有旧版本,但 C:\wamp64\wampmanager.conf 中有一个配置文件,它似乎指定了与 CLI 一起使用的版本(参数为称为 phpCliVersion)。我更改了它,重新启动了服务器......我以为我已经解决了它但没有效果也许我有点不耐烦所以我觉得可能会有一些里程数。

希望对某人有所帮助

【讨论】:

你所说的旧版本是对所有 WAMPServer 自己的内部脚本进行测试的 PHP 版本。如果您删除 PHP5.x.x 意味着您将面临这些脚本无法运行的风险!【参考方案10】:

如果您不需要旧的 php 版本,请执行以下步骤:

打开 wamp 并右键单击 wamp 管理器而不是 go:工具/更改 PHP CLI 版本而不是将 php 版本更改为最新 再一次右键单击 wamp 管理器而不是转到:工具/删除 unuserd 版本并删除您的系统坚持将其作为您的 pc php 版本的最旧版本:D 转到控制面板/用户帐户/更改我的环境变量并在 PATH 变量中单击编辑并添加您的最新 php 版本路径,该路径位于您的 wamp 服务器 bin 文件夹中 关闭所有命令行或IDE并重新启动它们并检查php -v

效果很好

【讨论】:

永远不要将 PHP 文件夹添加到 WAMPServer 中的 PATH 环境变量中。每次您升级或切换 PHP 版本时,您都会忘记您这样做,然后必须寻找它来修改它【参考方案11】:

对上面 RiggsFolly 的脚本略有改进,如果你设置的话:

PATH=%phpver%;%PATH%

并在开头添加新的 PHP 版本路径;这允许您在 Environment 设置中设置默认路径,然后仅当您想更改为其他版本时才需要此脚本。

另外,如果像我一样,你想在 git bash shell 中运行它,只需调用 make 一个 bash 脚本来调用 .bat 文件:

#!/bin/bash
eval phppath.bat $1

【讨论】:

【参考方案12】:

在windows中,将你的php.exe文件放在windows/system32或任何其他系统可执行文件夹中,然后转到命令行并输入php并按回车键,如果它没有产生任何错误,那么你就可以使用PHP了在命令行上。如果您将 php.exe 设置在默认系统文件夹以外的其他位置,则需要在环境变量中设置它的路径!您可以通过以下路径到达那里....

control panel -> System -> Edith the environment variables of your account -> Environment Vaiables -> path -> edit 然后在此处设置 php.exe 的绝对路径,并按照与第一段中相同的步骤进行操作,如果没有在错误部门,那么你就可以从命令行使用php了!

【讨论】:

在使用 WAMPServer 时切勿将 PHP 放在 PATH 上。 WAMPServer 可以安装许多版本的 PHP。将一个版本放入 PTH 意味着您无法在版本之间切换。

以上是关于如何在 WAMPServer 中从 Windows 命令行运行 PHP的主要内容,如果未能解决你的问题,请参考以下文章

如何在使用 wampserver 的本地系统上将 URL 从“localhost”更改为其他内容?

Wampserver 2.1 在 Windows 7 上安装后显示橙色图标

WAMPServer 在 Windows 10 上无法正常工作,“无法执行服务操作”

windows10安装好wampserver后不能启动Apache怎么办

windows+WampServer环境下Phpwind论坛的搭建

安装wampserver时提示丢失MSVCR110.dll(在windows server上可用)