服务器错误(open_basedir限制)与PHP邮件?

当消费者在我的网站上完成注册时,我随机获得open_basedir限制。

我能够从我的机器以及另外两台testing机器完成注册过程,但似乎有些客户无法做到这一点。

当我检查我的错误日志时,我发现以下内容:

[Tue Feb 01 11:55:24 2011] [error] [client 11.222.333.444] PHP Warning:require()[function.require]:open_basedir限制生效。 文件(../ phpmailer / class.phpmailer.php)不在/ var / www / vhosts / site中的允许path(/var/www/vhosts/aabbenefits.com/httpdocs:/tmp)之内。 com / httpdocs / dir / email_inc.php第3行,referer: https ://www.site.com/previouspage

[2011年2月1日11:55:24] [error] [client 11.222.333.444] PHP Warning:require(../ phpmailer / class.phpmailer.php)[function.require]:未能打开stream:操作不允许在第3行的/var/www/vhosts/site.com/httpdocs/dir/email_inc.php,referer:https://www.site.com/previouspage

[致命错误] [客户端11.222.333.444] PHP致命错误:require()[function.require]:无法打开所需的'../phpmailer/class.phpmailer.php'(include_path ='.:')在第3行的/var/www/vhosts/site.com/httpdocs/dir/email_inc.php中,referer: https : //www.site.com/previouspage

有人可以提供任何build议?

正如Alvosu所说,不只是php.ini可以包含open_basedir。 在httpd.conf本身的虚拟主机conf文件中也常见。 可能甚至在.htaccess文件中。

Plesk也倾向于把它放在每个创build的虚拟主机上。 如果您正在运行Plesk,则会在/var/www/vhosts/site.com/conf/httpd.include看到生成的configuration。 这可能有一个线php_admin_value open_basedir "/var/www/vhosts/site.com/httpdocs:/tmp" (这是它通常的格式)。 要解决这个问题,不要编辑httpd.include文件,因为它会被Plesk覆盖。 相反,在同一个文件夹中创build一个名为vhost.conf的文件。 内容应该是这样的:

 <Directory /var/www/vhosts/site.com/httpdocs> php_admin_value open_basedir none </Directory> 

(或一些其他的价值,而不是没有)。 然后,当您创build此文件时,请进入Plesk,然后inputsite.com域的主机设置并保存,不做任何更改。 这将导致Plesk检测到vhost.conf文件并将其包含在其生成的httpd.include文件中。

禁用open_basedir ,编辑php.ini(或.htaccess或虚拟主机conf):

 open_basedir none 

或者添加“/var/www/vhosts/site.com”到open_basedir

 open_basedir /var/www/vhosts/aabbenefits.com/httpdocs:/var/www/vhosts/site.com/httpdocs:/tmp