2012-03-03 61 views
2

我知道有過類似的問題,但他們不解決我的問題......PHP的exec(SVN提交)掛

從回購(工作正常)檢查出來的文件夾後。 從jquery調用一個方法在php中執行以下操作。

exec ('svn cleanup '.$checkout_dir); 
session_write_close(); //Some suggestion that was supposed to help but doesn't 
exec ('svn commit -m "SAVE DITAMAP" '.$file); 

這些將輸出以下內容: 清理命令USER_WORKSPACE/0A8288 使用svn commit -m 「SAVE DITAMAP」 USER_WORKSPACE/0A8288/map.ditamap

1)的第一行(EXEC('清理命令「)......執行罰款 2),只要我打電話SVN然後提交我的服務器掛起,一切去地獄

Apache的錯誤日誌顯示此錯誤: [聲明]兒童3424:等待240 4個工作線程更多的秒數 完成。

我沒有使用php_svn模塊,因爲我無法在windows上編譯它。

有人知道這裏發生了什麼嗎?我可以從終端窗口執行完全相同的cmd,它執行得很好。

+0

其中的stdout/stderr的打算? – mindandmedia 2012-03-03 21:25:01

+0

:/我不知道,我只是需要它來執行命令,我是否需要抓住它的輸出?即使我做了一個系統($ cmd),凍結的時候什麼都沒有了 – Kayla 2012-03-03 21:29:45

+0

這實際上是調用jquery的exec,對吧?不是PHP的exec()。 – mindandmedia 2012-03-03 21:35:09

回答

2

因爲我找不到jQuery的任何文檔exec(),我認爲這是調用php。我從documentation頁拷貝了這個文件:

當從apache php腳本中調用exec()時,確保照顧stdout,stderr和stdin(如下例所示)。如果你忘記了這一點,並且你的shell命令產生輸出,sh和apache deamons可能永遠不會返回(它們通常會在幾分鐘後超時)。從調用網頁腳本似乎不會返回任何數據。

如果你想開始一個繼續獨立於apache運行的php進程(使用不同的父pid),請使用nohub。示例:

exec('nohup php process.php> process.out 2> process.err </dev/null &');

希望它有幫助

+0

啊謝謝,我會給這個鏡頭,感謝您的調查 – Kayla 2012-03-03 21:42:00

+0

好吧,所以這不是問題。 – Kayla 2012-03-04 03:43:26

+0

但你開始處理標準錯誤時是否發現了你的問題? – mindandmedia 2012-03-04 19:44:38

1

好的,我發現了這個問題。

它實際上與運行後臺的exec沒有任何關係,尤其是因爲一個文件提交不需要很多時間。

問題是,提交期望--username和 - 密碼沒有顯示出來,只是導致apache掛起。

爲了解決這個問題,我更改了我安裝svn的文件夾中的svnserve.conf,並將其更改爲允許非auth用戶寫入訪問權限。

我不認爲你通常要做到這一點,但我的網站上已經驗證用戶名和登入時傳遞。

另外,您可以

+0

謝謝!這也解決了我的問題。 – MrDBA 2014-08-25 23:25:48