我是 php 新手,想从命令行运行 php。我已经安装了 WAMP 并将“系统变量”设置为我的 php 文件夹(即C:\wamp\bin\php\php5.4.3
)。
当我转到Run
-> CMD
-> 键入php -a
并按 Enter 键时,它会显示interactive mode enabled
. 但是当我写echo 'Hi';
它时,它什么也没显示。
php -a
当我输入并按回车键时,我什至看不到“php >”之类的东西。
我是 php 新手,想从命令行运行 php。我已经安装了 WAMP 并将“系统变量”设置为我的 php 文件夹(即C:\wamp\bin\php\php5.4.3
)。
当我转到Run
-> CMD
-> 键入php -a
并按 Enter 键时,它会显示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.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
我记得几年前我偶然发现了这个问题,因为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 无法工作。我基于此 PHP 错误提交。
尝试运行
php -m
并查看“readline”是否出现在输出中。
从发行版中省略 readline 可能有充分的理由。PHP 通常由 Web 服务器执行;因此,对于大多数用例来说,它并不是真正需要的。我相信您可以使用以下命令从命令提示符处执行文件中的 PHP 代码:
php file.php
还有一个phpsh项目,它为 PHP 提供了一个(更好的)交互式 shell。但是,有些人在 Windows 下运行它时遇到了问题(我自己没有尝试过)。
编辑:根据此处的文档,readline
Windows 下不支持:
注意:此扩展在 Windows 平台上不可用。
因此,如果这是正确的,您的选择是:
如果你只想运行一个快速的代码片段,你可以使用 -r 选项:
php -r "echo 'hi';"
-r 允许在不使用脚本标签的情况下运行代码<?..?>
您可以使用 php.exe 运行 php 页面,使用 php 代码创建一些 php 文件并在 cmd 中写入"[PATH to php.ext]\php.exe [path_to_file]\file.php"
已更新
经过少量研究,最好的解决方案是使用该信息另一个 stackoverflow 线程来避免 ctrl+z 输入以及 scree 输出。所以,而不是php -a
你应该使用call "php.exe" -f NAMED_SCRIPT.php
OLD 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”转换器来轻松使用。
那是因为您处于“交互模式”,php 会评估您键入的所有内容。要查看最终结果,请执行“ctrl+z”并回车。您现在应该看到评估结果 :)
ps 以管理员身份运行cmd!
如果您不需要旧的 php 版本,只需执行以下步骤:
这很好用
以下解决方案专门针对 wamp 环境:
这让我困惑了一会儿,尝试了所有其他建议,$PATH 等甚至搜索了 Windows 注册表寻找线索:
GUI(wampmanager)表示我选择了版本 7,是的,如果我在浏览器的页面中使用 phpinfo(),它会告诉我它的版本 7.xx 但命令提示符中的 php -v 报告一个 5.xx
如果您右键单击 wampmanager 头图标->工具->删除未使用的版本并删除旧版本,让它重新启动服务,然后命令提示符将返回 7.xx
此解决方案意味着如果您想在 php 版本之间切换,则不再拥有旧版本,但是 C:\wamp64\wampmanager.conf 中有一个配置文件,它似乎指定了与 CLI 一起使用的版本(参数称为 phpCliVersion) . 我更改了它,重新启动了服务器......以为我已经解决了它但没有效果也许我有点不耐烦所以我觉得可能会有一些里程。
希望对某人有所帮助
在 Windows 中,将 php.exe 文件放在 windows/system32 或任何其他系统可执行文件夹中,然后转到命令行并键入 php 并按回车键,如果它没有产生任何错误,那么您就可以在命令行上使用 PHP . 如果您将 php.exe 设置在默认系统文件夹以外的其他位置,那么您需要在环境变量中设置它的路径!您可以通过以下路径到达那里....
控制面板 -> 系统 -> 编辑您帐户的环境变量 -> 环境变量 -> 路径 -> 编辑然后在那里设置您的 php.exe 的绝对路径,并按照与第一段中相同的步骤,如果没有错误部门,那么您就可以从命令行使用 php 了!
如果您设置,则对上面 RiggsFolly 的脚本略有改进:
PATH=%phpver%;%PATH%
并在开头添加新的 PHP ver 路径;这允许您在 Environment 设置中设置默认路径,然后仅当您想更改为不同版本时才需要此脚本。
另外,如果像我一样,你想在 git bash shell 中运行它,只需调用 make 一个 bash 脚本来调用 .bat 文件:
#!/bin/bash
eval phppath.bat $1