我是php的新手,想从命令行运行php。我已经安装了WAMP并将“系统变量”设置为我的php文件夹(这是C:\wamp\bin\php\php5.4.3
)。
当我去Run
- > CMD
- >输入php -a
并点击进入时,它说interactive mode enabled
。但是,当我写echo 'Hi';
时,它什么都没有显示。
当我输入php -a
并点击回车时,我甚至看不到像'php>那样的东西。
被称为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.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
如果您不需要旧的PHP版本,只需执行以下步骤:
这很好用
在Windows中,将您的php.exe文件放在windows / system32或任何其他系统可执行文件夹中,然后转到命令行并键入php并按Enter键,如果它没有生成任何错误,那么您已准备好在命令行上使用PHP 。如果您将php.exe设置在默认系统文件夹以外的其他位置,则需要在环境变量中设置它的路径!你可以按照以下路径到达那里....
控制面板 - >系统 - > Edith您帐户的环境变量 - >环境Vaiables - >路径 - >编辑然后设置您的php.exe的绝对路径,并按照与第一段相同的步骤,如果没有错误部门,然后你准备从命令行使用PHP!
我记得有一次几年前我偶然发现了这个问题,因为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 -S localhost:8000
.bat
扩展名,server.bat
server.bat
文件你的服务器已准备就绪http://localhost:8000
如果你有错误php无法识别任何内部或外部命令然后转到环境变量和编辑路径到php.exe "C:\wamp\bin\php\php5.4.3"
您所描述的问题听起来像您的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平台上不可用。
所以,如果这是正确的,你的选择是:
如果您只想运行快速代码段,可以使用-r选项:
php -r "echo 'hi';"
-r允许在不使用脚本标签<?..?>
的情况下运行代码
你可以使用php.exe运行php页面用php代码创建一些php文件,并在cmd中写入"[PATH to php.ext]\php.exe [path_to_file]\file.php"
更新经过一些研究,最好的解决方案是使用该信息another stackoverflow thread来避免ctrl + z输入以及来自scree输出。因此,你应该使用php -a
而不是call "php.exe" -f NAMED_SCRIPT.php
旧的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"
这是一个简单的批量启动 - 一种php.exe模式。当它启动php时,停止脚本甚至没有写入暂停因为“进入”交互式等待输入。当你按下CTRL Z时,得到SIGSTEP(下一步)而不是SIGSTOP(通常是close,CTRL + C),然后读取下一个指令,这是对.bat本身的递归调用。因为你总是进入PHP -a模式,所以没有退出命令。您必须使用CTRL + C或使用鼠标点击退出十字。 (没有alt + f4)
您也可以使用“Bat to Exe”转换器轻松使用。
以下解决方案专门针对wamp环境:
这让我感到困惑了一会儿,尝试了所有其他的建议,$ PATH等甚至搜索了Windows注册表寻找线索:
GUI(wampmanager)表示我选择了版本7,如果我在浏览器的页面中使用phpinfo(),它会告诉我它的版本7.x.x但是命令提示符中的php -v会报告5.x.x.
如果你右键单击wampmanager头到icon-> tools->删除未使用的版本并删除旧版本,让它重启服务然后命令提示符将返回7.x.x
如果你想在php版本之间切换但是在C:\ wamp64 \ wampmanager.conf中有一个配置文件似乎指定了与CLI一起使用的版本(该参数名为phpCliVersion) 。我改变了它,重新启动了服务器...以为我已经解决了它但没有效果也许我有点不耐烦所以我觉得可能会有一些里程。
希望能帮助别人
那是因为你处于'交互模式',其中php评估你输入的所有内容。要查看最终结果,请执行'ctrl + z'和Enter。您现在应该看到评估结果:)
附:以管理员身份运行cmd!