require_once(Zend/Application.php):使用Zend framework时无法打开流

require_once(Zend/Application.php):使用Zend framework时无法打开流,php,zend-framework,runtime-error,Php,Zend Framework,Runtime Error,我是zend framework的新用户,我尝试了stack overflow中针对类似问题给出的其他解决方案 这是我的index.php <?php date_default_timezone_set('UTC'); // Define path to application directory defined('APPLICATION_PATH') || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../a

我是zend framework的新用户,我尝试了stack overflow中针对类似问题给出的其他解决方案

这是我的index.php

<?php
date_default_timezone_set('UTC');
// Define path to application directory
defined('APPLICATION_PATH')
    || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));

// Define application environment
defined('APPLICATION_ENV')
    || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));


// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
    realpath(APPLICATION_PATH . '/library'),
    get_include_path(),
)));


/** Zend_Application */
require_once 'Zend/Application.php';

// Create application, bootstrap, and run
$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap()
            ->run(); 
Application.ini

[production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.frontController.params.displayExceptions = 1

eat.application.base.url = "eat.com"
eat.application.admin.url = "admin.eat.com"
eat.application.api.url = "api.eat.com"

includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.prefixDefaultModule = "1"

resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"

autoloaderNamespaces[] = "Eat_"

resources.modules = ""

phpSettings.date.timezone = "GMT"

eat.application.salt = "sd876fs89df";
resources.view[] =
resources.view.helperPath.Eat_View_Helper = APPLICATION_PATH "/../library/Eat/View/Helper"

;;; Databases


;;;;; Layouts

resources.layout.layoutPath = APPLICATION_PATH "/views/layouts"
resources.layout.layout = web/web

nexva.applicaiton.fileUploadDirectory = APPLICATION_PATH "/../files"

;;;; ReCaptcha ;;;;
recaptcha.private_key = 6LfL7rsSAAAAAKgtKWsMk4hmA2DSVq0ODcyJFRjs
recaptcha.public_key = 6LfL7rsSAAAAANiaZOQN7LOoCGAXh29rHTZPRoVa

[staging : production]
eat.application.base.url = "eat.com"
eat.application.admin.url = "admin.eat.com"
eat.application.api.url = "api.eat.com"

;;; Databases
resources.multidb.default.adapter       = mysqli
resources.multidb.default.host          = "localhost"
resources.multidb.default.username      = "eat"
resources.multidb.default.password      = "eat"
resources.multidb.default.dbname        = "eat_main"
resources.multidb.default.default       = true

[development : production]
eat.application.base.url = "eat.com"
eat.application.admin.url = "admin.eat.com"
eat.application.api.url = "api.eat.com"

;;; Databases
resources.multidb.default.adapter       = mysqli
;resources.multidb.default.host          = "192.168.1.253"
resources.multidb.default.host            = "localhost"
resources.multidb.default.username      = "eat"
resources.multidb.default.password      = "eat"
resources.multidb.default.dbname        = "eat_main"
resources.multidb.default.default       = true

[development-alt : development]
更新3

<?php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    public function __construct($application)
    {
        parent::__construct($application);
    }

    protected function _initAutoload()
    {

        Zend_Controller_Action_HelperBroker::addPrefix('Eat_Controller_Action_Helper');

    $autoloader = new Zend_Application_Module_Autoloader(
            array(
              'namespace' => '',
              'basePath' => APPLICATION_PATH,
              'resourceTypes' => array(
                'form' => array(
                  'path' => 'forms',
                  'namespace' => 'Form',
                ),
                'model' => array(
                  'path' => 'models',
                  'namespace' => 'Model',
                ),
              )
            )
    );

    return $autoloader;
  }



  protected function _initLayoutHelper()
  {
    $this->bootstrap('frontController');

    $layout = Zend_Controller_Action_HelperBroker::addHelper(new Eat_Controller_Action_Helper_LayoutLoader());

  }

  protected function _initApplication()
  {

    $config = new Zend_Config_Ini(APPLICATION_PATH . "/configs/application.ini", APPLICATION_ENV);
    Zend_Registry::set("config", $config);


    $locale = new Zend_Locale();
    Zend_Registry::set('Zend_Locale', $locale);

    //init DB connection
    try {

        $this->bootstrap('multidb');
        $multiDb = $this->getPluginResource('multidb');

        $db = $multiDb->getDb('default');
        $db->setFetchMode(Zend_Db::FETCH_OBJ);
        $db->getConnection();
        $db->getProfiler()->setEnabled(true);

        Zend_Registry::set('db', $db);

         //Just making everything UTF8. This is a hack, need to find the proper Zend way
        $db     = Zend_Registry::get('db');
        $db->query('SET NAMES "utf8"')->execute();


    } catch (Zend_Db_Adapter_Exception $e) {

        die("Error connecting to database: " . $e->getMessage());

    }


  }

  public function _initRoutes()
  {
    /*
    $router = Zend_Controller_Front::getInstance()->getRouter();
    $config = new Zend_Config_Ini(APPLICATION_PATH . '/configs/routes.ini', APPLICATION_ENV);
    $router->addConfig($config, 'resources');


    $routes['featured'] = new Zend_Controller_Router_Route(
            'featured/:id',
            array('controller' => 'index', 'action' => 'featured', 'id' => null)
    );

    Zend_Controller_Front::getInstance()->getRouter()->addRoutes($routes);
    */
  }


    protected function _initLanguages()
    {


    }


    //Initilaize zend ACL
    public function _initAcl()
    {
        //Omit the process in CLI mode
        if (php_sapi_name() != 'cli')
        {
            $helper = new Eat_Controller_Action_Helper_AclDefault();
            $helper->setRoles();
            $helper->setResources();
            $helper->setPrivilages();
            $helper->setAcl();

            //Register the ACL plugin - Then it will be called automatically,whenever an acion is called
            $this->bootstrap('frontController');
            $frontController = Zend_Controller_Front::getInstance();
       // $frontController->registerPlugin(new Eat_Plugin_Acl());


        }
    }

    //Initialize error controller
    public function _initErrorSwitcher()
    {
        $this->bootstrap('frontController');
        $frontController = Zend_Controller_Front::getInstance();
        $frontController->registerPlugin(new Eat_Plugin_ErrorControllerSwitcher());
    }

    protected function _initZFDebug()
    {
        //  Enabling this method seems to break autocomplete. Use only when needed
        $autoloader = Zend_Loader_Autoloader::getInstance ();
        $autoloader->registerNamespace ( 'ZFDebug' );

        $db = Zend_Registry::get ( 'db' );

        $cache = Zend_Cache::factory ( 'Core', 'File' );

        //Zend_Controller_Front::getInstance()->getBaseUrl();
        //APPLICATION_PATH
        $options = array ('plugins' => array ('Variables', 'Database' => array ('adapter' => $db ), 'File' => array ('basePath' => Zend_Controller_Front::getInstance ()->getBaseUrl () ), 'Memory', 'Time', 'Registry', 'Cache' => array ('backend' => $cache->getBackend () ), 'Exception' ) );

        $debug = new ZFDebug_Controller_Plugin_Debug ( $options );

        $this->bootstrap ( 'frontController' );
        $frontController = $this->getResource ( 'frontController' );
        //$frontController->registerPlugin ( $debug );


    }






}

