从命令行运行 PHP 脚本

Posted

技术标签:

【中文标题】从命令行运行 PHP 脚本【英文标题】:Running PHP script from the command line 【发布时间】:2012-05-03 00:02:01 【问题描述】:

如何使用用于解析 Web 脚本的 php 解释器?

我有一个从 Web 访问的 phpinfo.php 文件显示已安装 German。但是,如果我从命令行使用 -php phpinfo.phpgrep 运行 phpinfo.php German,我找不到它。所以两个 PHP 文件是不同的。我需要运行安装了Germanphp 的脚本。

我该怎么做?

【问题讨论】:

只需执行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 脚本的主要内容,如果未能解决你的问题,请参考以下文章

将变量传递给从命令行运行的 PHP 脚本

命令行脚本 PHP 不运行

从哪里开始使用 CPanel 托管在 PHP 中运行命令行

通过命令行执行用 ZendGuard 编码的 PHP 脚本

如何通过Linux命令行使用和运行PHP脚本

从命令行运行但不能通过 cron 运行时脚本运行良好