2009-11-25 39 views
2

由於我無法繼續我的項目工作,現在有些事情讓我感到非常緊張。我已經切換到另一臺計算機,不能讓PHP和svn可執行一起很好地工作:)PHP:在exec()中使用SVN子命令和選項會導致「分段錯誤」?

$output = ""; 
$value = ""; 
exec("/opt/subversion/bin/svn info --username something --password something --non-interactive <REPO_URL> 2>&1", $output, $value); 

var_dump($output); 
var_dump($value); 

輸出:

array(0) { } int(139) 

139 =分割的錯,但它並沒有太大的幫助因爲我不知道可能導致它的原因。在終端中直接運行相同的代碼就像魅力一樣,但如果PHP試圖通過exec()來執行相同的操作,則會出現問題。

如果我去掉認證,我會得到正確的輸出(認證請求)。

修改Subversion可執行文件到777似乎沒有任何區別。

如果它是任何使用的,它的Mac OS X 10.5.8,PHP 5.2.11和Apache 2.2.13

回答

1

exec()不與<與>重定向操作符的工作:這些都是一個殼的功能。簡單的解決方法是改爲撥打system()

+0

到目前爲止,它在每個系統上工作得非常好,代碼實際上是商業應用程序的一部分。 Ommiting重定向輸出不會影響任何內容。該問題只出現在我的本地計算機上。 – 2009-11-25 23:48:05

+0

我無法編輯我的評論:我已經嘗試過'system()',但它返回一個空字符串作爲輸出,'int(139)'作爲返回值,幾乎與'exec()'相同。 – 2009-11-26 00:05:10

0

幾個問題:

  1. 什麼是你正在使用的「帶出的認證」的準確代碼PHP的?

  2. 您的用戶名或密碼是否包含可能會導致shell或php混淆的「有趣」字符? (引號,反引號等)

+0

1.「strip out」=如果我刪除身份驗證=如果我嘗試不提供用戶名和密碼='「/ opt/subversion/bin/svn info - 非交互式 2>&1' 2.用戶名和密碼只包含字母和數字 – 2009-11-30 16:19:26

+0

同樣,請注意,這是一個孤立的問題,只出現在一個系統上,相同的代碼可以在許多不同的Web服務器上平滑運行。 – 2009-11-30 16:21:59

+0

這可能是一個服務器配置問題,也許你應該試試這個問題serverfault.com。 – svec 2009-12-02 16:11:42

1

我的PHP應用程序從Windows服務器移動到UNIX後,我也有類似的問題。更具體地說,我通過shell_exec()運行的幾個svn命令返回空輸出。

在我的情況下,問題與.svn目錄和包含文件的UNIX權限有關。我的svn結帳由一個標準用戶帳戶擁有。但是,當PHP腳本(通過Apache進程)運行shell_exec()命令時,它使用不具有對.svn目錄及其中重要文件(例​​如.svn)的寫入訪問權限的其他帳戶(nobody:nobody)執行此操作。鎖文件)。

對於我來說,解決方案是使用chown命令來創建與Apache進程相同的組所擁有的.svn目錄/文件(chown -R:nobody .svn)。

+0

我沒有簽出文件 - 只是在存儲庫上使用「svn info」,並且我一直沒有輸出(儘管我將輸出複製粘貼到終端中)。設置自定義配置目錄沒有任何好處,所以我放棄了保存/讀取svn的配置數據的問題。簡單地說,svn info沒有輸出,而「svn --version」,例如,返回輸出很好: - / – 2010-01-01 03:14:03