您的应用程序和库文件夹应位于公共html之外:

此代码在父文件夹(“///”)中查找“应用程序”文件夹(相对于index.php):

此代码添加“/../library”以包括路径:

// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
  realpath(APPLICATION_PATH . '/library'),
  get_include_path(),
)));
因此,要么将应用程序和库文件夹移到public_html之外,要么删除/。。从applicationIn_路径定义(但这是不可取的,因为这会降低应用程序的安全性)

UPD。如果仍然出现错误,请确保您拥有此文件以及其他Zend文件:

library/Zend/Loader/Autoloader.php

如果没有,请下载Zend Framework的最新版本:

ZF1:

ZF2:

您可以将其保存到“library”文件夹中,也可以将其取消归档到/usr/lib64/php(因此它保存为/usr/lib64/php/Zend/),这样您就不需要为每个项目使用此文件夹

UPD2搜索

getResource('multidb')
在代码(应用程序文件夹)中,然后尝试添加

$this->bootstrap('multidb');
除此之外

我的猜测是,您的Zend Framework版本与原始软件中使用的版本不同,或者您的目录结构无效,您可以尝试将库和应用程序文件夹移到public_html之外吗

UPD3你也可以给我发封电子邮件(gmail.com上的mstrokin),我会尽力帮你解决的,我喜欢调试:)


