当消费者在我的网站上完成注册时,我会随机收到 open_basedir 限制。
我可以在我的机器以及另外两台测试机器上顺利完成注册过程,但似乎有些客户端无法这样做。
当我检查错误日志时,发现以下内容:
[2011 年 2 月 1 日星期二 11:55:24] [错误] [客户端 11.222.333.444] PHP 警告:require() [function.require]:open_basedir 限制生效。文件 (../phpmailer/class.phpmailer.php) 不在允许的路径内:(/var/www/vhosts/aabbenefits.com/httpdocs:/tmp) 在 /var/www/vhosts/site.com/httpdocs/dir/email_inc.php 第 3 行,引用者:https://www.site.com/previouspage
[2011 年 2 月 1 日星期二 11:55:24] [错误] [客户端 11.222.333.444] PHP 警告:require(../phpmailer/class.phpmailer.php) [function.require]:无法打开流:/var/www/vhosts/site.com/httpdocs/dir/email_inc.php 第 3 行中不允许操作,引用者:https://www.site.com/previouspage
[2011 年 2 月 1 日星期二 11:55:24] [错误] [客户端 11.222.333.444] PHP 致命错误:require() [function.require]:无法打开所需的“../phpmailer/class.phpmailer.php”(include_path='.:')在 /var/www/vhosts/site.com/httpdocs/dir/email_inc.php 第 3 行,引用者:https://www.site.com/previouspage
有人可以提供一些建议吗?
答案1
正如 Alvosu 所说,并非只有 php.ini 可以包含 open_basedir。它也常见于 httpd.conf 本身的虚拟主机配置文件中。甚至可能存在于 .htaccess 文件中。
Plesk 还倾向于将其放入它创建的每个 vhost conf 中。如果您正在运行 Plesk,您将在 中看到生成的配置/var/www/vhosts/site.com/conf/httpd.include
。其中可能有一行php_admin_value open_basedir "/var/www/vhosts/site.com/httpdocs:/tmp"
(这是它通常的格式)。要解决这个问题,请不要编辑 httpd.include 文件,因为它无论如何都会被 Plesk 覆盖。相反,vhost.conf
在同一文件夹中创建一个名为 的文件。内容应该是这样的:
<Directory /var/www/vhosts/site.com/httpdocs>
php_admin_value open_basedir none
</Directory>
(或者其他值,而不是 none)。然后,创建此文件后,进入 Plesk,只需输入 site.com 域的托管设置并保存,无需任何更改。这将导致 Plesk 检测 vhost.conf 文件并将其包含在其生成的 httpd.include 文件中。
答案2
禁用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