2012-11-05 129 views
3

我有問題,我需要通過一個PHP腳本CHOWN:操作不允許

,所以我通過這個下面的命令做到這一點,其中1002的用戶ID來設置文件所有者的許可系統中的不同用戶系統。

file_put_contents($filename, $content); 
system("chown 1002 " . $filename . ""); 

但是我得到了製作這個錯誤唯一的服務器(測試服務器正常工作)

chown: changing ownership of `/var/spool/asterisk/06h12m7.call': 
Operation not permitted 
+0

請將其中一個答案標記爲解決方案,以便將此問題標記爲已關閉。如果它們中沒有一個提供解決方案,則提供附加信息。謝謝。 – mattc

+0

如果腳本通過cron運行,它將以root用戶身份運行,這將有能力更改文件所有權。 (非超級用戶喜歡''apache'用戶不。)希望這可以幫助一些人! –

回答

4

既然你標記這個問題爲Linux我假設你使用Apache服務器。在生產服務器Apache過程,該公司擁有的所有PHP進程,通常是由不屬於root userapache user或其它用戶執行。

記住,你要做的是使用chown函數(它將以apache用戶身份執行)來更改不屬於你的文件的所有者。 (是的,您只能將所有者更改爲您擁有的文件)。

你看,引述PHP手冊中,chown功能嘗試改變所有者:

嘗試將文件filename的所有者更改爲用戶的用戶。只有超級用戶可以更改文件的所有者。

在通常你生產服務器正在運行,如用戶目錄模式,這意味着你一定會是你的主目錄中的文件,像/home/yourusername/public_html正因爲如此,在/var目錄中的文件只是出來的你的觸及範圍(它們通常由root擁有),這就是爲什麼你不能chown。

我希望它有幫助。乾杯!

4

你只能改變文件的擁有者,如果你是root用戶(或運行以root權限)。

嘗試將文件文件名的所有者更改爲用戶用戶。只有超級用戶可以更改文件的所有者。 http://www.php.net/manual/en/function.chown.php

最有可能在測試服務器上運行PHP腳本已經apache進程擁有的文件,或者你用root權限運行它,這是不是你的生產服務器上的情況。我絕對不會建議在具有root權限的生產環境中運行。

一些變通,可根據情況幫助,您可以使用chgrp功能改變文件的「組」設置。任何擁有該文件寫入權限的人都可以這樣做。您也可以將文件寫入到使用chmod功能的人,雖然這可能是危險的。鏈接到兩個功能如下: