我有一个 PHP 类文件,它通过 Web 服务器和 cron 进程用作包含文件。我正在寻找一种方法,将一些代码添加到脚本的头部,以便我可以检测脚本是否直接从命令行启动,而不是包含在另一个脚本中。这样,我可以通过直接调用脚本并让函数实例化对象并在其上执行一些代码来使测试变得更容易,而无需为其创建包装器脚本。
我尝试使用if (php_sapi_name() == 'cli') {,但即使该脚本包含在从命令行调用的另一个脚本中,该测试也是正确的。
检查 $argv[0] 是否已设置,可以让您知道是否从命令行调用了某些内容;它不会告诉您该文件是否是直接调用的,或者是否是从另一个文件中包含的。要确定这一点,请测试是否realpath($argv[0]) == realpath(__FILE__)。
把它们放在一起:
if (isset($argv[0]) && realpath($argv[0]) == realpath(__FILE__))
// This file was called directly from command line
Run Code Online (Sandbox Code Playgroud)