2016-12-18 162 views
0

我已經對這個主題做了一些廣泛的研究。但我什麼都沒發現。看來,當我運行shell_exec()它總是返回false。即使輸出是真的。PHP - Shell_exec和exec運行時返回false

PHP腳本:

$tmp1 = exec("/var/www/html/online/files/test.sh 2>&1"); 

test.sh bash腳本:

var=$(screen -ls | awk -F'[. ]' '/.onoff/ {print $1}') 
if [ -z "$var" ]; then 
    echo "false" 
else 
    echo "true" 
fi 

它測試的是一個叫 'ONOFF' 屏幕,在被跑步時運行的屏幕PID,但仍然返回false。即使我在PuTTY中使用該命令,它也會返回true。

以下是文件的權限:

[email protected]:~# ls -la /var/www/html/online 
drwxr-xr-x 3 root root 4096 Dec 18 12:34 . 
drwxr-xr-x 12 root root 4096 Dec 18 09:30 .. 
drwxr-xr-x 2 root root 4096 Dec 18 11:54 files 
-rwxr-xr-x 1 root root 221 Dec 18 04:59 index.css 
-rwxr-xr-x 1 root root 4310 Dec 18 12:55 index.php 
-rwxr-xr-x 1 root root 417 Dec 18 06:40 servers.php 
[email protected]:~# ls -la /var/www/html/online/files 
drwxr-xr-x 2 root root 4096 Dec 18 11:54 . 
drwxr-xr-x 3 root root 4096 Dec 18 12:34 .. 
-rwxr-xr-x 1 root root 115 Dec 18 11:54 test1.sh 
-rwxr-xr-x 1 root root 114 Dec 18 11:54 test.sh 

任何幫助將是不錯!

謝謝!

+1

擁有者是根,它解釋了它..在旁註中,'exec'返回false,而不是你的命令。做一個'==='檢查。 – Xorifelse

+0

即使在將所有者設置爲www數據後,它也不起作用。我應該在哪裏放一個'==='? – diamondpumpkin

回答

0

嘗試exec($command, $output, $status) 檢查輸出和狀態變量。狀態變量中的非零值是錯誤的。零就是成功。

做完這個檢查文件的所有權後,如果您仍然面臨問題,請將www-data(apache)用戶添加到文件的所有權。

exec('/var/www/html/online/files/test.sh 2>&1', $output, $status); 

print_r($output); 
echo $status; 
+0

當我使用你的建議時,他們都沒有設置。你能否舉個例子,我覺得我錯了。 – diamondpumpkin

+0

這裏是頁的輸出: 稀釋是,這裏是輸出: 輸出:數組 狀態:0 – diamondpumpkin

+0

我忘了添加代碼的東西, '輸出:數組 狀態:0' – diamondpumpkin