2015-10-07 74 views
3

我有一個GIT倉庫,我使用PHP腳本從主分支中提取並更新服務器上的文件。這只是測試它的簡單解決方案。我想在github上添加一個webhook,在成功推送後發送回調,這樣我就可以從這個回購中獲得回報。PHP:當通過HTTP和命令行運行腳本時產生不同的結果

腳本運行在命令行

  • 從HTTP請求中左右逢源

    所不同的是,當我從HTTP運行它,它不拉新的變化,只是顯示它是最新的,即使我100%確定回購有新的變化也不會做任何事情。輸出來自GIT命令,所以我確定它可以正常工作,並且Apache有適當的權限來運行腳本文件和其中使用的命令。

    當我通過命令行(通過相同的腳本或只是乾淨的git命令)運行它時,一切正常,腳本會引發新的更改並顯示標準的GIT輸出。

    PHP代碼:

    echo "Pulling changes from master branch...\n"; 
    $result = shell_exec('cd /var/git-test && git reset --hard HEAD && git pull'); 
    if($result !== null){ 
        echo $result; 
    }else{ 
        echo $result; 
        echo "Error in Git pull comand"; 
    } 
    

    我該如何解決呢?

  • +1

    您是否嘗試過使用apache用戶手動運行腳本? –

    +1

    你怎麼知道它「顯示它是最新的」? – markus

    +0

    爲了防止shell_exec應該被禁用的警告,啓用它並不安全。 – markus

    回答

    1

    sudo -u www-data php deploy.php顯示www-data用戶沒有在github上註冊的ssh密鑰,並且無法執行pull操作。我無法切換到萬維網數據用戶,所以我生成了他的密鑰而無需切換到它,就像運行腳本sudo -u www-data ssh-keygen -t rsa一樣。在github上註冊他的密鑰後,它就像魅力一樣。

    同時專業提示! shell_exec()不會顯示當我在命令行中以另一個用戶身份運行腳本時可見的所有輸出。這真是令人困惑,花了我很多時間來弄清楚錯誤發生在哪裏。

    相關問題