如何从Windows命令行运行PHP

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

当我去Run – > CMD – >inputphp -a然后按回车,它说interactive mode enabled 。 但是,当我写echo 'Hi'; 它什么都没显示。

我甚至没有看到像'php>“的东西,当我inputphp -a然后回车。

PHP命令行(称为命令行界面的PHP)被称为php.exe它住在c:\wamp\bin\php\php5.xy\php.exe (其中x和y是php的版本号你已经安装)

如果你想创buildPHP脚本从命令行运行,那么很容易,非常有用。

创build一个像这样的batch file,我们称之为phppath.cmd

 PATH=%PATH%;c:\wamp\bin\php\php5.xy php -v 

将其保存到PATH中的一个文件夹中,以便从任何地方运行。

现在从一个命令窗口,cd到你的源文件夹并运行> phppath。

然后运行

PHP your_script.php

它应该像梦一样工作。

下面是一个configurationPHP 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 * Serch 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 

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

 C:\>php -a Interactive mode enabled <?php echo "Hello, world!"; ?> ^Z Hello, world! 

进入交互模式后,input开始( <?php )并closures( ?> )php标记,然后以表示文件结尾的控制Z( ^Z )结束。

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

尝试使用batch file

  1. 打开记事本
  2. 键入php -S localhost:8000
  3. 保存文件为.bat扩展名, server.bat
  4. 现在单击http://localhost:8000上的服务器准备就绪的server.bat文件

依赖

如果你有错误的PHP无法识别任何内部或外部命令,然后goto环境variables和编辑php.exe的path"C:\wamp\bin\php\php5.4.3"

您所描述的问题听起来像您的PHP版本可能会缺lessreadline PHP模块,导致交互式shell无法正常工作。 我基于这个PHP错误提交。

尝试运行

 php -m 

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

从发行版中省略readline可能有很好的理由。 PHP通常由Web服务器执行; 所以对于大多数用例来说并不是真的需要。 我相信你可以在命令提示符的文件中执行PHP代码,使用:

 php file.php 

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

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

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

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

  • 避免交互式shell,只需从命令行执行文件中的PHP代码 – 这应该很好
  • 尝试获得在Windows下的phpsh工作

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

 php -r "echo 'hi';" 

-r允许运行代码而不使用脚本标记<?..?>

更新经过一些研究,最好的解决scheme是使用该信息另一个stackoverflow线程,以避免ctrl + zinput,也从scree输出。 所以,而不是php -a你应该使用call "php.exe" -f NAMED_SCRIPT.php

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

这里有两个问题 直到执行CTRL Z命令才能看到结果,以指示EOF代码/文件的最终结果。 当你这样做,导致大多数情况下是打印结果和快速closures的窗口。 无论如何,你将被返回到cmd而不是-a交互模式。

将这个内容保存到一个.bat文件中,并将你的PHP PATH定义到Windowsvariables中,或者将php.exe修改为“exe的完整path”。

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

这是一个简单的批量启动 – 一个php.exe模式。 当它启动的PHP,停止脚本甚至没有暂停写入,因为是“进入”交互式等待input。 当你敲击CTRL Z时,获取SIGSTEP(下一步)而不是SIGSTOP(通常是closures,CTRL + C),然后读取下一个指令,这是一个recursion调用.bat本身。 因为你总是进入PHP -a模式,所以没有退出命令。 您必须使用CTRL + C或用鼠标点击退出十字。 (No alt + f4)

您也可以使用“蝙蝠到埃克”转换器,以方便使用。

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

那是因为你在“互动模式”中,php会评估你input的所有东西。 要查看最终结果,请执行“ctrl + z”和Enter。 你现在应该看到评估结果:)

ps以pipe理员身份运行cmd!

在windows中,把你的php.exe文件放在windows / system32或其他系统可执行文件夹中,然后进入命令行并inputphp,然后按下Enter,如果它没有产生任何错误,那么你已经准备好在命令行上使用PHP 。 如果你已经把php.exe设置在默认系统文件夹以外的地方,那么你需要在环境variables中设置它的path! 你可以在下面的path到达那里…

控制面板 – >系统 – > Edith你的账户的环境variables – >环境variables – >path – >编辑然后设置你的php.exe的绝对path,并按照第一段中的相同的程序,如果没有在错误部门,那么你已经准备好从命令行使用PHP!

以下解决scheme专门针对潮湿环境:

这让我f了一会儿,尝试了所有其他的build议,$ PATH等甚至search了Windowsregistry寻找线索:

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

如果你右键点击wampmanager head to icon-> tools->删除未使用的版本,并删除旧版本,让它重新启动服务,然后命令提示符将返回一个7.xx

这个解决scheme意味着如果你想在php版本之间切换,你不再需要旧版本,但是在C:\ wamp64 \ wampmanager.conf中有一个configuration文件,它似乎指定了CLI使用的版本(参数叫做phpCliVersion) 。 我改变了它,重新启动服务器…以为我已经解决了它,但没有影响,也许我有点不耐烦,所以我有一种感觉,可能会有一些里程。

希望能帮助别人