分页: 1 / 1

[ 已解决 ] PHP 写入文件 权限 错误

发表于 : 2010-09-15 18:08
VolcanoX
下面的写入文件时,出现权限错误

代码: 全选

$wline=fopen("./test2.txt","a+t");                                                                                     
$line="它-024";
fwrite($wline,$line);
fclose($wline);

代码: 全选

fopen(./test2.txt): failed to open stream: Permission denied
public_html的权限:

代码: 全选

drwxr-xr-x 41 king users 4.0K 2010-09-15 public_html/
public_html文件夹下面的php文件权限:

代码: 全选

-rwxr-xr-x 1 king users  268 2010-07-18 test.php
文件 text2.txt 新建的/已存在的都试过的,问题一样!

google 了只找到一些关于 apache 进程运行用户的一些提示

我的 apache 是使用 sudo 启动的,普通用户下面 pstree 可以看到 httpd 的进程

代码: 全选

     ├─httpd───7*[httpd]
用户所在组:

代码: 全选

 ~ · groups 
lp wheel log dbus hal network video audio optical floppy storage users
希望各位兄台给些帮助,非常感谢!!!

Re: PHP 写入文件 权限 错误

发表于 : 2010-09-15 20:17
wonchar
第一行:$wline=fopen("./test2.txt","a+t");
改成:$wline = fopen("../test2.txt","a+t");
理由:定位到上一级目录用"../"而不是"./";

(假如你的test2.txt的目录是$path)然后用:sudo chmod 755 -R $path,用于修改文件夹的权限.应该可以搞定.

Re: PHP 写入文件 权限 错误

发表于 : 2010-09-16 21:04
VolcanoX
wonchar 兄,我的意思是,在当前文件夹下面建立文件,不是上一级目录。

我刚才 把目录 权限改为 777 之后,就没有错误了,但是这样好像安全性不行。

按理,755 权限下面应该可以新建文件吧。这和 httpd 进程有没有关系

我使用 sudo 运行的 apache ,在当前用户创建的进程中可以看到 apache,就说明 httpd 是以当前

用户 运行的进程,public_html 目录的权限又是 755 可以写,为何不能创建文件。

并且如果文件存在的化,就没有任何错误,错就错在,没有权限创建文件。

非常感谢!!!

:em01

Re: PHP 写入文件 权限 错误

发表于 : 2010-09-17 14:16
linjiework
你以 root 权限启动 apache ,并不代表 PHP 就是以 root 权限执行了。

出于安全方面的考虑,apache 默认会以 nobody 的身份运行程序,具体运行身份请查看你的 apache 设置。如果 PHP 是以 nobody 运行,当然无权限在当前目录下创建文件了。

Re: PHP 写入文件 权限 错误

发表于 : 2010-09-17 23:09
VolcanoX
linjiework 兄,我的 http.conf 里面的用户/组为:

代码: 全选

User http                                                                                                          
Group http
我将用户改为 king.users 之后,就可以临时解决问题,但是还是有些疑问

请问,像 web 主机提供商是使用怎样的方法设置的,他们应该不会每添加一个用户,都

修改配置文件吧,这样每次都要重启服务,是不是有更好的方法,谢谢!

Re: PHP 写入文件 权限 错误

发表于 : 2010-09-17 23:17
VolcanoX
你以 root 权限启动 apache ,并不代表 PHP 就是以 root 权限执行了
请问 php 运行,也许有权限 问题吗,它不和 apache 一起的吗?

Re: PHP 写入文件 权限 错误

发表于 : 2010-09-18 9:03
linjiework
将用户改为 king.users 不是临时解决,而是终极解决问题的方法。

apache 只允许设置一个用户和组,所有程序都使用这个用户的权限,所以不存在你说的“每添加一个用户,都修改配置文件”这个问题。

至于web 主机提供商如何保证不同用户的程序安全,这个我还真不知道。以我的知识来判断,提供商可以通过用户和组的权限配置,来保证 web 主机用户无权删除其它用户数据,但不能保证 web 主机用户浏览其它用户数据。也许 apache 有额外的模块来保证不同虚拟主机的用户无法访问对方,很抱歉,我的知识有限,对此不了解。

在 linux 下,任何程序运行都是有权限问题的。一个程序,它可以设置它的子进程(或者它调用的其它进程)的运行权限。也就是说,如果你以 root 权限运行 apache ,那么 apache 可以以 root 的权限来调用 php ,也可以以你设置的 king.users 来调用 php 。出于安全原因, apache 会以 king.users 这个身份来调用 php 。
如果你会 linux 下的 C 编程,可参考函数 setuid 和 setgid 。

Re: PHP 写入文件 权限 错误

发表于 : 2010-09-18 21:44
VolcanoX
谢谢,阿呆!

学习了!