UPD4尝试将“getPluginResource”更改为“getResource”

您的应用程序和库文件夹应位于公共html之外:

此代码在父文件夹(“///”)中查找“应用程序”文件夹(相对于index.php):

此代码添加“/../library”以包括路径:

// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
  realpath(APPLICATION_PATH . '/library'),
  get_include_path(),
)));
因此,要么将应用程序和库文件夹移到public_html之外,要么删除/。。从applicationIn_路径定义(但这是不可取的,因为这会降低应用程序的安全性)

UPD。如果仍然出现错误,请确保您拥有此文件以及其他Zend文件:

library/Zend/Loader/Autoloader.php

如果没有,请下载Zend Framework的最新版本:

ZF1:

ZF2:

您可以将其保存到“library”文件夹中,也可以将其取消归档到/usr/lib64/php(因此它保存为/usr/lib64/php/Zend/),这样您就不需要为每个项目使用此文件夹

UPD2搜索

getResource('multidb')
在代码(应用程序文件夹)中,然后尝试添加

$this->bootstrap('multidb');
除此之外

我的猜测是,您的Zend Framework版本与原始软件中使用的版本不同,或者您的目录结构无效,您可以尝试将库和应用程序文件夹移到public_html之外吗

UPD3你也可以给我发封电子邮件(gmail.com上的mstrokin),我会尽力帮你解决的,我喜欢调试:)


UPD4尝试将“getPluginResource”更改为“getResource”

可能的问题是“library”目录的权限。 在大多数情况下,它会影响Linux用户

如果您是Linux用户,您可能需要更改它们

sudo chmod 755 -R path_to_project/library

如果您仍然遇到该错误,那么应该使用php.ini设置或“library”文件夹位置

一个可能的问题是“库”目录的权限。 在大多数情况下,它会影响Linux用户

如果您是Linux用户,您可能需要更改它们

sudo chmod 755 -R path_to_project/library

如果您仍然遇到该错误,那么应该使用php.ini设置或“library”文件夹位置

现在它说,警告:require_once(Zend/Loader/Autoloader.php):无法打开流:第80行的/home/eat/public_html/library/Zend/Application.php中没有这样的文件或目录,非常感谢。现在我得到了一个新的错误“致命错误:未捕获异常‘Zend_Application_Bootstrap_exception’,消息为‘Resource matching‘multidb’not found’”。我也更新了这个问题。我试图搜索GetResource thingy,但我在Bootstrap.php中已经有$this->Bootstrap('multidb')。我已经用我的bootstrap.php代码更新了这个问题。现在它说,警告:require_once(Zend/Loader/Autoloader.php):无法打开流:第80行的/home/eat/public_html/library/Zend/Application.php中没有这样的文件或目录,非常感谢。现在我得到了一个新的错误“致命错误:未捕获异常‘Zend_Application_Bootstrap_exception’,消息为‘Resource matching‘multidb’not found’”。我也更新了这个问题。我试图搜索GetResource thingy,但我在Bootstrap.php中已经有$this->Bootstrap('multidb')。我已经用bootstrap.php代码更新了这个问题。