2011-01-13 103 views
3

我可以從命令行運行svn命令,但不能從PHP腳本內運行。重要的是,我可以在我的Mac上運行PHP腳本,它可以很好地返回預期的數據,但是當我將它上傳到我的Linux服務器時,它將無法工作(從PHP內部...我可以從終端運行svn命令) 。我很確定這是用戶或某種權限問題。通過PHP的exec執行故障運行顛覆

我可以(命令行)運行:

svn log http://whatever.com/svn/foo 

但沒有以下工作的(分開運行......不是所有這樣在一起):

exec('svn log http://whatever.com/svn/foo'); 
exec('svn log http://whatever.com/svn/foo',$out); 
exec('/usr/bin/svn log http://whatever.com/svn/foo'); 

但是這個工程:

exec('ls'); 

我假設問題是,當我從命令行運行時,我以root身份運行,而當我運行fr om PHP我正在運行的Apache用戶(萬維網數據)?也許?有關如何能夠運行exec('svn log http://whatever.com/svn/foo ');的任何建議?

將權限更改爲777(試圖讓它工作!)沒有幫助。

+1

你得到的錯誤是什麼? – 2011-01-13 21:19:53

+0

沒有錯誤。如果我`var_dump($ out)`我在一臺機器上獲得所有的數據,而在另一臺機器上獲得一個空數組。 – Lothar 2011-01-13 22:09:18

回答

2

這裏有幾個線程,我認爲可能有幫助:

Thread 1(讀作還有更多):

$cmd = '/usr/bin/svn list --config-dir /some/place file:///var/subversion/devfoundry/ 2>&1'; 
exec($cmd, $output); 
$output = implode("\n", $output) . "\n"; 
echo $output; 

Thread 2

Subversion錯誤「svn:Can not recode string」可能是由於 區域設置爲w榮。嘗試

<?php 
    putenv('LANG=en_US.UTF-8'); 
?> 

(或任何你的首選區域) 你打電話了shell_exec()

Thread前3:PHP互動殼牌

3

可能是你可以使用svn客戶端的PHP。這裏是一個很好的 http://code.google.com/p/phpsvnclient/

+1

我試過使用它,並有混合的結果。它的舊版本(http://www.phpclasses.org/package/4270-PHP-Retrieve-files-from-an-SVN-repository-in-pure-PHP.html)實際上比這個新版本更好。我有舊版本(主要)工作,但它有一些我無法追查的錯誤,所以我嘗試了你鏈接到的新版本,並在錯誤發生後得到了一些錯誤。我希望它運作良好,但似乎沒有。 – Lothar 2011-01-13 21:12:09

3

當您運行命令行顛覆,你是作爲你自己運行它。也就是說,您是用戶登錄並運行該命令。

如果您是從網頁運行Php,那麼運行Apache httpd守護程序(根據平臺可能是「apache」,「www」,「runwww」等)的用戶。運行PHP腳本的用戶可能沒有對Subversion存儲庫的讀/寫權限。

你有解決這個的方法有兩種:

  • 經由--username--password命令行參數的用戶憑據提供程序。
  • 設置用戶使用Subversion證書運行httpd。一旦完成,它將不再需要再次完成。這樣,您的PHP代碼不包含登錄憑證。