2013-04-25 87 views
0

我有下面的PHP函數,它應該遞歸地chmod其中一個dir在我的服務器上。遞歸Chmod不工作PHP

由於某種原因,它不工作 - 我知道該目錄的路徑是正確的,因爲我用一個快速腳本測試它,只是打印出該目錄內的文件。

$root_tmp = '/tmp/mixtape2'; 
chmod_r($root_tmp); 

function chmod_r($Path) { 
$dp = opendir($Path); 
while($File = readdir($dp)) { 
    if($File != "." AND $File != "..") { 
    if(is_dir($File)){ 
     chmod($File, 0777); 
     chmod_r($Path."/".$File); 
    }else{ 
     chmod($Path."/".$File, 0777); 
    } 
    } 
closedir($dp); 
} 

任何想法?

+0

只是一個想法...這是否有關係,我正在處理服務器的/ tmp目錄的目錄? 所以,我想知道如果這是一個權限問題? 例如,如果我在一個終端,我必須'sudo'?如果是這樣,我怎麼從一個PHP腳本去解決這個問題? – 2013-04-25 10:03:53

+0

好吧,我剛剛檢查過,執行這個腳本的文件的所有者是'nginx',我試圖chmod的文件/文件夾的用戶是'root'。 我想我需要改變用戶? 不幸的是,這對我來說都是新鮮的,所以我不知道該從哪裏去 – 2013-04-25 10:55:54

回答

1
chmod($Path.'/'.$File, 0777); 

你必須把完整路徑和chmod

+0

感謝您的快速回復... 所以,目前我通過它$ dir $ root_tmp這是相對於哪裏函數正在運行。 我把它改成了'$ root_tmp ='/ tmp/mixtape2',但它仍然不能正常工作。 mixtape2目錄中有子文件夾是否重要? – 2013-04-25 09:44:12

+0

這是什麼意思'不工作'?這不是設置chmod或什麼的? use var_dump(chmod(..)); 另外,從文檔:「當啓用安全模式時,PHP會檢查您要操作的文件或目錄是否與正在執行的腳本具有相同的UID(所有者)。此外,您不能設置SUID, SGID和粘性位。「 – 2013-04-25 10:03:23

+0

是的,它沒有設置chmod。 如果我添加'var_dump',那麼它給了我'布爾(假)<路徑/文件名>' 我想這可能是一個用戶權限問題,根據我對原始問題的評論 – 2013-04-25 10:12:28

0

你的PHP腳本由Web服務器,它很可能有您的系統上它自己的用戶執行。由於您嘗試chmod()的文件屬於root用戶,因此您無權chmod它們。您需要首先進入文件系統,並將這些文件分配給正確的用戶和組。

+0

感謝您的答覆。 ..我剛剛搜索谷歌並遇到'chown'功能。 我試過了一個標準的chown($ root_tmp,'nginx');'在我的腦海裏應該把用戶改成前面提到的執行文件的用戶。 但是,這沒有奏效。 然後我也試過'exec('chown nginx/tmp/mixtape2');'這也沒用。 我認爲這是由於我從網絡服務器用戶運行這些腳本。 任何指向哪裏可以從這裏? – 2013-04-25 11:07:16

+0

您需要實際登錄服務器,並使用文件管理器更改這些文件,使用命令行。 「chown -R nginx:nginx FILENAME」應該可以做到。 – Borniet 2013-04-25 11:09:56

+0

問題在於,這是一個tmp目錄,每次我們在我們的網站上運行某個功能時都會創建文件。 通過命令行做到這一點只會「chown」現在存在的文件......任何新創建的文件都將由「root」創建,不是嗎? 這就是爲什麼我正在尋找一個PHP解決方案,因爲我打算建立一個chown的,chmod的功能,然後解除鏈接的文件。 – 2013-04-25 11:22:58