PHP Mailer 出现服务器错误(open_basedir 限制)?

PHP Mailer 出现服务器错误(open_basedir 限制)?

当消费者在我的网站上完成注册时,我会随机收到 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

相关内容