open_basedir限制生效。File(/) 不在允许的路径内:

open_basedir restriction in effect. File(/) is not within the allowed path(s):

提问人:Ben 提问时间:12/4/2009 最后编辑:markusBen 更新时间:5/31/2023 访问量:619684

问:

我在网站上上传头像时收到此错误。我以前从未得到过它,最近没有任何改变让我开始收到这个错误......

Warning: is_writable() [function.is-writable]: 
open_basedir restriction in effect. 
File(/) is not within the allowed path(s):
PHP 文件系统

评论

1赞 Yogesh 10/7/2021
有人请澄清当前接受的答案是否是有效的答案。然后@sjas,请编辑或删除您的评论。这令人困惑。:|
0赞 JBH 4/26/2022
@Yogesh它工作正常。当然,我使用的是 Plesk。我相信 sjas 错了,尽管这可能是因为他/她使用了 plesk 以外的东西。我愿意假设 Ben 接受的答案是他也在使用 Plesk。

答:

2赞 NDM 12/4/2009 #1

所引用的路径是 incorect,而不是工作区的 directoryRoot。尝试为要访问的文件构建一个绝对路径,您现在可能使用相对路径......

评论

0赞 Ben 12/5/2009
它使用绝对路径。它适用于除此用户以外的所有用户。
-29赞 Nikesh 5/27/2010 #2

修改 PHP 配置中的open_basedir设置(请参阅运行时配置)。

该设置主要用于防止特定用户的 PHP 脚本访问其他用户帐户中的文件。因此,通常情况下,您自己帐户中的任何文件都应该可以由您自己的脚本读取。open_basedir

如果 PHP 在 Linux 系统上作为 Apache 模块运行,则通过示例设置:.htaccess

<DirectoryMatch "/home/sites/site81/">
    php_admin_value open_basedir "/home/sites/site81/:/tmp/:/"
</DirectoryMatch>

评论

