如何在WAMPServer中使用Windows命令行运行PHP

81

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

当我点击 运行 -> CMD -> 输入 php -a 然后按回车键时,它会显示“交互模式已启用” 。但是当我写 echo 'Hi'; 时,它没有显示任何内容。

即使我输入 php -a 并按回车键,也看不到类似于 "php >" 的任何内容。


https://dev59.com/dms05IYBdhLWcg3wPfgR - mkjasinski
据我所知,Windows唯一正确的选项是使用优秀的psysh,这也是从其他SO答案中推荐的:https://stackoverflow.com/a/33790472/327074。 - icc97
12个回答

78

PHP CLI又称为命令行界面的PHP(php for the Command Line Interface),其可执行文件名为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上的某个文件夹中,以便您可以从任何地方运行它。

现在从命令窗口进入您的源文件夹并运行>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=
set phpver=
set phpFolder=

使用以下命令文件调用以使用PHP的默认版本

> phppath

或者按如下方式获取特定版本的PHP

> phppath 5.6.30

1
可以了,谢谢。你能解释一下这是怎么工作的吗?我看到了指向php文件夹的路径,但是它如何与命令行变量“php”相关联,PATH=%PATH%又是做什么用的? - TetraDev
PATH=%PATH% 表示创建一个新的 PATH 环境变量,其中包含当前路径 %PATH% 和我们想要添加到其中的新目录。Windows 在 PATH 中搜索文件夹以查找无法在当前工作目录中找到的可执行文件,例如 php.exe - RiggsFolly
OP 实际上是在询问 Windows 中的 PHP REPL。我认为这并没有回答问题。 - icc97
1
@Cullub 在 PowerShell 中无法工作 - 在普通 shell 中可以工作。 - user783388
请注意,PEAR环境变量设置了错误的路径,不应该有硬编码部分d:/wamp/bin/php/php。顺便说一句,这是一段非常优秀的脚本,我已经理解之前的错误了。 - Zimmi
显示剩余5条评论

37

我记得几年前我遇到过这个问题,因为Windows没有readline,所以没有交互式shell。如果要在没有readline支持的情况下使用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在Windows版本中启用了readline。执行php -a命令将带您进入“交互式Shell”,并允许您在按下回车键时执行命令,无需输入<?php等内容...请参阅此评论以了解区别:http://be2.php.net/manual/en/features.commandline.interactive.php#108006 - 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"


1
使用WAMPServer时,您不应该将任何内容添加到路径中。这会破坏轻松切换多个PHP版本的能力。 - RiggsFolly

11

你描述的问题似乎是你的 PHP 版本缺少 readline PHP 模块,导致交互式 shell 无法工作。我基于这个 PHP bug提交做出了这个结论。

尝试运行

php -m

查看输出结果中是否包含“readline”字样。

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

php file.php

此外,还有phpsh项目为PHP提供了一个(更好的)交互式Shell。然而,一些人在Windows下运行它时遇到了问题(我自己并没有尝试过)。

编辑:根据这里的文档readline在Windows下不受支持:

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

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

  • 避免使用交互式shell,只需从命令行中执行PHP代码 - 这应该很有效
  • 尝试让phpsh在Windows下工作


不是吗?这是什么意思? - Daman
这意味着你的PHP发行版中交互模式无法工作。我认为最好将代码放在.php文件中,并通过命令行或Web服务器执行这些文件 - 这应该可以工作。我回答中的链接提到,你可以从源代码编译PHP并包含“readline”以使其工作 - 但如果你没有所需的经验和整个工具链安装在Windows上可能会有点困难。 - driis
@driis 我安装了Python以使用Facebook的phpsh,但经过大量研究,我发现phpsh与Python 3不兼容:( 有没有类似于phpsh且支持Python 3的东西? - Daman
@Daman,抱歉,我不知道任何相关信息。也许安装Python 2?此外,我认为人们在Windows下运行phpsh时也遇到了问题,但我自己没有尝试过。 - driis

10

如果您只想运行一个快速的代码片段,可以使用-r选项:

php -r "echo 'hi';"

-r 选项可以让代码在不使用脚本标签<?..?>的情况下运行。


4
您可以使用php.exe运行php页面,创建一些带有php代码的php文件,在cmd中编写以下命令:"[php.ext的路径]\php.exe [文件的路径]\file.php"

你的php.exe路径是什么? - Adidi
C:\wamp\bin\php\php5.4.3\php.exe - Daman
1
所以创建一个名为test.php的PHP页面,其中包含<?php echo('test'); ?> - 将其放置在C:/上,在命令行中打开并键入“C:\wamp\bin\php\php5.4.3\php.exe”“c:\ test.php”- 你看到了什么? - Adidi

2

更新 经过一番研究,最好的解决方案是使用另一个stackoverflow主题中提供的信息来避免ctrl+z输入以及屏幕输出。因此,您应该使用call "php.exe" -f NAMED_SCRIPT.php而不是php -a

旧版 在Windows下无法使用Readline,因此所有用PHP编写的现有php shell都将无法工作。但是,可以通过-a交互模式进行解决。

这里有两个常见的问题。在执行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"转换器来轻松使用。

0

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

这个问题让我困扰了一段时间,尝试了所有其他建议,如 $PATH 等,甚至搜索了Windows注册表以寻找线索:

GUI(wampmanager) 显示我已经选择了版本7,如果我在浏览器中的页面中使用 phpinfo() 将告诉我它的版本是7.x.x,然而在命令提示符中输入 php -v 却报告5.x.x

如果你右键单击 wamp管理器头部图标 → 工具 → 删除未使用的版本并删除旧版本,让它重新启动服务,那么命令提示符将返回一个7.x.x

这个解决方案意味着如果你想在不同PHP版本之间切换,就不能再有旧版本了,但是在 C:\wamp64\wampmanager.conf 中有一个配置文件,似乎指定了要在 CLI 中使用的版本(参数称为 phpCliVersion)。我改变了它,重新启动服务器……认为我已经解决了它,但没有效果,也许我有点不耐烦,所以我认为可能还有些价值。

希望这能帮助到某些人


1
你所说的旧版本是指 WAMPServer 所有内部脚本测试的 PHP 版本。如果你移除 PHP5.x.x,就有可能导致这些脚本无法正常工作! - RiggsFolly

0

如果您不需要旧的PHP版本,请按照以下步骤操作:

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

这个方法很有效


永远不要将PHP文件夹添加到WAMPServer的PATH环境变量中。每次升级或切换PHP版本时,您都会忘记这样做,然后不得不寻找并修正它。 - RiggsFolly

0

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

p.s. 以管理员身份运行cmd!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接