2016-03-28 50 views
1

我有一個PHP網頁由Apache服務器正在運行一個bash腳本,它存儲在/var/www/myweb/並呼籲index.php運行從PHP網頁

現在我想調用/home/me/腳本從PHP叫test.sh網頁 。它所做的就是上創建一個文件1 /home/me/

test.sh:

#!/bin/bash 


touch file1 
~                          
~                          
~                          
~ 

index.php,我試圖調用腳本

的index.php:

if ($_GET['run']) 
        { 
              exec('/home/me/test.sh'); 
        } 

不幸的是,這是行不通的,而且這似乎是權限問題的原因。我繼續嘗試從/var/www/myweb/

/home/me/test.sh 

運行這個命令,我得到這個錯誤:

touch: cannot touch ‘file1’: Permission denied

有沒有辦法解決這個問題?

+0

取決於您的系統apache2服務器使用用戶「www-data」或「http」或其他設置。 test.sh必須是可執行的並且具有正確的權限。 –

+0

你有沒有在腳本中使用'cd'或'chdir()'? 'ls -ld/var/www/myweb/home/me'返回什麼?你的代碼可能不會執行你認爲它的地方。 – Amadan

+0

'drwxr-xr-x 29 me me 4096 Mar 27 21:02/home/me/ drwxr-xr-x 4 root www-data 4096 Mar 27 20:22/var/www/html/ ' –

回答

1

如果你不改變目錄,你是而不是試圖觸摸/home/me/file1,但/var/www/myweb/file1。但是,/var/www/myweb允許rootrwx; www-data組到r-x以及其他所有人到r-x。當Apache運行它時,它正在運行它作爲www-data,在www-data組中;它獲得組權限r-x,禁止創建新文件。當你運行它時,它運行的是me,據推測不在www-data組中,該組使用最後一組權限:仍然r-x,仍然無法寫入。

理想情況下,你會希望提供完整的文件路徑被創建,以避免對其中的文件系統,你是,而且位置都希望擁有的權限混亂drwxrwxr-x(或drwxrwsr-x)爲me和組www-data