2012-05-31 56 views
0

我們有一個PHP XML解析腳本,可以將照片上傳到像/content/images/2012/05/31/%object_id%/這樣的文件夾結構。此解析器主要作爲DirectAdmin cronjob運行。我們遇到了很多問題,讓文件夾權限正確,以允許在該目錄中上傳兩個cronjob作爲通過瀏覽器運行解析器。cron和瀏覽器的權限被拒絕mkdir

根據print_r(posix_getpwuid(fileowner($directory)));該目錄的所有者與get_current_user()相同。不過,當通過瀏覽器運行腳本時,我會收到:Warning: mkdir() [function.mkdir]: Permission denied。當它作爲cron作業運行時,它工作正常。

所有文件夾都有chmod 0777,並且創建新文件夾;

mkdir($path,0777,true); 

當然,我們對上傳和/或刪除文件本身也有同樣的權限問題。

有什麼辦法可以啓用所有的文件操作作爲cron作業和瀏覽器?

我們使用PHP版本5.2.17運行Linux。

回答

1

兩人認爲要注意:get_current_user獲取.php文件(即腳本)的所有者,但不是運行php腳本的用戶的名稱。總是這些是不同的,因爲文件將由您(普通用戶)上傳,並且php/apache將作爲不同的用戶(通常稱爲「apache」或「www」)運行。您需要這兩個中的後者。從PHP手冊建議片斷得到這個是:

$processUser = posix_getpwuid(posix_geteuid()); 
print $processUser['name']; 

(http://php.net/manual/en/function.get-current-user.php - 見註釋)


然而,爲了解決你目前的問題,我的強烈建議是運行cron作爲php/apache運行的同一個用戶(檢查crontab上的man page) - 用戶應該是上面代碼片段中的那個,CHOWN文件和目錄添加到同一用戶(他們當前是root用戶)以及您和FTP客戶端共享的組。然後確保用戶和組具有讀取和寫入權限,以便您也可以從ftp進行編輯。確保您在腳本創建時更改了直接存儲(775)和文件(644)的權限。

另外請注意,如果您是mkdir(),那麼上面的目錄也必須具有用戶的寫入權限(這可能實際上是您最初的問題,爲什麼只有root/cron可以在那裏寫入)。

+0

謝謝!確實;當我使用你的代碼片段時,我發現腳本以「apache」運行。我們目前正在構建一個解決方法,以便最終腳本作爲cron作業運行,並將其作爲另一個用戶運行。我們還將研究相關文件夾的適當權利和組織 – DaFrenk