我一直在敲打我的腦袋相當長一段時間的,因爲現在這個...PHP:文件的寫權限
我想我的虛擬服務器(CentOS的7上安裝MyBB的論壇,Apache HTTP服務器, PHP 5.4.3),我遇到了文件權限問題。 MyBB需要兩個文件可寫,其中一個是config.php
,第二個是settings.php
,它們都在目錄inc
中。
我設置的權限上這兩個文件爲666我寫了一個簡單的測試PHP頁面模仿的能力的方式MyBB的測試,以寫:
<?php
echo('config: ');
$configwritable = @fopen('forum/inc/config.php', 'w');
if ($configwritable) {
echo('yes');
} else {
echo('no');
}
echo('<br/>');
echo('settings: ');
$configwritable = @fopen('forum/inc/settings.php', 'w');
if ($configwritable) {
echo('yes');
} else {
echo('no');
}
?>
頁輸出
config: no
settings: yes
但如果我列出的文件,它們顯示出這樣的
[email protected]# ls -l forum/inc/config.php forum/inc/settings.php
-rw-rw-rw-. 1 krkavec krkavec 0 2. říj 22.49 forum/inc/config.php
-rw-rw-rw-. 1 krkavec krkavec 0 2. říj 22.51 forum/inc/settings.php
這怎麼可能?這兩個文件屬於同一用戶,同一組,具有相同的大小(零),在同一個目錄中,具有相同的權限,幾乎具有相同的修改時間(相差兩分鐘),幾乎除了其他所有內容他們的名字是相同的。
爲了讓事情更不可思議,我試圖玩弄刪除並重新創建文件,觀看:
1:刪除這兩個文件
[email protected]# rm -f forum/inc/config.php forum/inc/settings.php
和頁面輸出:
config: no
settings: no
這是可以的,因爲inc
目錄不應該是可寫的。
2:創建settings.php
[email protected]# F=forum/inc/settings.php ; touch $F ; chown krkavec:krkavec $F ; chmod 666 $F
[email protected]# ls -l forum/inc/settings.php forum/inc/config.php
ls: cannot access forum/inc/config.php: No such file or directory
-rw-rw-rw-. 1 krkavec krkavec 0 2. říj 23.15 forum/inc/settings.php
和頁面輸出:
config: no
settings: yes
這是完全正常和預期 - 該文件是存在的,並且具有可寫權限。
3:創建config.php
[email protected]# F=forum/inc/config.php ; touch $F ; chown krkavec:krkavec $F ; chmod 666 $F
[email protected]# ls -l forum/inc/settings.php forum/inc/config.php
-rw-rw-rw-. 1 krkavec krkavec 0 2. říj 23.23 forum/inc/config.php
-rw-rw-rw-. 1 krkavec krkavec 0 2. říj 23.15 forum/inc/settings.php
和頁面輸出:
config: no
settings: yes
BAM!我完全希望配置是可寫的。
任何幫助,非常感謝。
EDIT:我根據馬克·B的和drew010的建議
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
echo('config var_dump: ');
var_dump(stat('forum/inc/config.php'));
echo('<br/>config: ');
$configwritable = fopen('forum/inc/config.php', 'w');
if ($configwritable) {
echo('yes');
} else {
echo('no');
}
echo('<br/>');
echo('settings var_dump: ');
var_dump(stat('forum/inc/settings.php'));
echo('<br/>settings: ');
$configwritable2 = fopen('forum/inc/settings.php', 'w');
if ($configwritable2) {
echo('yes');
} else {
echo('no');
}
?>
以及頁的輸出(與存在兩個文件)修改的測試頁是:
config var_dump: array(26) { [0]=> int(64768) [1]=> int(19155212) [2]=> int(33206) [3]=> int(1) [4]=> int(1000) [5]=> int(1000) [6]=> int(0) [7]=> int(0) [8]=> int(1443821772) [9]=> int(1443821772) [10]=> int(1443821772) [11]=> int(4096) [12]=> int(0) ["dev"]=> int(64768) ["ino"]=> int(19155212) ["mode"]=> int(33206) ["nlink"]=> int(1) ["uid"]=> int(1000) ["gid"]=> int(1000) ["rdev"]=> int(0) ["size"]=> int(0) ["atime"]=> int(1443821772) ["mtime"]=> int(1443821772) ["ctime"]=> int(1443821772) ["blksize"]=> int(4096) ["blocks"]=> int(0) }
config:
Warning: fopen(forum/inc/config.php): failed to open stream: Permission denied in /var/www/html/test.php on line 8
no
settings var_dump: array(26) { [0]=> int(64768) [1]=> int(19155069) [2]=> int(33206) [3]=> int(1) [4]=> int(1000) [5]=> int(1000) [6]=> int(0) [7]=> int(0) [8]=> int(1443821763) [9]=> int(1443823158) [10]=> int(1443823158) [11]=> int(4096) [12]=> int(0) ["dev"]=> int(64768) ["ino"]=> int(19155069) ["mode"]=> int(33206) ["nlink"]=> int(1) ["uid"]=> int(1000) ["gid"]=> int(1000) ["rdev"]=> int(0) ["size"]=> int(0) ["atime"]=> int(1443821763) ["mtime"]=> int(1443823158) ["ctime"]=> int(1443823158) ["blksize"]=> int(4096) ["blocks"]=> int(0) }
settings: yes
您是否測試了另一個變量名?例如'configwritable2'?另外,省略@ -sign。 – Jan
開始調試。 'var_dump(stat('forum/inc/config.php'))',並且備份文件系統鏈,直到事情開始有意義。 –
第一步:刪除@標誌 – Michael