php在linux下目录权限的问题

我用的是红旗linux7桌面版,php代码如下:<?header("Content-type:text/html;charset=utf-8");if(!is_dir('... 我用的是红旗linux7桌面版,php代码如下:

<?
header("Content-type:text/html;charset=utf-8");
if(! is_dir('f')){
mkdir('f');
chmod('f',777);
}
$dom = new DomDocument('1.0','utf-8');
$user = $dom->createElement('user');
$dom->appendChild($user);
$name = $dom->createElement('name');
$user->appendChild($name);
$name_value = $dom->createTextNode('1212里红');
$name->appendChild($name_value);
$file = $dom->saveXML();
file_put_contents('f/xml.xml',$file);
echo '<hr />';
$user = simplexml_load_file('f/xml.xml');
echo $user->name;
?>
运行产生错误提示如下:
Warning: file_put_contents(f/xml.xml) [function.file-put-contents]: failed to open stream: Permission denied in /usr/local/apache2/htdocs/2.phtml on line 15

Warning: simplexml_load_file() [function.simplexml-load-file]: I/O warning : failed to load external entity "f/xml.xml" in /usr/local/apache2/htdocs/2.phtml on line 17
但能产生f目录,其权限是使用高级权限

将chmod('f',777)改成chmod('f',744)后,再删掉之前产生的f目录,刷新页面,正常了!能产生xml文件,也能读取其内容,xml.xml权限为 所有者:可读写,群组:可读,其他:可读,可执行选项没有勾选,f文件夹和xml文件所有者是:daemon,群组是:daemon。
问题1:777不是最高的权限吗?为什么改成744就正常了?
问题2:改成744后,产生的f文件夹和xml文件所有者是:daemon,群组是:daemon,可是我并没有创建daemon这个用户和deamon这个群组啊?怎么出来的?
问题3:改成744后,我再将$name_value = $dom->createTextNode('1212里红')改为$name_value = $dom->createTextNode('修改xml文件'),刷新页面,没有错误,发现xml文件也能被修改。这是不是说明我现在是以daemon这个身份去执行这个php程序啊?前面提到过这个xml文件的权限,只有所有者才能读写,其他只能读,如果我将这个程序放到服务器上,然后我再打开这个页面,那我是以什么身份去执行这个php程序呢?还是daemon吗?是不是就会有错误?我想要任何人都能读写这个xml文件怎么办?
展开
 我来答
jiangtao9999
2009-06-16 · TA获得超过1.2万个赞
知道大有可为答主
回答量:1.2万
采纳率:44%
帮助的人:8206万
展开全部
http 服务器程序跑的 php 代码,所以这个文件的所有者是 http 服务器所跑的用户名和组名。

所以你新建的文件为 daemon 所有者,群组是 daemon 是正确的。因为他是 http 服务器程序建立的,自然所有者为 http 服务器程序所运行的所有者。

之所以 http 服务器程序不跑 root 或者某个现实用户的 ID ,那是安全考虑。不然你的 php 代码被黑,你的整个系统,或者某个用户就不保了。

从这个来看,红旗的服务器程序是用 daemon 用户跑的。最安全的办法是每个服务都单独跑一个用户 ID ,这个 ID 没有任何权限,也不加入其他的组从而保证系统绝对安全,好像 RHEL/SUSE 都是这么跑到。
阳光上的桥
推荐于2016-04-05 · 知道合伙人软件行家
阳光上的桥
知道合伙人软件行家
采纳数:21423 获赞数:65813
网盘是个好东东,可以对话和传文件

向TA提问 私信TA
展开全部
chmod('f',777)以及chmod('f',744)都是错的,这些授权方式的结果是什么,你要慢慢去推算,不是一下能说出来的。

赋予所有权限的语句是:
chmod('f',0777);

注意和你的区别:前面多了一个0,有一个0才表示是8进制,才是正确的授权,不相信的话,你测试一下下面的PHP:
<?php
echo 0777;
?>
看看输出的是511,也就是要chmod('f',511)才是授予所有的权限。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
黄逸代霞绮
2019-02-26 · TA获得超过3551个赞
知道大有可为答主
回答量:3067
采纳率:35%
帮助的人:151万
展开全部
1、apache
有自己的运行用户,这个用户被
linux
的权限管理系统控制。
2、apache
可以设置只能读写
www
目录的数据,不能出去。
这就是
linux
最基本的安全所在。
————————————————————————
x的,虚拟主机?别做梦了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
swg0110
2009-06-17 · TA获得超过469个赞
知道小有建树答主
回答量:1074
采纳率:0%
帮助的人:628万
展开全部
ma,de

我也在弄Ubuntu,linux真难搞,不是一般小菜鸟玩的。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式