从命令行运行 PHP 脚本
Posted
技术标签:
【中文标题】从命令行运行 PHP 脚本【英文标题】:Running PHP script from the command line 【发布时间】:2012-05-03 00:02:01 【问题描述】:如何使用用于解析 Web 脚本的 php 解释器?
我有一个从 Web 访问的 phpinfo.php
文件显示已安装 German
。但是,如果我从命令行使用 -php phpinfo.php
和 grep
运行 phpinfo.php
German
,我找不到它。所以两个 PHP 文件是不同的。我需要运行安装了German
的php
的脚本。
我该怎么做?
【问题讨论】:
只需执行php -i
并解析它
这是什么意思?尽管如此,我还是这样做了,但什么也没做
请添加更多关于已安装网络服务器的详细信息软件,例如将phpinfo();
的输出添加到您的问题中。还更新了我的答案。
【参考方案1】:
您应该检查您的服务器配置文件。查找以LoadModule php
开头的行...
可能有名为mods
或类似名称的配置文件/目录。从那里开始。
您还可以检查来自php -r 'phpinfo();' | grep php
的输出,并将行与来自网络服务器的phpinfo();
进行比较。
以交互方式运行php
:
(因此您可以在控制台中粘贴/编写代码。)
php -a
使其解析文件并输出到控制台:
php -f file.php
解析一个文件并输出到另一个文件:
php -f file.php > results.html
你还需要别的吗?
要只运行一小部分,一行或类似的,您可以使用:
php -r '$x = "Hello World"; echo "$x\n";'
如果您运行的是 Linux,请在控制台中执行 man php
。
如果您需要/想要通过 fpm (FastCGI Process Manager) 运行 PHP,请使用 cli fcgi:
SCRIPT_NAME="file.php" SCRIP_FILENAME="file.php" REQUEST_METHOD="GET" cgi-fcgi -bind -connect "/var/run/php-fpm/php-fpm.sock"
/var/run/php-fpm/php-fpm.sock 是你的 php-fpm 套接字文件。
【讨论】:
没有。问题是系统上有多个php。我需要找出用于解析 Web 脚本的 php。如果我从控制台运行 php,那么它找不到一个类 - 但如果我从网络调用该脚本,那么这个问题就不存在了。所以这意味着使用的PHP不同,不是吗? @Siddharth 您应该从您的服务器软件配置中进行检查。将您的服务器详细信息添加到问题中。 是的。我该如何检查?简而言之,如何从命令行使用正确的 php? 在 linux 中,您可以使用which php
告诉您默认运行的是哪个可执行文件。要使用另一个可执行文件,您必须指定要使用的可执行文件的完整路径:/path/to/specific/php -f file.php > results.html
很好的细节,+1 解释。只是在这里发表评论,注意环境变量,即使脚本与 php.exe 位于同一目录中,您也可能需要使用完整的目录路径【参考方案2】:
在SUSE Linux 上,PHP 有两种不同的配置文件:一种用于 Apache,另一种用于 CLI(命令行界面)。在 /etc/php5/ 目录中,您会找到一个“apache2”目录和一个“cli”目录。每个都有一个“php.ini”文件。这些文件的目的相同(PHP 配置),但适用于两种不同的 PHP 运行方式。除其他外,这些文件加载 PHP 使用的模块。
如果您的操作系统相似,那么这两个文件可能不一样。您的 Apache php.ini 可能正在加载德语模块,而 CLI php.ini 没有。安装模块时(自动或手动),它可能只更新了 Apache php.ini 文件。
您可以简单地将 Apache php.ini 文件复制到 cli
目录中,以使 CLI 环境与 Apache 环境完全相同。
或者,您可以在 Apache 文件中找到加载德语模块的行,然后将其复制/粘贴到 CLI 文件中。
【讨论】:
【参考方案3】:我一直在寻找Windows中这个问题的解决方案,似乎是如果你没有环境变量ok,你需要把完整的目录。例如,与 PHP 在同一目录中的文件:
F:\myfolder\php\php.exe -f F:\myfolder\php\script.php
【讨论】:
如果您从命令提示符逐字运行,则开头的>
可能会将-f ...
的输出(可能是错误)重定向到您的php.exe 文件中,并擦除内容.以上是关于从命令行运行 PHP 脚本的主要内容,如果未能解决你的问题,请参考以下文章