在引导之前在Zend框架之外加载PHP脚本

时间:2011-12-30 20:02:43

标签: php apache zend-framework

在我的zend框架应用程序引导并运行之前,我需要运行一次php脚本。现在通过在/public/index.php中调用此初始脚本来工作,但是脚本也会针对所有后续的zend框架页面请求运行。我需要这个脚本只在初始请求上运行一次,而不是在通过ajax加载其他页面时再次运行。

我最初的尝试是在/public/index.php文件中设置一些php常量,如下所示:

if(!defined('SOME_VAR'))require_once'path / to / script / to / run / once.php'; define('SOME_VAR','1);

但是,当通过ajax加载另一个页面时,即使我已经定义了'SOME_VAR',它也不会持久存在并保持定义,并且脚本会再次执行。

我正在使用Zend Framework 1.11,Apache(Xampp)。

在Zend被引导并运行(Zend Framework内部)之后执行此脚本不是一个选项。

2 个答案:

答案 0 :(得分:1)

根据Zend Framework Documentation

但是,如果需要自定义初始化,您有两种选择。首先,您可以编写以_init为前缀的方法来指定用于引导的离散代码。这些方法将由bootstrap()调用,也可以像调用公共方法一样调用:bootstrap()。他们应该接受一个可选的选项数组。 如果您的资源方法返回一个值,它将存储在引导程序的容器中。当不同的资源需要交互时(例如一个资源将自身注入另一个资源),这可能很有用。然后可以使用方法getResource()来检索这些值。

另一种选择是使用资源插件。资源插件是执行特定初始化的对象,可以指定:

  • 实例化Zend_Application对象时
  • 在初始化引导对象期间
  • 通过对引导对象的方法调用显式启用它们

资源插件实现了Zend_Application_Resource_ResourceAbstract,它简单地定义了它们允许注入调用者和选项,并且他们有一个init()方法。

答案 1 :(得分:1)

常量不起作用,因为它们仅在请求期间存在。

听起来您想知道当前请求是常规请求还是XmlHttpRequest(AJAX)请求。

你可以在index.php的顶部尝试类似的东西:

<?php
define('IS_AJAX_REQUEST', isset($_SERVER['HTTP_X_REQUESTED_WITH']) 
    && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');

if (! IS_AJAX_REQUEST){
    // run your code.
}

如果你正在使用会话,你也可以在运行特殊代码后在会话中设置一个标志,并测试它。