【问题标题】:open_basedir restriction in effect. File(/) is not within the allowed path(s):open_basedir 限制生效。文件(/)不在允许的路径内:
【发布时间】:2010-12-23 05:51:46
【问题描述】:

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

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

【问题讨论】:

  • 你接受了一个无效的答案。
  • 有人请澄清当前接受的答案是否有效。然后@sjas,请编辑或删除您的评论。这很令人困惑。 :|

标签: php filesystems


【解决方案1】:

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

【讨论】:

  • @yogihosting 执行此操作后出现错误 - 无法找到您指定的模型:Home_model
  • 这有点晚了,但是有没有办法为所有的 plesk 网站做到这一点?对于站点使用的版本,我在全局 php.ini 中将其设置为 none:gyazo.com/dfffbe7f9b3a20ede97da72f1ddfc777 但他们仍然收到错误消息。
  • @MattCowley 您必须为 plesk 面板中托管的每个站点执行此操作。
【解决方案2】:

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

【讨论】:

  • 设置为“无”对我有用 - 也使用 Plesk 界面。
  • 我在php.ini 中找到了open_basedir 配置。 (带有 php 5 的 Raspberry Pi 上的 Arch Linux)
  • 也在我的 php.ini(也是 Arch)中找到它。只需注释掉该行即可达到与此答案相同的效果。
  • @BenElgar 只是通过评论这行提到的作品,我只是问那里有风险
【解决方案3】:

如果您使用 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

【讨论】:

  • 这是唯一指向多个特定路径而不是完全跳过安全性的解决方案。
【解决方案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

【讨论】:

    【解决方案5】:

    您引用的路径不正确,并且与您工作区的 directoryRoot 不相符。尝试为要访问的文件构建绝对路径,您现在可能正在使用相对路径...

    【讨论】:

    • 它使用的是绝对路径。它适用于除此用户之外的所有用户。
    【解决方案6】:

    如果您在使用 ispconfig3 时遇到此类问题并遇到这样的错误

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

    要解决它(在我的情况下),只需在网站的 ispconfig3 面板中将 PHP 设置为 SuPHP

    希望它可以帮助某人:)

    【讨论】:

      【解决方案7】:

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

      检查数据库表'wp_options'和'upload_path'并正确编辑它...

      【讨论】:

      • 您将其设置为什么值? /[...]/public_html/wp-content/uploads ?
      【解决方案8】:

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

      【讨论】:

        【解决方案9】:

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

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

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

        查看哪些用户可以访问该文件夹,哪些是只读的,哪些是完整的。您有阻止写入的组吗?

        修复将特定于您的 IIS 设置,您是使用具有特定用户 IUSR 还是使用应用程序池身份的匿名身份验证?

        无论如何,您最终都会为 IUSR、IIS_IUSRS 或您的应用程序池标识之一添加新的完整写入权限 - 正如我所说,这将根据您的设置和您想要的方式而有所不同做到这一点,你可以在这个上进入谷歌兔子洞(一个这样的帖子 - IIS_IUSRS and IUSR permissions in IIS8)对我来说,我使用我的应用程序池身份的匿名,这样我就可以摆脱 MACHINE_NAME\IIS_IUSRS 对任何一个完整的读/写临时或上传文件夹。

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

        【讨论】:

          【解决方案10】:

          除了@yogihosting's answer,如果您使用的是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_basedir 编辑为 none。不要试图删除东西,否则您可能会遇到停机时间。编辑后保存文件。

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

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

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

          希望对你有帮助!

          【讨论】:

            【解决方案11】:

            我正在使用 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/
            

            【讨论】:

              【解决方案12】:

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

              然后我更改 php 设置。

              open_basedir = session.save_path = ./temp/

              然后它对我有用。

              【讨论】:

                【解决方案13】:

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

                open_basedir = none
                

                【讨论】:

                  【解决方案14】:

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

                  【讨论】:

                    【解决方案15】:

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

                    【讨论】:

                      【解决方案16】:

                      只要搜索

                      open_basedir =

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

                      更改前open_basedir =

                      修改后;open_basedir =

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

                      享受;)

                      【讨论】:

                      【解决方案17】:

                      在您的 PHP 配置中修改 open_basedir settings(参见 Runtime Configuration)。

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

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

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

                      【讨论】:

                      • @Nikesh 在我将其放入我的 .htaccces 并将路径更改为:/my/cutsom/dir/ 后,这给了我一个 500 错误。不知道为什么这么想。
                      • 酷,到目前为止,有 12 人支持错误答案。 You cannot use php_admin_value in .htaccess filesYou cannot use DirectoryMatch in .htaccess files。 (如果可以禁用 open_basedir 会采取什么样的安全措施?)
                      • 你不要把它放到你的 HTACCESS 中!而是放入您的 APACHE 配置文件中。
                      • 在 open_basedir 中包含根目录完全违背了 open_basedir 的目的。该解决方案仅“有效”,因为它实质上禁用了限制。
                      • 拒绝一个显示有效配置文件语法的答案,同时支持共享主机 web gui 屏幕截图。只有真正的 php 开发人员才能做到这一点。
                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2021-11-23
                      • 1970-01-01
                      • 2019-08-07
                      • 1970-01-01
                      相关资源
                      最近更新 更多