3赞 hitautodestruct 1/25/2013
@Nikesh 在我将其放入 .htaccces 并将路径更改为:.不知道为什么这么想。/my/cutsom/dir/
83赞 Álvaro González 4/24/2013
很酷,到目前为止,有 12 人为错误答案投了赞成票。不能在 .htaccess 文件中使用 php_admin_value不能在 .htaccess 文件中使用 DirectoryMatch。(如果可以禁用它,会采取什么样的安全措施?open_basedir
21赞 tfont 8/24/2013
你不要把它放到你的HTACCESS中!而是进入你的 APACHE 配置文件。
10赞 Martin 10/17/2013
在 open_basedir 中包含根目录完全违背了open_basedir的目的。此解决方案仅在本质上禁用限制的意义上“有效”。
2赞 ohcibi 10/31/2018
对显示有效配置文件语法的答案投赞成票,同时对共享主机 Web GUI 屏幕截图投赞成票。只有真正的 php 开发人员才能做到这一点。
2赞 Qlimax 8/4/2011 #3

我在 ispconfig3 上遇到了这种问题,并出现了这样的错误

open_basedir限制生效。 文件(/var/www/clients/client7/web15)不在允许的范围内 路径:.........

为了解决我的情况,我只是在网站的 ispconfig3 面板中将 PHP 设置为 SuPHP

5赞 Josh P 9/21/2011 #4

对我来说,问题是运行整个过程的 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
42赞 Andrei 6/28/2012 #5

要解决此错误,必须编辑文件 httpd.conf。 在 apache2handler 部分指令服务器根目录的 phpinfo 中可以看到它之前的方式。 例如,在我的情况下是这样 - / etc / httpd / httpd.conf。 打开文件 httpd.conf,找到提及的参数 open_basedir。并将其设置为无。(php_admin_value open_basedir 无)

评论

1赞 diggersworld 9/11/2014
设置为“无”对我有用 - 也使用 Plesk 界面。
11赞 Dennis van der Schagt 11/12/2014
我在我的 .(Raspberry Pi 上的 Arch Linux,带有 php 5)open_basedirphp.ini
2赞 Ben Elgar 10/16/2015
也在我的php.ini(也是Arch)中找到了它。只需注释掉该行即可达到与此答案相同的效果。
0赞 mwangaben 3/18/2019
@BenElgar只是通过评论该行提到了作品,我只是在问那里是否有风险
146赞 yogihosting 1/25/2016 #6

修改托管帐户中的open_basedir设置,并将其设置为无。找到 Plesk/cPanel 的“PHP 设置”区域下给出的open_basedir设置。从此处给出的下拉列表中将其设置为“无”。 我已经在 Plesk 面板图片中展示了它们。

在此处输入图像描述 enter image description here

评论

2赞 Heemanshu Bhalla 4/28/2016
@yogihosting执行此操作后,我收到错误 - 无法找到您指定的模型:Home_model
1赞 Matt Cowley 7/24/2016
这有点晚了,但是有没有办法对所有plesk网站都这样做?对于网站使用的版本,我在全局 php 中将其设置为 none.ini: gyazo.com/dfffbe7f9b3a20ede97da72f1ddfc777 但他们仍然收到错误。
0赞 yogihosting 7/28/2016
@MattCowley您必须对 plesk panel 中托管的每个站点执行此操作。
0赞 Saurabh 3/6/2023
甚至我也遵循了这个答案并开始出现错误
13赞 deathangel908 6/23/2017 #7

如果您使用 .您需要编辑查找此文件:php file.phpphp.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

评论

4赞 mvreijn 12/3/2019
这是唯一指向多个特定路径的解决方案,而不仅仅是完全跳过安全性。
3赞 Bartuzz 9/14/2017 #8

更新和/或移动后,我遇到了这个问题@我的一个 wordpress 网站。

签入数据库表“wp_options”upload_path“并正确编辑它...

评论

0赞 brett 10/10/2018
你把它设置到什么值?/[...]/public_html/wp-content/uploads ?
0赞 Philip Konick 9/7/2023
这对我有帮助。我有一个 WP 多站点安装,由于某种原因,损坏站点的upload_path有一个值,而我的所有其他站点都是空的。我删除了该值,它立即起作用。谢谢!
-3赞 Lalit Giriya 8/9/2018 #9

只需搜索

open_basedir =

在 php.ini 中并禁用它。这是解决此问题的最简单解决方案。

更改前open_basedir =

更改后;open_basedir =

P.s - 更改后,不要忘记重新启动服务器。

享受;)

评论

4赞 Adam Lenda 12/17/2018
别这样。。。信不信由你,安全很重要。 :)是时候阅读有关工具的文档了:php.net/manual/en/ini.core.php#ini.open-basedir
0赞 RobDigital 4/5/2019 #10

如果您正在运行 PHP IIS 堆栈并遇到此错误,则通常是一个快速的权限修复。

如果您自己管理 Windows 服务器并具有访问权限,请先尝试以下操作:

导航到让您在写入时感到悲伤的文件夹,然后右键单击它>打开属性>安全性。

查看哪些用户有权访问该文件夹,哪些用户具有只读权限,哪些用户具有已满权限。您是否有一个阻止写入的组?

此修补程序将特定于您的 IIS 设置,您是将匿名身份验证与特定用户 IUSR 一起使用,还是与应用程序池标识一起使用?

无论如何,您最终将为 IUSR、IIS_IUSRS 或您的应用程序池标识之一添加一个新的完全写入权限 - 就像我说的,这将根据您的设置和您想要的方式而有所不同,您可以在这个(一个这样的帖子 - IIS8 中的 IIS_IUSRS 和 IUSR 权限)对我来说, 我将 Anon 与我的应用程序池标识一起使用,这样我就可以在任何临时文件夹或上传文件夹上进行完全读/写。MACHINE_NAME\IIS_IUSRS

我不需要在php.ini中添加任何额外的内容。open_basedir =

0赞 MAChitgarha 8/6/2019 #11

