检测PHP交互模式的方法

时间:2014-05-28 11:13:24

标签: php

我正在寻找一种方法来检测PHP脚本是否在PHP的交互模式中执行。

我在某些脚本中有一个bootstrap.php文件include,但在交互模式下启动PHP时也会使用,以获取在该文件中初始化的内容的REPL操场(主要用于通过ORM浏览数据库) ):

php -d auto_prepend_file=bootstrap.php -a

我希望在从php -a运行时执行一些代码 - 定义一些有用的全局变量,显示欢迎帮助消息。

在这两种情况下,

PHP_SAPI都会报告cli

我喜欢以下内容:

php -d auto_prepend_file=bootstrap.php -a
# → true

php -a
include 'bootstrap.php';
# → true

php bootstrap.php
# → false

php file_that_includes_bootstrap.php
# → false

php -r "include 'bootstrap.php';"
# → false

cat bootstrap.php | php
# → should be `false`, but I don't really care about that one

2 个答案:

答案 0 :(得分:1)

我最终得到了这个:

'cli' === PHP_SAPI && ! defined('STDOUT')

STDOUT未在交互模式下定义(当PHP未在CLI中运行时,因此检查PHP_SAPI)。虽然除了以外我找不到任何关于它的文档:

  

注意:

     

如果从stdin中读取PHP脚本,则这些常量不可用。

     

- http://php.net/manual/en/features.commandline.io-streams.php

......这当然不是这里的情况。所以它可能在未来的版本中发生变化使用风险自负。

答案 1 :(得分:0)

这可能不是完美的解决方法,但尝试使用:

var_dump(__FILE__);

它给了我" php shell代码"它与CLI模式不同