0

Possible Duplicate:
Reference - What does this error mean in PHP?

I had a ZF configuration on a local webserver and everything worked just fine. Now i put it on the internet at my host and when i load the site i get many warnings/ fatal error on the screen. Does anybody have an idea what the reason can be?

Greetings Eric

Example:

Warning: is_readable() [function.is-readable]: open_basedir restriction in effect. File(/usr/local/reserved///sites/ericversteeg.nl/www/application/../library/Custom/Zend/Application/Resource/View.php) is not within the allowed path(s): (/usr/local/reserved/index.php:/sites/ericversteeg.nl/:/tmp) in /sites/ericversteeg.nl/www/library/Zend/Loader.php on line 198

Warning: is_readable() [function.is-readable]: open_basedir restriction in effect. File(/usr/local/reserved///sites/ericversteeg.nl/www/application/../library/Custom/Zend/Application/Resource/View.php) is not within the allowed path(s): (/usr/local/reserved/index.php:/sites/ericversteeg.nl/:/tmp) in /sites/ericversteeg.nl/www/library/Zend/Loader.php on line 198

And finally the fatal:

Fatal error: Uncaught exception 'Zend_Controller_Response_Exception' with message 'Cannot send headers; headers already sent in /sites/ericversteeg.nl/www/library/Zend/Loader.php, line 198' in /sites/ericversteeg.nl/www/library/Zend/Controller/Response/Abstract.php:323 Stack trace: #0 /sites/ericversteeg.nl/www/library/Zend/Controller/Response/Abstract.php(341): Zend_Controller_Response_Abstract->canSendHeaders(true) #1 /sites/ericversteeg.nl/www/library/Zend/Controller/Response/Abstract.php(768): Zend_Controller_Response_Abstract->sendHeaders() #2 /sites/ericversteeg.nl/www/library/Zend/Controller/Front.php(992): Zend_Controller_Response_Abstract->sendResponse() #3 /sites/ericversteeg.nl/www/library/Zend/Application/Bootstrap/Bootstrap.php(97): Zend_Controller_Front->dispatch() #4 /sites/ericversteeg.nl/www/library/Zend/Application.php(366): Zend_Application_Bootstrap_Bootstrap->run() #5 /sites/ericversteeg.nl/www/public/index.php(28): Zend_Application->run() #6 {main} thrown in /sites/ericversteeg.nl/www/library/Zend/Controller/Response/Abstract.php on line 323

my index.php :

date_default_timezone_set('Europe/Paris');

// 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();

my bootstrap

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {

    public function _initAutoloader() {
        $autoloader = new Zend_Application_Module_Autoloader(array(
            'namespace' => '',
            'basePath' => APPLICATION_PATH,
            'fallbackAutoloader' => true
        ));

        return $autoloader;
    }

    protected function _initConfig() {
        Zend_Registry::set('config', new Zend_Config_Ini(
            APPLICATION_PATH . '/configs/application.ini',
            APPLICATION_ENV,
            array('allowModifications' => true)
        ));
        $router = Zend_Controller_Front::getInstance()->getRouter();
        $router->addConfig(new Zend_Config_Xml(APPLICATION_PATH . '/routes.xml'));
    }

    protected function _initDbAdapter() {
        $this->bootstrap('db');
        $db = $this->getResource('db');
        if (!is_null($db)) {
            Zend_Registry::set('db', $db);
        } else {
            throw new Zend_Exception('Cannot connect to database');
        }
    }

    protected function _initSession() {
        $resource = $this->getPluginResource('session');
        Zend_Session::setOptions($resource->getOptions());
        $ns = new Zend_Session_Namespace('Eric_website');
        Zend_Registry::set('session', $ns);
    }

    protected function _initLog() {
        //Zend_Registry::set('logger', new Custom_Zend_Log());

        // Chrome PhpConsole
        if (APPLICATION_ENV == 'development') {
            Custom_PhpConsole::setEnabledOnServer();
            if (Custom_PhpConsole::isEnabledOnClient()) {
                Custom_PhpConsole::start(true, true, dirname(__FILE__));
                //Custom_PhpConsole::$ignoreRepeatedEvents = true;
            }
        }
        // Dummy debug function in case PhpConsole is not used
        if (!function_exists('debug')) {
            function debug() { }
        }
        $logger = new Zend_Log();

        // firebug writer voor development omgeving
        $writer = new Zend_Log_Writer_Firebug();
        $writer->setEnabled(true);
        $logger->addWriter($writer);

        Zend_Registry::set('logger', $logger);
    }

    protected function _initView() {

        // Initialize view
        $view = new Zend_View();
        $view->addHelperPath(APPLICATION_PATH . '/views/helpers/', 'Custom_Zend_View_Helper');
        $view->addScriptPath(APPLICATION_PATH . '/views/scripts/');
        $view->addScriptPath(APPLICATION_PATH . '/views/partials/');
        //$view->headMeta()->appendHttpEquiv('Content-Language', Zend_Registry::get('language'));

        // Add it to the ViewRenderer
        $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer');
        $viewRenderer->setView($view);
        $view->doctype('XHTML1_STRICT');

        // Return it, so that it can be stored by the bootstrap
        return $view;
    }

}

and my htaccess is located in the root to ignore public directory on the host:

RewriteEngine On 
RewriteRule ^\.htaccess$ - [F] 
RewriteCond %{REQUEST_URI} =""
RewriteRule ^.*$ /public/index.php [NC,L] 
RewriteCond %{REQUEST_URI} !^/public/.*$
RewriteRule ^(.*)$ /public/$1 
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^public/.*$ /public/index.php [NC,L]
Community
  • 1
  • 1
Eric1978
  • 83
  • 3
  • 12
  • That is only a warning, it does not stop your script - unless (as in your case) you display errors. You should disable error display (as that is the production server) and log them instead. Also you should review the actual setting: http://www.php.net/manual/en/ini.core.php#ini.open-basedir - some parts of your software want to access files they are not allowed to. - Related search: http://stackoverflow.com/search?q=%5Bphp%5D+Warning%3A+open_basedir+restriction+in+effect&submit=search – hakre Oct 07 '12 at 18:51
  • I like these possible duplicates: [open_basedir restriction error in codeigniter](http://stackoverflow.com/questions/4168258/open-basedir-restriction-error-in-codeigniter); [An error “open_basedir restriction in effect”](http://stackoverflow.com/questions/12230500/an-error-open-basedir-restriction-in-effect) – hakre Oct 07 '12 at 18:58
  • This one is more often referred when that error appears: [open_basedir restriction in effect. File(/) is not within the allowed path(s):](http://stackoverflow.com/questions/1846882/open-basedir-restriction-in-effect-file-is-not-within-the-allowed-paths) – hakre Oct 07 '12 at 19:10

1 Answers1

1

If your server is controlled by Plesk or similar panel, then it is very usual that open_basedir option is set to your web folder (basically, default behaviour for those panels is to restrict your scripts from accessing file outside of your web folder). But there are many cases when disabling this restriction makes sense and is not abusive, e.g. having a framework outside of any virtual host folder as a single copy to be used by scripts on different hosts.

You need to add the following text into your vhost.conf (usually residing at /var/www/vhosts/yourdomain.com/httpdocs):

<Directory /var/www/vhosts/yourdomain.com/httpdocs>
    php_admin_value open_basedir "/var/www/vhosts/yourdomain.com" # or /var/www/vhosts etc., depends on where do you want to include your files from, put top level dir here
    php_admin_flag safe_mode off
</Directory>

After that, restart your webserver or rebuild its configuration without restart as:

websrvmng -u –vhost-name=yourdomain.com

Yuriy
  • 1,964
  • 16
  • 23