我正在寻找一种方法来检测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
答案 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模式不同