我在网站上的头像上传中遇到此错误。我从来没有得到过它,最近没有任何改变让我开始收到此错误...
Warning: is_writable() [function.is-writable]:
open_basedir restriction in effect.
File(/) is not within the allowed path(s):
Answers:
修改PHP配置中的open_basedir
设置(请参阅运行时配置)。
该open_basedir
设置主要用于防止特定用户的PHP脚本访问另一个用户帐户中的文件。因此,通常,您自己的帐户中的任何文件都应该可以被您自己的脚本读取。
通过.htaccess
PHP在Linux系统上是否作为Apache模块运行的示例设置:
<DirectoryMatch "/home/sites/site81/">
php_admin_value open_basedir "/home/sites/site81/:/tmp/:/"
</DirectoryMatch>
/my/cutsom/dir/
。不知道为什么会这样。
php_admin_value
在.htaccess
文件中使用。您不能在.htaccess文件中使用DirectoryMatch。(open_basedir
如果只是将其禁用,将采取什么样的安全措施?)
要解决此错误,必须编辑文件httpd.conf。在apache2handler部分的指令Server Root中的phpinfo中可以看到它的方式。例如,在我的情况下,这种方式-/etc/httpd/httpd.conf。打开文件httpd.conf,找到提到的参数open_basedir。并将其设置为无。(php_admin_value open_basedir none)
open_basedir
配置php.ini
。(使用php 5在Raspberry Pi上实现Arch Linux)
对我而言,问题是运行整个程序的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
如果使用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将拒绝访问它。
如果您正在运行PHP IIS堆栈并出现此错误,则通常是快速权限修复。
如果您自己管理Windows服务器并具有访问权限,请首先尝试以下方法:
导航到该文件夹,让您对其写入感到悲伤,然后右键单击它>打开属性>安全性。
查看哪些用户有权访问该文件夹,哪些用户具有只读权限,哪些用户具有完整权限。您是否有一个阻止写操作的组?
该修复程序将特定于您的IIS设置,您是否对特定用户IUSR或应用程序池标识使用匿名身份验证?
无论如何,您最终将为IUSR,IIS_IUSRS或您的应用程序池标识之一添加新的完全写权限-正如我说的那样,这将取决于您的设置和操作方式,您可以在此工具上放下Google兔子漏洞(一个这样的帖子-IIS8中的IIS_IUSRS和IUSR权限)对我来说,我将anon与我的应用程序池标识一起使用,以便可以随意MACHINE_NAME\IIS_IUSRS
读取或写入任何临时文件或上传内容文件夹。
我不需要open_basedir =
在php.ini中添加任何其他内容。
除了@yogihosting的答案之外,如果您使用的是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服务器。
同样,第一种解决方案是首选的解决方案,您不应在第一时间尝试第二种方法。请注意,第一种方法的优点是它可以防止保存配置错误的内容。
希望能帮助到你!
我正在使用Apache vhost -File在Windows服务器上使用特定于应用程序的ini-options运行PHP。因此,我使用php-command的-d选项。
我将每个应用程序的open_basedir设置为这些选项之一。
我需要将多个URL设置为open_basedir,包括UNC-Path,这种情况的语法有点难找。您必须用分号分隔路径,如果第一个路径以盘符开头,则可能也必须以分号开始列表。至少那对我有用。
例:
php.exe -d open_basedir=;d:/www/applicationRoot;//internal.unc.path/ressource/
只是搜索
open_basedir =
在php.ini中并禁用它。这是解决此问题的最简单的解决方案。
变更前 open_basedir =
变更后 ;open_basedir =
附言:更改后,请不要忘记重新启动服务器。
请享用 ;)