如何从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
- 打开记事本
- 键入
php -S localhost:8000
- 保存文件为
.bat
扩展名,server.bat
- 现在单击
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) 。 我改变了它,重新启动服务器…以为我已经解决了它,但没有影响,也许我有点不耐烦,所以我有一种感觉,可能会有一些里程。
希望能帮助别人