我正在编写一个模块,根据应用程序是在控制台还是HTTP上下文中运行来执行某些任务。有没有办法在模块加载时检测到这个?
例如,我尝试使用 Module.php 类进行此操作。
namespace MyModule;
use ...
class Module
{
public function init(ModuleManager $mm)
{
if (Console context) {
// do something
} else {
// do something with HTTP
}
}
}
谢谢!
答案 0 :(得分:21)
这很容易。只需检查Request
是Http的Zend\Http\Request
和控制台请求的Zend\Console\Request
的实例。例如:
namespace Application;
use Zend\Mvc\MvcEvent;
use Zend\Http\Request as HttpRequest ;
use Zend\Console\Request as ConsoleRequest ;
class Module
{
public function onBootstrap(MvcEvent $e)
{
if ($e->getRequest() instanceof HttpRequest) {
// do something important for Http
} elseif($e->getRequest() instanceof ConsoleRequest ) {
// do something important for Console
}
}
}
答案 1 :(得分:3)
您应该可以使用php_sapi_name()
虽然不是详尽无遗,但可能的返回值包括aolserver,apache, apache2filter,apache2handler,caudium,cgi(直到PHP 5.3),cgi-fcgi,cli,continuity, embed,isapi,litespeed,milter,nsapi,phttpd,pi3web,roxen,thttpd,tux和webjames。
所以我会这样做:
if (php_sapi_name() == 'cli') {
//console
} else {
//not console
}