当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 8 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : [ 已解决 ] PHP 写入文件 权限 错误
帖子发表于 : 2010-09-15 18:08 
头像

注册: 2008-06-15 15:00
帖子: 82
送出感谢: 0 次
接收感谢: 1
下面的写入文件时,出现权限错误
代码:
$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


希望各位兄台给些帮助,非常感谢!!!


最后由 VolcanoX 编辑于 2010-09-19 19:46,总共编辑了 1 次

页首
 用户资料  
 
2 楼 
 文章标题 : Re: PHP 写入文件 权限 错误
帖子发表于 : 2010-09-15 20:17 

注册: 2010-09-15 19:43
帖子: 3
送出感谢: 0 次
接收感谢: 0 次
第一行:$wline=fopen("./test2.txt","a+t");
改成:$wline = fopen("../test2.txt","a+t");
理由:定位到上一级目录用"../"而不是"./";

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


页首
 用户资料  
 
3 楼 
 文章标题 : Re: PHP 写入文件 权限 错误
帖子发表于 : 2010-09-16 21:04 
头像

注册: 2008-06-15 15:00
帖子: 82
送出感谢: 0 次
接收感谢: 1
wonchar 兄,我的意思是,在当前文件夹下面建立文件,不是上一级目录。

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

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

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

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

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

非常感谢!!!

:em01


页首
 用户资料  
 
4 楼 
 文章标题 : Re: PHP 写入文件 权限 错误
帖子发表于 : 2010-09-17 14:16 
头像

注册: 2009-07-07 19:52
帖子: 240
送出感谢: 0 次
接收感谢: 0 次
你以 root 权限启动 apache ,并不代表 PHP 就是以 root 权限执行了。

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


_________________
阿呆 : 天下第一呆!


页首
 用户资料  
 
5 楼 
 文章标题 : Re: PHP 写入文件 权限 错误
帖子发表于 : 2010-09-17 23:09 
头像

注册: 2008-06-15 15:00
帖子: 82
送出感谢: 0 次
接收感谢: 1
linjiework 兄,我的 http.conf 里面的用户/组为:

代码:
User http                                                                                                         
Group http


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

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

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


页首
 用户资料  
 
6 楼 
 文章标题 : Re: PHP 写入文件 权限 错误
帖子发表于 : 2010-09-17 23:17 
头像

注册: 2008-06-15 15:00
帖子: 82
送出感谢: 0 次
接收感谢: 1
引用:
你以 root 权限启动 apache ,并不代表 PHP 就是以 root 权限执行了


请问 php 运行,也许有权限 问题吗,它不和 apache 一起的吗?


页首
 用户资料  
 
7 楼 
 文章标题 : Re: PHP 写入文件 权限 错误
帖子发表于 : 2010-09-18 9:03 
头像

注册: 2009-07-07 19:52
帖子: 240
送出感谢: 0 次
接收感谢: 0 次
将用户改为 king.users 不是临时解决,而是终极解决问题的方法。

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

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

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


_________________
阿呆 : 天下第一呆!


页首
 用户资料  
 
8 楼 
 文章标题 : Re: PHP 写入文件 权限 错误
帖子发表于 : 2010-09-18 21:44 
头像

注册: 2008-06-15 15:00
帖子: 82
送出感谢: 0 次
接收感谢: 1
谢谢,阿呆!

学习了!


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 8 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译