我在我网站上的头像上传时遇到此错误。我以前从来没有得过它,最近没有任何改变让我开始收到这个错误......
Warning: is_writable() [function.is-writable]:
open_basedir restriction in effect.
File(/) is not within the allowed path(s):
答案 0 :(得分:88)
修改主机帐户中的open_basedir设置并将其设置为none。找到Plesk / cPanel的“PHP设置”区域下给出的open_basedir设置。从那里给出的下拉列表中将其设置为“none”。 我在Plesk小组图片中展示了它们。
答案 1 :(得分:35)
要解决此错误,您必须编辑httpd.conf文件。 之前的方法可以在apache2handler section指令Server Root中的phpinfo中看到。 例如,在我的情况下这样 - / etc / httpd / httpd.conf。 打开文件httpd.conf,找到open_basedir参数的提及。并将其设置为无。 ( php_admin_value open_basedir none )
答案 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/
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
答案 3 :(得分: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 :(得分:2)
您引用的路径是incorect,而不是工作区的directoryRoot。尝试构建您要访问的文件的绝对路径,现在您可能正在使用相对路径......
答案 5 :(得分:2)
如果你遇到ispconfig3的这种问题并且出现了这样的错误
open_basedir限制生效。 文件(/ var / www / clients / client7 / web15)不在允许范围内 路径(S):.........
要解决它(在我的情况下),只需在网站的ispconfig3面板中将PHP设置为SuPHP
希望它可以帮助某人:)
答案 6 :(得分:2)
在更新和/或移动后,我的一个wordpress网站遇到了这个问题:)
在数据库表'wp_options'中检查'upload_path'并正确编辑...
答案 7 :(得分:1)
如果使用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将拒绝访问它。
答案 8 :(得分:0)
如果您正在运行 PHP IIS堆栈,并且出现此错误,则通常是快速权限修复。
如果您自己管理Windows服务器并具有访问权限,请首先尝试以下方法:
导航到使您悲伤的文件夹,然后右键单击它>打开属性>安全。
查看哪些用户有权访问该文件夹,哪些用户具有只读权限,哪些用户具有完整权限。您是否有一个阻止写操作的组?
此修复程序将特定于您的IIS设置,您是否对特定用户IUSR或应用程序池标识使用匿名身份验证?
无论如何,您最终将为IUSR,IIS_IUSRS或您的应用程序池标识之一添加新的完全写入权限-正如我说的那样,这将取决于您的设置和您想要的方式做到这一点,您可以在这个谷歌兔子洞上走(一个这样的帖子-IIS_IUSRS and IUSR permissions in IIS8)。对我来说,我将anon与我的应用程序池标识一起使用,这样我就可以完全阅读并MACHINE_NAME\IIS_IUSRS
/ write在任何临时或上载文件夹上。
我不需要在php.ini的open_basedir =
中添加任何其他内容。
答案 9 :(得分:0)
除了@yogihosting's answer,如果您使用的是 DirectAdmin ,请按照以下步骤操作:
admin
。在页面顶部的文本区域中输入要更改的配置。您应该考虑现有的配置文件并基于该文件修改值。例如,如果您看到open_basedir
内设置了<Directory>
,也许您应该将更改包含在相关的<Directory>
标记中:
<Directory "/path/to/directory">
php_admin_value open_basedir none
</Directory>
进行必要的更改后,单击“保存”按钮。
但是,还有另一种编辑配置文件的方式:
警告:请小心,使用以下步骤需要您自担风险,因为这可能会导致错误或导致停机。推荐的方法是前一种,因为它可以防止您不正确地修改配置文件并向您显示错误。
/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服务器。
同样,第一个解决方案是首选的解决方案,您不应在第一时间尝试第二种方法。请注意,第一种方法的优点是可以防止保存配置错误的内容。
希望有帮助!
答案 10 :(得分:0)
我正在使用Apache vhost -文件在Windows服务器上运行带有应用程序特定ini-options的PHP。因此,我使用php-command的 -d 选项。
我将每个应用程序的 open_basedir 设置为这些选项之一。
我需要将多个URL设置为open_basedir,包括 UNC路径,这种情况的语法有点难找。您必须使用分号分隔路径,如果第一个路径以盘符开头,则可能也必须以分号开头。至少那对我有用。
示例:
php.exe -d open_basedir=;d:/www/applicationRoot;//internal.unc.path/ressource/
答案 11 :(得分:0)
我在 Directadmin 面板上上传了我的 codeigniter 项目。我遇到了同样的错误。
然后我更改了 php 设置。
open_basedir = session.save_path = ./temp/
然后它对我有用。
答案 12 :(得分:0)
编辑位于主目录中的 php.ini 或 .user.ini
open_basedir = none
答案 13 :(得分:-1)
只需搜索
在php.ini中open_basedir =
并禁用它。这是解决此问题的最简单的解决方案。
更改前open_basedir =
更改后;open_basedir =
P.s-更改后不要忘记重新启动服务器。
享受;)
答案 14 :(得分:-1)
检查 plesk 中的 \httpdocs\bootstrap\cache\config.php 文件,看看是否有一些不需要的路径。
答案 15 :(得分:-12)
修改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>