![](/img/trans.png)
[英]Running shell script from terminal works but doesn't work when running from PHP shell_exec
[英]When using php exec() to run shell scripts, one script works (which simply does git status) and one doesn't (which does git checkout). How come?
我正在嘗試設置一個基於Web的門戶,通過它可以通過簡單地點擊后端面板來檢查我們的Git存儲庫的不同分支。
所以目前,我的/ var / www / devportal包含index.php , status.sh和checkout.sh
在index.php中,我執行以下操作:
$repo = $_GET['repo'];
$command = 'sh status.sh ' . $repo;
$output = exec($command);
echo "<pre>$output</pre>";
status.sh的內容是:
#!/bin/bash -e
if [ $# -ne 1 ]
then
echo "Usage: `basename $0` <repo name>"
exit 1
fi
cd /var/www/$1
git status
這很好用。 PHP中回顯的輸出顯示了/ var / www / proj中當前分支的狀態。
現在當我嘗試用checkout.sh做同樣的事情(這次傳遞2個parms,第二個是分支的名稱來結賬)時,他們的內容是:
#!/bin/bash -e
if [ $# -ne 2 ]
then
echo "Usage: `basename $0` <repo name> <branch name>"
exit 1
fi
cd /var/www/$1
git checkout $2
它不起作用。 它不僅不起作用,我不會因為錯誤消息而蹲下。 沒有輸出。 我知道checkout.sh腳本工作正常,因為當我回顯通過PHP的exec命令發送的命令時,復制那個確切的東西並通過以root身份登錄的終端運行它,它工作正常,檢查並返回新激活的分支的名稱。
任何有關這方面的提示將不勝感激。 我的盒子非常標准,Ubuntu 10.04並運行Apache2。
謝謝!
exec使用命令標准輸出填充$ output,以顯示錯誤(如果有)在命令末尾添加“2>&1”。
exec也可以告訴你返回值,試試:
$output = exec($command, $array_output, $ret_val);
var_dump($ret_val);
echo "<pre>$output</pre>";
$repo = $_GET['repo'];
$command = 'sh status.sh ' . $repo;
$output = exec($command);
哦耶穌的男人。 不要這樣做。 escapeshellarg存在是有原因的
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.