117

我在我的网站上传头像时收到了这个错误。我以前从来没有得到过它,最近也没有什么改变让我开始犯这个错误。。。

警告:is_writeable()[函数.是可写的]:open_basedir限制生效。文件(/)不在允许的路径内:
2
  • 1
    请有人澄清目前接受的答案是否有效。然后是@sjas,请编辑或删除您的评论。令人困惑|
    – 酸奶
    2021年10月7日11:36
  • @酸奶很管用。当然,我用的是Plesk。我认为sjas是错误的,尽管这可能是因为他/她使用了plesk以外的东西。我愿意假设Ben接受了这个答案,他也在使用Plesk。
    – 接线盒
    2022年4月26日2:09

21个答案21

重置为默认值
149

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

在此处输入图像描述 在此处输入图像描述

4
  • 2
    @执行此操作后,我遇到错误-无法定位您指定的模型:Home_model 2016年4月28日11:31
  • 1
    这有点晚了,但有没有办法为所有的plesk网站做到这一点?对于站点使用的版本,我在全局php.ini中将其设置为无:gyazo.com/dfffbe7f9b3a20ede97da72f1ddfc777但他们仍然会犯错误。 2016年7月24日9:47
  • @MattCowley必须为每个在plesk面板中托管的站点执行此操作。 2016年7月27日19:31
  • 1
    甚至我也跟着这个答案,开始出错
    – 索拉布
    2023年3月6日14:50
45

要解决此错误,必须编辑文件httpd.conf。在apache2handler节指令Server-Root的phpinfo中可以看到它。例如,在我的例子中是这样的-/etc/httpd/httpd.conf。打开文件httpd.conf,找到参数Open_basedir。并将其设置为无。(php_admin_value open_basedir无)

4
  • 2
    设置为“none”对我很管用——也使用Plesk接口。 2014年9月11日13:42
  • 11
    我找到了open_base目录我的配置php.ini公司(Arch Linux on Raspberry Pi和php 5) 2014年11月12日0:36
  • 2
    也在我的php.ini(也是Arch)中找到了它。只需注释掉这一行即可达到与此答案相同的效果。 2015年10月15日16:18
  • @本埃尔加只是通过评论这句话提到了作品,我只是想问一下这是否有风险 2019年3月18日2:34
14

如果你用php文件.php。您需要编辑php.ini公司查找此文件:

:定位php.ini/等/php/php.ini

并将文件的路径附加到open_base目录属性:

open_basedir=/srv/http/:/home/:/tmp/:/usr/share/pear/:/usr/share/webapps/:/etc/webapps/:/run/media/andrew/ext4/protected

1
  • 5
    这是唯一一个指向多个特定路径而不是完全跳过安全性的解决方案。 2019年12月3日9:14
7

拉拉维勒

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

仅转到文件夹引导/缓存并重命名配置.php找到你想要的任何东西并重新加载站点。

2
5

对我来说,问题是运行整个过程的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公司/错误_文档/httpdocs(httpdocs)/httpsdocs网站/…等等

您需要在域目录的conf/文件夹中创建一个vhost.conf文件,其中包含以下行:

php_value error_log/path/to/error_logphp_flag display_errors关闭php值错误_报告6143php_flag日志错误

更改第一个值以匹配实际安装(我使用了/tmp/phperrors.log)。编辑完vhost.conf文件后,使用以下命令从控制台测试配置:

apachectl配置测试…或者如果你没有apachectl(Plesk 8.6似乎没有)…/etc/init.d/httpd配置测试

最后告诉普莱斯克,你已经做出了这个改变。

/usr/local/psa/admin/bin/websrvmng-a
4

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

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

在此处输入图像描述

4

在更新和/或迁移后,我在一个wordpress网站上遇到了这个问题。

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

2
  • 你把它设置为什么值/[…]/public_html/wp-content/uploads?
    – 布雷特
    2018年10月9日21:09
  • 这对我有帮助。我有一个WP多站点安装,由于某种原因,坏站点的upload_path有一个值,而我的所有其他站点都是空的。我删除了该值,它立即生效。谢谢! 2023年9月7日12:11

如果使用ispconfig3:

转到网站部分->选项->PHP open_basedir:

在此处输入图像描述

  • 在此字段中描述了允许的路径,每个路径都是分开的带有“:”

/var/www/clients/client2/web3/image:/var/www/clientes/clients/web3/web:/var/www/。。。等等

  • 所以这里必须放置您想要访问的路径,在我的例子中是:

/var/www/clients/client2/web3/image:

  • 出现问题的原因是:

当脚本尝试访问文件系统时,例如使用include或fopen(),将检查文件的位置。当文件位于指定的目录树之外时,PHP将拒绝访问它。

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

open_basedir=无
2

您所引用的路径不正确,并且不在工作区的directoryRoot内。尝试为要访问的文件建立一个绝对路径,您现在可能正在使用相对路径。。。

