在Laravel 5中检测是否从命令行运行

43

我有一个使用案例,当应用程序通过Artisan命令行运行(如迁移,种子,路由列表)时,我们需要修改应用程序流程。

在Laravel 4中,可以像这样实现:

App::runningInConsole()

Laravel 5里有对应的功能吗?

在这种情况下,使用环境变量(.env)不是首选,因为这些命令有时需要在生产环境上运行(指向生产资源),我更愿意避免使用重复的(.env.commandline)文件。

4个回答

46

我不确定之前的版本如何,但在 Laravel 5.2 中仍可以使用 App::runningInConsole(),尽管文档中没有提到。


我能在版本 5.0.35 中使用它。 - user2094178
7
已验证在5.4.36中工作,可能只是一个命名空间问题。使用\App::runningInConsole() - Deac Karns
6
app()->runningInConsole() - CharlieJade
3
还可以在 Laravel 5.7 中使用。 - algorhythm
8
Laravel 5.8 可以使用 App::runningInConsole()app()->runningInConsole() 方法来判断是否在命令行模式下运行。 - lewis4u
同样可以在6.0中工作! - AdamJones

29
你可以使用PHP函数php_sapi_namehttp://php.net/manual/en/function.php-sapi-name.php)来判断脚本是不是从命令行启动的。
在你的情况下,你应该检查类似于以下内容:
if (strpos(php_sapi_name(), 'cli') !== false) {
    // Run from command
}

虽然在每种情况下,您可能需要检查文档以找到要检查的正确值(有时可能会有所不同),但基本上通过命令启动的脚本应始终具有不同的输出。


这个可以用,之前希望有内置的解决方案,但进一步的研究表明该功能已被弃用。将其标记为解决方案。 - Forrest Marvez
@ForrestMarvez 我不是100%确定,但我认为它在Laravel 5上被标记为弃用,因为该函数的结果在每个服务器/配置上并不总是相同。 - Clément Malet

21

17

任何人都可以使用laravel app()帮助函数避免任何与命名空间相关的问题。因此,要检查脚本是否在cli或浏览器中运行,可以使用这行代码app()-> runningInConsole()

基本用法:

if ( app()->runningInConsole() ){
    // it's console.
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接