我正在将几个Wordpress博客迁移到AWS的过程中,并遇到了文件权限问题,在过去的几个小时里,这些文件权限已经成功挫败了我。
最简单的fopen调用总是失败,“未能打开stream:权限被拒绝”:
<?php $handle = fopen('test.txt', 'w') or die('Can\'t open file'); ?>
我已经尝试/检查了以下内容
有什么我错过了可能造成这个? 我怀疑我一直在盯着这个这么久,我错过了一些明显的东西。
更新:应用womble的build议后,我开始认为这个问题比恶劣的权限或PHP错误configuration更加恶毒。 我设法得到上面的代码写出一个文件,但是,即使PHP脚本执行正确的用户和组生成的文件所有权和组被设置为Apache的。 如果我从命令行执行相同的testing脚本,则发出的文件具有正确的权限。 这使我相信这是我使用mod_suexec的一个问题。
编辑:我使用getmyuid()和getmygid()是不正确的,因为它们只返回脚本文件的用户和组,而不是它运行的权限。 更正确的方法是使用这样的comething:
<?php echo exec('ps -up '.getmypid()); ?>
好问题 – 显示你已经完成了你的功课。
我想不出任何“明显的”,你没有检查,所以我只能给你一些更高级的debuggingbuild议。
strace决定,看看究竟在做什么。 fopen(..., 'r')来三重检查你的目录树的权限是否正确。 su给有问题的用户,并尝试在命令行上做一些事情。 如果这样做,那么你知道你的脚本没有运行你认为的权限。 getfacl是要使用的工具)。 这是不常见的,但每过一段时间,他们就会跳起来,撕掉你的脸。 如果你有ACL,使用setfacl -x来validation它们是不必要的。 尝试/usr/sbin/apachectl -t -D DUMP_MODULES
检查所有模块是否启用
如果你得到
Warning: SuexecUserGroup directive requires SUEXEC wrapper.
parsing度
这种警告通常是由suexec包装上的无效权限引起的,应该是:
# ls -la /usr/sbin/suexec -rwsr-xr-x 1 root root 12064 2008-04-17 01:15 /usr/sbin/suexec
如果权限或所有权与上述示例不同,请使用以下命令更正它们:
# chown root:root /usr/sbin/suexec # chmod 4755 /usr/sbin/suexec
这个修复之后,一切都很好。
检查apache的home文件夹是什么(通常是/var/www ),并把文件放在这个文件夹下,最后给予必要的权限。 把php temp upload文件夹改成这个。 这是为我工作。
2件事。