雖然這可能工作時,你被SSH進入你的服務器。網絡服務器用戶很可能與您登錄的用戶不同。 Web服務器在Linux機器上運行的常用用戶ID /組是http,www-data,nobody和其他。
從這一點你有兩個選擇。
您可以確保你正試圖從PHP運行腳本(和它的所有孩子,如果有的話)能夠通過服務器用戶運行。
您可以修改您的/ etc/sudoers文件,該文件僅允許web服務器用戶訪問該文件以提升該腳本的權限。 (注意:這可能會打開安全漏洞,所以要小心)。
要找出你的服務器上運行哪些用戶爲執行此:ps aux
以輸出列表看看輸出的第一列,這一進程在運行的用戶。這裏有我的箱子一個我的網絡服務器(Nginx的)的摘錄:
www-data 26852 0.0 0.0 29768 3840 ? S Jun04 0:50 nginx: worker process
你可以看到nginx的與用戶WWW的數據在這裏運行。您也可以使用grep執行該命令,以幫助您更快地找到過程。 Grep只會顯示與您發送的內容相匹配的行。這裏有一個例子:ps aux | grep nginx
好了,現在你知道web服務器運行的是什麼用戶,讓我們試着讓該用戶訪問腳本。假設您的腳本是foo
,位於/usr/local/bin
。你會做以下命令:
chown www-data /usr/local/bin/foo
上的文件更改所有權後嘗試從PHP頁面重新運行你的命令,看看它是否工作。
爲了完整起見,我還說過你可以給你的網絡服務器用戶sudo權限。要做到這一點,你需要下面的行添加到您的/etc/sudoers
文件的底部:
www-data ALL= NOPASSWD: /usr/local/bin/foo
然後你了shell_exec命令可以切換到這一點:
shell_exec('sudo /usr/local/bin/foo');
請記住這樣做會讓你的網絡服務器用戶運行腳本root
這是在各種情況下非常危險。但是,相機可能需要提升權限才能工作。我不確定您要調用的相機設置的權限要求是什麼。
祝你好運。希望這可以幫助!
您將所有輸出重定向到/ dev/null,因此不會返回任何內容。 – 2012-03-13 16:21:33
好的......現在我刪除了/ dev/null部分......錯誤消失了.... bt照相機還沒有開始在服務器(arch)上...... – 2012-03-13 16:24:48
Web服務器用戶是否擁有執行該文件的權限? – 2012-03-13 16:43:59