除了@yogihosting的答案之外,如果您使用的是 DirectAdmin,请按照以下步骤操作:

  1. 转到 DirectAdmin 的登录页面。通常,它的端口是 2222。
  2. 以管理员身份登录。它的用户名是默认的。admin
  3. 在右侧面板上的“访问级别”中,确保您处于“管理员级别”。如果没有,请更改为它。
  4. 在“额外功能”部分,单击“自定义 HTTPD 配置”。
  5. 选择要更改的域。
  6. 在页面顶部的文本区域中输入要更改的配置。您应该考虑现有的配置文件,并基于它修改值。例如,如果您看到 中设置了 ,也许您应该将更改括在相关标记中:open_basedir<Directory><Directory>

    <Directory "/path/to/directory">
        php_admin_value open_basedir none
    </Directory>
    
  7. 进行必要的更改后,单击“保存”按钮。

  8. 现在,您应该看到已保存到配置文件中的更改(如果它们有效)。

但是,还有另一种编辑配置文件的方法:

注意:请小心,并自行承担以下步骤的风险,因为您可能会遇到错误,或者可能导致停机。推荐的方法是前一种方法,因为它可以防止您不正确地修改配置文件并显示错误。

  1. 以 root 身份登录您的服务器。
  2. 转到。从列出的用户中,转到与要更改的域相关的用户。/usr/local/directadmin/data/users
  3. 在这里,有一个文件。从中进行备份:httpd.conf

    cp httpd.conf httpd.conf.back
    
  4. 现在使用您选择的编辑器编辑配置文件。例如,将现有编辑为 .请勿尝试移除东西,否则可能会遇到停机。编辑后保存文件。open_basedirnone

  5. 使用以下方法之一重新启动 Apache Web 服务器(如果需要,请使用):sudo

    httpd -k graceful
    apachectl -k graceful
    apache2 -k graceful
    
  6. 如果遇到任何错误,请将主配置文件替换为备份文件,然后重新启动 Web 服务器。

同样,第一种解决方案是首选解决方案,您不应在第一次尝试第二种方法。正如警告中所指出的,第一种方法的优点是它可以防止保存配置错误的东西。

希望对您有所帮助!

0赞 Fanax 1/24/2020 #12

我正在使用 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/
3赞 Pavel Kenarov 2/17/2020 #13

如果使用 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 将拒绝访问它。

-1赞 Menachem Segal 1/12/2021 #14

检查 plesk 中的 \httpdocs\bootstrap\cache\config.php 文件,看看是否有一些不需要的路径。

0赞 infomasud 2/9/2021 #15

我在 Directadmin 面板上上传了我的 codeigniter 项目。我遇到了同样的错误。错误

然后我更改了 php 设置。

open_basedir = session.save_path = ./temp/

然后它对我有用。

3赞 Chaturanga 7/12/2021 #16

编辑位于主目录中的 php.ini 或 .user.ini

open_basedir = none
0赞 Dealazer 10/6/2021 #17

由于大多数人没有找到解决方案,因此 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 中仅使用单个文件编辑器编辑的根文件。如果这真的是可能的。

7赞 Mahdi Bashirpour 6/4/2022 #18

拉拉维尔

如果您在使用 Laravel 时遇到此问题。

仅转到文件夹并重命名为您想要的任何内容并重新加载站点。bootstrap/cacheconfig.php

评论

1赞 ERONDU EMMANUEL 12/26/2022
这在 Laravel 9.4 上拯救了我......今天。多谢!
1赞 Saeed Mi 3/27/2023
这是拉拉维尔最好的答案,非常感谢
1赞 Alrik 7/17/2023
这太疯狂了,谢谢!!
0赞 Martin Cmarko 10/25/2023
“bootstrap/cache/config.php”由“php artisan config:cache”创建。我看不出重命名配置.php的意义。而是运行“php artisan config:clear”以删除文件。参见:laravel.com/docs/10.x/configuration#configuration-caching
4赞 Arun Prasad E S 10/28/2022 #19

对于 Plesk,您可以通过面板更改或设置 openbase 目录设置

https://support.plesk.com/hc/en-us/articles/360006170513-How-to-add-custom-or-additional-path-to-the-open-basedir-option-for-Plesk-domain-

enter image description here

0赞 Jom Apps 5/28/2023 #20

对我来说,这是因为我在php的tmp目录中给出了错误的路径。

希望这会有所帮助