最近,在一台 Windows Server 服务器上部署 WordPress 项目。我们用的是 Windows Server 2016 的服务器,然后通过安装 Windows 版本宝塔面板部署 WordPress 网站环境。在安装 WordPress 程序过程中一直正常,直到安装并启用了 envato-market 插件和 redux-framework 插件,就会在前端和 WordPress 后台出现如下所示的错误:
Warning: is_readable(): open_basedir restriction in effect. File(C:wwwrootwww.niuqi360.com/wp-content/plugins/C:wwwrootwww.niuqi360.comwp-contentpluginsenvato-market/languages/envato-market-en_US.mo) is not within the allowed path(s): (c:/wwwroot/www.niuqi360.com/;C:/Windows/Temp/;C:/Temp/;C:/BtSoft/temp/session/) in C:wwwrootwww.niuqi360.comwp-includesl10n.php on line 748
open_basedir 限制实际上是一种安机制,可防止网络服务器上的用户,访问属于另一个用户的文件和文件夹。
接下来,让我们看看如何解决这个问题。
WordPress 警告:open_basedir restriction in effect
通常,我们在访问该 WordPress 网站时会遇到类似如下所示的这些错误:
open_basedir restriction in effect. File(/tmp) is not within the allowed path(s).
Warning: file_exists() [function.file-exists]: open_basedir restriction in effect. File(/home/some/path/here/) is not within the allowed path(s).
Warning: is_writable() [function.is-writable]: open_basedir restriction in effect.
File(/) is not within the allowed path(s).
基本上,此警告的目的是限制其他用户使用我们的网络服务器。
例如,假设 WordPress 主题或插件中的函数 mkdir ,尝试访问其主目录之外的文件或文件夹。而由于 open_basedir 的开启,它将无法访问它,并且会提示错误。
要修复这个错误,我们可以完全禁用 open_basedir 限制,也可以有选择地允许某些用户访问主目录之外的某些文件和文件夹。也可以选择调整 WordPress 主题和插件的代码,以便它不需要访问其根文件夹之外的文件和文件夹。
如何修复共享虚拟主机上的 open_basedir 限制错误
如果您使用的是共享主机,可能无法禁用 open_basedir 限制。因为您自己没有权限更改,如果您向服务商请求禁用它,服务商也不会答应的。
所以要解决这个问题,请联系虚拟主机服务商,获取虚拟主机上的 tmp 目录或文件夹的路径。然后编辑 wp-config.php 文件以在其中添加此代码,
define('WP_TEMP_DIR' ,'../../relative/path/to/tmp' );
在这里,将“../../relative/path/to/tmp”替换为 WordPress 的 tmp 目录的实际路径。
例如,如果目标 WordPress 站点安装在 www.yoursite.com/blog,并且 tmp 文件夹位于 blog 文件夹的上一层,则要添加到 wp-config.php 文件的代码为:
define('WP_TEMP_DIR' ,'../tmp' )
相对于 WordPress 网站根目录,需要为每个更高层的目录添加一个../
,直到到达 tmp 目录。
有时,open_basedir 错误是因为 WordPress 中的媒体上传路径不正确。请转到 http://www.yoursite.com/wp-admin/options.php 并检查 upload_path 项的值。
这里的值可能是空的,或者为 wp-content/uploads。如果它前面有一个斜杠,例如 /wp-content/uploads,请将其替换为 wp-content/uploads。
警告:请不要随意在 /wp-admin/options.php 页面上编辑任何其他内容,否则可能导致网站出现问题。
如何修复 VPS 服务器上的 open_basedir 限制错误
如果是在 VPS 或专用主机上,并且安装了宝塔面板或者 cPanel ,要禁用 PHP open_basedir 限制,只要转到对应的设置项中将其禁用即可。
这里以宝塔面板为例。登录宝塔面板后,找到对应的网站并点击设置按钮。然后在网站设置窗口中,点击网站目录。只要在网站目录设置中,取消选中“防跨站攻击(open_basedir)”即可。
如果您在使用 Plesk 的 VPS 或专用主机上,请转至工具和设置 > 简单视图设置 > PHP 设置。在这里,输入 open_basedir 选项的自定义值,{DOCROOT};WindowsTemp
作为值。单击确定并重新启动 Plesk 服务。
请注意,在 Plesk 中全局禁用 open_basedir 限制不适用于已创建的网站。它仅适用于更改后创建的网站。要禁用当前网址的 open_basedir 限制,可以安装下面的步骤操作:
转到域 >(您要修改的域)> 网站与域 > 高级操作 > 网站脚本和安全 > PHP 设置。在这里,输入 open_basedir 选项的自定义值(在常用设置中),{DOCROOT};WindowsTemp
作为值。
如果您的 VPS 或专用主机上,没有宝塔面板、Cpanel、WHM 或 Plesk,也可以直接编辑 Apache 配置文件,来禁用 PHP 的 open_basedir 限制。为此,请打开 httpd.conf 文件,然后找到如下行:
php_admin_value open_basedir some_value_here
将其替换为以下行:
php_admin_value open_basedir none
只需在要禁用 open_basedir 保护的域名的 VirtualHost 下进行此更改。
如果不想完全禁用 open_basedir 限制,而是允许 php 脚本访问主目录之外的某些特定目录,请将如下代码添加到 httpd.conf 文件对应的 VirtualHost 中。
php_admin_value open_basedir "/home/user_account/:/usr/local/lib/php:/tmp:/new_directory"
如果需要添加多个目录,在 Unix 和 Linux 服务器上用冒号 (:) 分隔,在 Windows 服务器上用分号 (;) 分隔即可。
对 httpd.conf 文件进行任何更改后,需要重新启动 Apache 服务器,以使对配置的更改生效。
注意事项:在配置目录列表时,目录名称是正则表达式匹配前缀。所以 /dir/incl 的规则,既可以匹配 /dir/incl 目录,也可以匹配 /dir/includes 目录。要确保它与指定的目录完全匹配,请在目录尾部添加斜杠,例如 /dir/incl/。
作者:牛奇网,本站文章均为辛苦原创,在此严正声明,本站内容严禁采集转载,面斥不雅请好自为之,本文网址:https://www.niuqi360.com/wordpress/open_basedir-restriction-in-effect-error-in-wordpress/