提问人:Ben 提问时间:12/4/2009 最后编辑:markusBen 更新时间:5/31/2023 访问量:619684
open_basedir限制生效。File(/) 不在允许的路径内:
open_basedir restriction in effect. File(/) 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):
答:
所引用的路径是 incorect,而不是工作区的 directoryRoot。尝试为要访问的文件构建一个绝对路径,您现在可能使用相对路径......
评论
修改 PHP 配置中的open_basedir
设置(请参阅运行时配置)。
该设置主要用于防止特定用户的 PHP 脚本访问其他用户帐户中的文件。因此,通常情况下,您自己帐户中的任何文件都应该可以由您自己的脚本读取。open_basedir
如果 PHP 在 Linux 系统上作为 Apache 模块运行,则通过示例设置:.htaccess
<DirectoryMatch "/home/sites/site81/">
php_admin_value open_basedir "/home/sites/site81/:/tmp/:/"
</DirectoryMatch>
评论
/my/cutsom/dir/
.htaccess
文件中使用 php_admin_value
。不能在 .htaccess 文件中使用 DirectoryMatch。(如果可以禁用它,会采取什么样的安全措施?open_basedir
我在 ispconfig3 上遇到了这种问题,并出现了这样的错误
open_basedir限制生效。 文件(/var/www/clients/client7/web15)不在允许的范围内 路径:.........
为了解决我的情况,我只是在网站的 ispconfig3 面板中将 PHP 设置为 SuPHP
对我来说,问题是运行整个过程的 Plesk 服务器的配置值错误/缺失。 我只是按照这里的指示进行操作:http://davidseah.com/blog/2007/04/separate-php-error-logs-for-multiple-domains-with-plesk/
您可以将 PHP 配置为为每个 VirtualHost 定义提供单独的错误日志文件。诀窍是确切地知道如何设置它,因为你不能在不破坏 Plesk 的情况下直接接触配置。 你的每个域名 (dv) 在 /var/www/vhosts 中都有自己的目录。典型目录具有以下顶级目录:
cgi-bin/
conf/
error_docs/
httpdocs/
httpsdocs/
...and so on
您需要在域目录的 conf/ 文件夹中创建一个 vhost.conf 文件,其中包含以下行:
php_value error_log /path/to/error_log
php_flag display_errors off
php_value error_reporting 6143
php_flag log_errors on
更改第一个值以匹配您的实际安装(我使用了 /tmp/phperrors.log)。编辑完 vhost.conf 文件后,使用以下命令从控制台测试配置:
apachectl configtest
…or if you don’t have apachectl (as Plesk 8.6 doesn’t seem to)…
/etc/init.d/httpd configtest
最后告诉 Plesk 你已经做了这个改变。
/usr/local/psa/admin/bin/websrvmng -a
要解决此错误,必须编辑文件 httpd.conf。 在 apache2handler 部分指令服务器根目录的 phpinfo 中可以看到它之前的方式。 例如,在我的情况下是这样 - / etc / httpd / httpd.conf。 打开文件 httpd.conf,找到提及的参数 open_basedir。并将其设置为无。(php_admin_value open_basedir 无)
评论
open_basedir
php.ini
修改托管帐户中的open_basedir设置,并将其设置为无。找到 Plesk/cPanel 的“PHP 设置”区域下给出的open_basedir设置。从此处给出的下拉列表中将其设置为“无”。 我已经在 Plesk 面板图片中展示了它们。
评论
如果您使用 .您需要编辑查找此文件:php file.php
php.ini
: locate php.ini
/etc/php/php.ini
并将文件的路径附加到属性:open_basedir
open_basedir = /srv/http/:/home/:/tmp/:/usr/share/pear/:/usr/share/webapps/:/etc/webapps/:/run/media/andrew/ext4/protected
评论
更新和/或移动后,我遇到了这个问题@我的一个 wordpress 网站。
签入数据库表“wp_options”upload_path“并正确编辑它...
评论
只需搜索
open_basedir =
在 php.ini 中并禁用它。这是解决此问题的最简单解决方案。
更改前open_basedir =
更改后;open_basedir =
P.s - 更改后,不要忘记重新启动服务器。
享受;)
评论
如果您正在运行 PHP IIS 堆栈并遇到此错误,则通常是一个快速的权限修复。
如果您自己管理 Windows 服务器并具有访问权限,请先尝试以下操作:
导航到让您在写入时感到悲伤的文件夹,然后右键单击它>打开属性>安全性。
查看哪些用户有权访问该文件夹,哪些用户具有只读权限,哪些用户具有已满权限。您是否有一个阻止写入的组?
此修补程序将特定于您的 IIS 设置,您是将匿名身份验证与特定用户 IUSR 一起使用,还是与应用程序池标识一起使用?
无论如何,您最终将为 IUSR、IIS_IUSRS 或您的应用程序池标识之一添加一个新的完全写入权限 - 就像我说的,这将根据您的设置和您想要的方式而有所不同,您可以在这个(一个这样的帖子 - IIS8 中的 IIS_IUSRS 和 IUSR 权限)对我来说, 我将 Anon 与我的应用程序池标识一起使用,这样我就可以在任何临时文件夹或上传文件夹上进行完全读/写。MACHINE_NAME\IIS_IUSRS
我不需要在php.ini中添加任何额外的内容。open_basedir =
除了@yogihosting的答案之外,如果您使用的是 DirectAdmin,请按照以下步骤操作:
- 转到 DirectAdmin 的登录页面。通常,它的端口是 2222。
- 以管理员身份登录。它的用户名是默认的。
admin
- 在右侧面板上的“访问级别”中,确保您处于“管理员级别”。如果没有,请更改为它。
- 在“额外功能”部分,单击“自定义 HTTPD 配置”。
- 选择要更改的域。
在页面顶部的文本区域中输入要更改的配置。您应该考虑现有的配置文件,并基于它修改值。例如,如果您看到 中设置了 ,也许您应该将更改括在相关标记中:
open_basedir
<Directory>
<Directory>
<Directory "/path/to/directory"> php_admin_value open_basedir none </Directory>
进行必要的更改后,单击“保存”按钮。
- 现在,您应该看到已保存到配置文件中的更改(如果它们有效)。
但是,还有另一种编辑配置文件的方法:
注意:请小心,并自行承担以下步骤的风险,因为您可能会遇到错误,或者可能导致停机。推荐的方法是前一种方法,因为它可以防止您不正确地修改配置文件并显示错误。
- 以 root 身份登录您的服务器。
- 转到。从列出的用户中,转到与要更改的域相关的用户。
/usr/local/directadmin/data/users
在这里,有一个文件。从中进行备份:
httpd.conf
cp httpd.conf httpd.conf.back
现在使用您选择的编辑器编辑配置文件。例如,将现有编辑为 .请勿尝试移除东西,否则可能会遇到停机。编辑后保存文件。
open_basedir
none
使用以下方法之一重新启动 Apache Web 服务器(如果需要,请使用):
sudo
httpd -k graceful apachectl -k graceful apache2 -k graceful
如果遇到任何错误,请将主配置文件替换为备份文件,然后重新启动 Web 服务器。
同样,第一种解决方案是首选解决方案,您不应在第一次尝试第二种方法。正如警告中所指出的,第一种方法的优点是它可以防止保存配置错误的东西。
希望对您有所帮助!
我正在使用 Apache vhost-File 在我的 Windows 服务器上使用特定于应用程序的 ini 选项运行 PHP。因此,我使用 php-command 的 -d 选项。
我将每个应用程序的open_basedir设置为这些选项之一。
我需要将多个 url 设置为open_basedir,包括 UNC-Path,这种情况的语法有点难找。您必须用分号分隔路径,如果第一个路径以驱动器号开头,则可能也必须以分号开头。至少这对我有用。
例:
php.exe -d open_basedir=;d:/www/applicationRoot;//internal.unc.path/ressource/
如果使用 ispconfig3:
转到“网站”部分 -> “选项”-> PHP open_basedir:
- 在此字段中描述了允许的路径,并且每个路径都是分隔的 使用“:”
/var/www/clients/client2/web3/image:/var/www/clients/client2/web3/web:/var/www/... 等等
- 所以这里必须放你想要访问的路径,在我的情况下是:
/var/www/clients/client2/web3/image:
- 出现此问题的原因是:
当脚本尝试访问文件系统时,例如使用 include 或 fopen(),将检查文件的位置。当文件在指定的目录树之外时,PHP 将拒绝访问它。
检查 plesk 中的 \httpdocs\bootstrap\cache\config.php 文件,看看是否有一些不需要的路径。
我在 Directadmin 面板上上传了我的 codeigniter 项目。我遇到了同样的错误。
然后我更改了 php 设置。
open_basedir = session.save_path = ./temp/
然后它对我有用。
编辑位于主目录中的 php.ini 或 .user.ini
open_basedir = none
由于大多数人没有找到解决方案,因此 WordPress 的解决方案很广泛,大多数人甚至不完全知道事情会这样。
我发现您必须为服务器启用 IP,尤其是在使用 Cerber 时,在某些情况下,它可能会认为您没有上传 .png,而是上传 .js 文件。
服务器 IP 需要列入白名单。在极少数情况下,即使是上传者。
值得一提的是,在您的基本目录中有一个 tmp 文件夹 755,您实际上不需要一个名为 tmp 的文件夹。
open_basedir = "/home/user/site.com/:/tmp"
upload_tmp_dir = /home/user/site.com/tmp
快速设置的最佳选择是在Cpanel中,您可以在其中使用MultiPHP INI编辑器,您可以实际保存,并且.htaccess和php.ini都将更新,并且设置将同时在现场启动。
不建议将 basedir 设置为“none”,因为您正在启用可以在 WordPress 中仅使用单个文件编辑器编辑的根文件。如果这真的是可能的。
拉拉维尔
如果您在使用 Laravel 时遇到此问题。
仅转到文件夹并重命名为您想要的任何内容并重新加载站点。bootstrap/cache
config.php
评论
对于 Plesk,您可以通过面板更改或设置 openbase 目录设置
对我来说,这是因为我在php的tmp目录中给出了错误的路径。
希望这会有所帮助
评论