2010-06-01 62 views
3

我有兩個腳本。通過瀏覽器從PHP腳本調用svn更新不起作用

  1. 運行的更新,並調用了shell_exec( 'SVN更新'),並了shell_exec( 'SVN ST')
  2. 運行的mysqldump了shell_exec( '的mysqldump PARAMS')

的SVN腳本不是運行更新命令,svn st打印結果,但不是svn update

我試圖聲明參數時調用svn更新例如 'svn更新'。 dir。 '--username myuser --password mypasswd --non-interactive'; - 仍然沒有 玩大部分參數

如果這是與二進制文件/權限/組相關的東西,我沒有看到它。 mysqldump命令正常工作,正在生成一個文件,爲什麼svn不更新文件系統?

請不要建議在PHP中使用核心SVN類。這不是一個選項,我沒有完全控制服務器,並且該模塊不可用。

感謝您的幫助,

-hbt

PS:重要的事情在這裏提及。當通過命令行調用時,腳本工作。只有通過Web瀏覽器調用時纔會失敗。

+0

您確定在從web調用'shell_exec('svn update')'的結果爲空時瀏覽器嗎?很可能是權限問題(svn工作目錄和http進程的用戶不同),但在這種情況下,應該出現「svn:無法打開文件」.svn/lock':Permission denied「等錯誤。 – 2010-06-01 07:25:01

+0

您是否已經嘗試捕獲輸出並將其轉儲到屏幕上/在調試時查看輸出?即。 '$ output = shell_exec('svn update ...');的print_r($輸出);'。你確定你沒有忘記把文件夾作爲變量引用(因爲給出的例子包含dir而不是$ dir,除非dir被定義爲一個命名常量)。 – wimvds 2010-06-01 07:25:41

+0

@alexander 確實發佈了許可。這是.svn目錄。 svn update命令試圖在那裏寫東西。 感謝您的幫助 – hbt 2010-06-02 10:58:07

回答

1

好的。我知道了。 這是權限問題。 .svn目錄必須具有正確的權限,因爲svn update命令使用這些目錄來寫入內容。

所以! ---確保你運行的所有搭配chmod命令,須藤或根----

  1. 運行上的.svn目錄在chmod 777
  2. 通過命令行運行SVN更新
  3. 調用腳本

如果沒有。您必須對所有.svn目錄遞歸運行chmod 777,然後運行另一個svn更新

什麼都沒有?

確保你沒有這兩個SVN客戶 在我的情況下,由UI使用的svn客戶端從SVN(命令行)不同 如果您有兩個客戶,確保它們都運行同一版本 或更新您的腳本以直接致電客戶。

什麼都沒有?

運行在chmod 777 -R * SVN更新 ,然後再試一次

如果你可以把它與另一組權限的工作,請讓我知道。我知道777並不理想,但我不能用更低的東西來工作。

再次感謝你們。

0

這可能是權限問題:通過Web瀏覽器調用的腳本以不同於svn工作目錄的所有者的用戶名運行,因此它具有隻讀訪問權限。只讀訪問應該足夠執行svn status,但不適用於svn update(儘管在這種情況下應該有一個錯誤,如「svn:無法打開文件'.svn/lock':Permission denied」)。

+0

沒有錯誤,但有權限修復。在下面發佈答案。 謝謝! – hbt 2010-06-02 11:00:22

1

您是否試過PECLsvn extension?您無需爲此使用shell_exec

+0

不幸的是,svn擴展在服務器上不可用。 – hbt 2010-06-02 10:59:47

1

得到標準錯誤的返回值使用:

shell_exec('2>&1 svn update') 

如果你把2>&1在結束它不起作用

1

是的,問題出在.svn文件的權限目錄。

確保它有針對PHP運行在用戶正確的權限(在我的情況下,它是阿帕奇)和chmod它775

3

我也遇到了同樣的問題,但甚至沒有權限解決它。

基於其他一些意見在這裏,我所做的:

<?php 
echo shell_exec('2>&1 svn update /path/to/checked/out/directory/ --non-interactive'); 

我便起身傾倒入我的瀏覽器錯誤:

svn: warning: Can't open file '/root/.subversion/servers': Permission denied 
svn: OPTIONS of 'http://my.svn.server/svn/project/trunk': authorization failed: Could not authenticate to server: rejected Basic challenge (http://my.svn.server) 

不知道爲什麼我的Web服務器用戶嘗試訪問/ root,但我通過在svn up命令中添加--config-dir來修復了問題,但沒有更改任何權限:

<?php 
echo shell_exec('2>&1 svn update /path/to/checked/out/directory/ --non-interactive --config-dir /path/to/my/home/.subversion'); 

*請注意,/path/to/my/home/.subversion的存在是因爲初始簽出是在命令行執行的