skip to Main Content

open_basedir limits the files that can be opened by PHP within a directory-tree.

I am storing several class libraries and configuration files outside of my web root directory. This way the web server does not make them publicly accessible. However when I try to include them from my application I get an open_basedir restriction error like this:

Warning: realpath()
[function.realpath]: open_basedir
restriction in effect.
File(/var/www/vhosts/domain.tld/zend/application)
is not within the allowed path(s):
(/var/www/vhosts/domain.tld/httpdocs:/tmp)
in
/var/www/vhosts/domain.tld/httpdocs/index.php
on line 5

My web root is here:

/var/www/vhosts/domain.tld/httpdocs

My libraries and configuration directory are here:

/var/www/vhosts/domain.tld/zend

What would be the best workaround to relax the open_basedir restriction so that the the directory tree under the domain folder becomes available to my application? I have a number of domains that I want to do this with, and I’m also obviously wary of creating security vulnerabilities.

Note: I am using CentOS, Apache, Plesk, and I have root ssh access to the server. And though this doesn’t apply to Zend Framework directly, I am using it in this instance. So here is the inclusion from Zend’s bootstrap:

define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../zend/application/'));
set_include_path(APPLICATION_PATH . '/../zend/library' . PATH_SEPARATOR . get_include_path());

3

Answers


  1. add the paths you need to access to (/var/www/vhosts/domain.tld/zend) to your open_basedir directive (you can specify several paths using the path separator ‘:’ or ‘;’ in windows)

    note that the values in the open_basedir are prefixes, which means that anything under the /var/www/vhosts/domain.tld/zend will be accessible

    Login or Signup to reply.
  2. You can also do this easily on a per-directory basis using the Apache (assuming this is your web server) configuration file (e.g. httpd.conf)

    <Directory /var/www/vhosts/domain.tld/httpdocs>
    php_admin_value open_basedir "/var/www/vhosts/domain.tld/httpdocs:/var/www/vhosts/domain.tld/zend"
    </Directory>
    

    you can also completely remove the restriction with

    <Directory /var/www/vhosts/domain.tld/httpdocs>
    php_admin_value open_basedir none
    </Directory>
    
    Login or Signup to reply.
  3. In Parallels Plesk Panel (e.g. 1and1) you can do it in the PHP panel settings:

    enter image description here

    here:

    enter image description here

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search