它总是让我感到困惑,如果一个文件夹具有读写权限,Apache + PHP就无法写入它.您必须结束授予apache执行权限才能在该文件夹中写入文件.为什么?
例如,使用chmod 664(其中构建组包含apache用户),apache将无法在此文件夹中写入临时缓存文件:
drw-rw-r-- 5 jenkins build 4096 Jun 15 13:05 cache
Run Code Online (Sandbox Code Playgroud)
而使用chmod 774 apache将能够将新文件写入该文件夹:
drwxrwxr-- 5 jenkins build 4096 Jun 29 11:44 cache
Run Code Online (Sandbox Code Playgroud) 我试图让一个PHP文件写入驻留在同一文件夹中的文件.无论是php文件和它试图写有自己的权限设置为777的文件(其Linux服务器)以及它们所在的文件夹.每当我叫fopen()函数与"W"或"W +"模式,该函数只返回false.它在我学校的网络服务器上,所以我无法获得root权限,可以将文件的所有者更改为与apache相同的用户.有谁知道什么是错的?
更新:作为测试,我使用此代码:
$handle = fopen("test.txt", 'w');
if($handle === FALSE)
echo "\nfailed";
else
echo "\nsuccess";
fclose($handle);
Run Code Online (Sandbox Code Playgroud)
现在启用错误报告的输出是:
Warning: fopen(test.txt) [function.fopen]: failed to open stream: Permission denied in /<snip>/public_html/test.php on line 58
failed
Warning: fclose(): supplied argument is not a valid stream resource in /<snip>/public_html/test.php on line 63
Run Code Online (Sandbox Code Playgroud)
上面是我从php网站上为fileperms()函数复制的一些代码,它检查文本文件的权限,并报告-rwxrwxrwx
相关文件的ls -al输出是
ls -al *test*
-rwxrwxrwx 1 mag5 30 1475 Dec 9 00:02 test.php*
-rwxrwxrwx 1 mag5 30 8 Dec 8 14:54 test.txt*
Run Code Online (Sandbox Code Playgroud)
我也不确定这是否重要,但我的学校使用的是一个名为Andrew File系统的东西(http://en.wikipedia.org/wiki/Andrew_File_System).