1
  • 它使用的是绝对路径。它适用于除此之外的所有用户。
    – 
    2009年12月4日18:30
2

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

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

为了解决这个问题,我只是在ispconfig3的网站面板中将PHP设置为SuPHP

0

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

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

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

查看哪些用户有权访问该文件夹,哪些用户为只读,哪些用户已满。你有一个阻止写的组吗?

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

无论如何,您最终会为IUSR、IIS_IUSRS或您的应用程序池标识之一添加一个新的完整写权限-正如我所说的,这将根据您的设置和您想要的方式而有所不同,您可以在这一个上进入谷歌兔子洞(一个这样的帖子-IIS8中的IIS_IUSR和IUSR权限)对我来说,我使用anon作为我的应用程序池标识,这样我就可以逃脱惩罚机器名\IIS_IUSRS对任何临时文件夹或上传文件夹进行完全读/写。

我不需要在我的open_base目录=在php.ini。

0

除了@瑜伽士亭的回答,如果您正在使用直接管理员,然后执行以下步骤:

  1. 转到DirectAdmin的登录页面。通常,它的端口是2222。
  2. 以管理员身份登录。其用户名为管理员默认情况下。
  3. 从右侧面板上的“访问级别”中,确保您处于“管理级别”。如果不是,则改为它。
  4. 从“附加功能”部分,单击“自定义HTTPD配置”。
  5. 选择要更改的域。
  6. 在页面顶部的文本区域中输入要更改的配置。您应该考虑现有的配置文件并根据它修改值open_base目录设置在<目录>,也许你应该在相关的<目录>标签:

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

  8. 如果更改有效,您现在应该可以看到这些更改已保存到配置文件中。

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

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

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

    cp httpd.conf httpd.conf.back
  4. 现在用您选择的编辑器编辑配置文件。例如,编辑现有打开基本目录没有人。不要尝试删除东西,否则可能会导致停机。编辑后保存文件。

  5. 使用以下方法之一重新启动Apache web服务器(使用苏多如果需要):

    httpd-k优美阿帕切特尔-k优雅apache2-k优雅
  6. 如果遇到任何错误,请用备份文件替换主配置文件,然后重新启动web服务器。

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

希望能有所帮助!

0

我正在使用Apache虚拟主机-在我的windows-server上使用特定于应用程序的ini-options运行PHP的文件。因此,我使用-d日php命令的选项。

我正在设置open_base目录作为这些选项之一用于每个应用程序。

我需要将多个url设置为open_basedir,包括一个UNC-路径,而本例的语法有点难以找到。你必须用分号如果您的第一个路径以驱动器号开始,那么您可能也必须以分号开始列表。至少这对我来说是有效的。

示例:

php.exe-d open_basedir=;d: /www/applicationRoot//内部.unc.path/resource/
0

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

然后我更改php设置。

open_base目录=session.save_path=/温度/

然后它对我起了作用。

0

由于大多数人都找不到解决方案,所以这些解决方案对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中的单个文件编辑器即可编辑。如果真的有可能的话。

0

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

希望这有帮助

0

当我使用Imagick公司用于将图像转换为.avif文件格式。

$image=新Imagick();$image->readImage('input.jpeg');//此处出现错误...

解决方案是使用__总监__,如下所示:

$image->读取图像(__DIR__.'/input.jjpe');

我希望它能帮助一些人。

-1

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

-3

只需搜索

open_base目录=

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

更改之前open_base目录=

更改后;open_base目录=

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

享受;)

1
-30

修改open_base目录设置在PHP配置中(请参见运行时配置).

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

示例设置通过.ht访问如果PHP在Linux系统上作为Apache模块运行:

<DirectoryMatch“/home/sites/site81/”>php_admin_value open_basedir“/home/sites/site81/:/tmp/:/”</DirectoryMatch>
13
  • @Nikesh This在我将其放入我的.htacces并将路径更改为:/我的/cutsom/dir/。不知道为什么要这么想。 2013年1月24日17:06
  • 83
    酷,到目前为止,有12票赞成错误答案。您不能使用php管理员值在里面.ht访问文件夹.不能在.htaccess文件中使用DirectoryMatch.(什么样的安全措施会open_base目录如果它可以被禁用?) 2013年4月24日15:05
  • 21
    您不能将此内容放入您的HTACCESS!但请将其写入您的APACHE配置文件。 2013年8月23日20:00
  • 10
    将根目录包含在open_basedir中完全违背了open_basedir的目的。此解决方案仅在本质上禁用限制的意义上“有效”。
    – 马丁
    2013年10月16日21:20
  • 2
    对显示工作配置文件语法的答案进行否决,同时对共享宿主web gui屏幕截图进行否决。只有真正的php开发人员才能做到这一点。 2018年10月31日9:39

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.