2010-03-17 80 views
1

我在這裏有一個很好的問題:)如何調試用PHP編寫的Web服務?

我需要調試我用PHP編寫的Web服務。它的客戶端是用C#編寫的。
經過幾天的搜索,我意識到這不是一件容易的事。至少似乎沒有人知道正確的解決方案。

究竟是什麼問題呢?
我們有2個流行的PHP調試庫:來自NuSphere和XDebug擴展的PHP調試器。
問題是它們都是通過URL查詢字符串或cookie的幫助來控制的。例如,要啓用PHP Debugger調試,您需要將?DBGSESSID = xxx參數添加到您的URL或具有DBGSESSID cookie。
但是,當您的Web服務從外部客戶端調用時,客戶端沒有cookie並且不會添加DBGSESSID url參數。那麼我們如何在這種情況下進行調試?

PS。我不想寫日誌文件,查看請求和響應頭/數據或類似的東西。我想要正常的逐步調試和斷點。

有人嗎?

回答

3

好吧,我回答自己。 如果我們使用PHPEd & DBG,那麼我們可以使用魔術函數DebugBreak()。

確保PHPED & PHP DBG Listenere正在運行,寫

DebugBreak('[email protected]'); 
在werbservice代碼

的任何地方,從客戶端,瞧撥打電話! - 在調試模式下,您處於該行的PHPEd中!

+0

非常好,這非常有幫助。效果很好。我正在測試一個PayPal IPN腳本並需要它。 – pcunite 2013-03-29 21:27:53

0

我使用插件Poster幫助調試我的PHP web服務

編輯:

找到一個更好的工具來調試Web服務:Advanced REST client Application

這是一個瀏覽器插件,偉大工程測試所有種類使用REST的Web服務

+0

您是否將此用於基於SOAP的web服務或Restful服務? – nepsdotin 2012-10-11 06:32:02

+0

@nepsdotin,我不知道,我從來不使用SOAP,它們對移動應用程序非常不利。 – 2012-10-11 21:48:00

0

您可以將數據寫入日誌文件(meh)

或在響應頭中輸出調試信息(如果客戶端可以查看它們)。但就使用斷點而言,你可能不走運。

您也可以查看本地計算機上的連接劫持(類似於Firefox AddOn Tamper Data),您可以在其中斷開請求並添加url參數。

0

嘗試SoapUI手動發出請求並獲取詳細響應。不確定您是否可以僞造cookie,但是您可以控制端點,從而控制URL的範圍。

1

您可以將xdebug.remote_autostart設置爲1以始終調試(不需要任何參數)。這可能只限於<位置>或<文件>指令。

或者只是使用var_export記錄一些調試信息(使用Zend_Log或Pear Log如果你想要一個通用庫)。

快速和骯髒的方法是:

file_put_contents('/tmp/log1.txt', 
    var_export(array($_REQUEST, $something), true)); 
+0

啊,'xdebug.remote_autostart'就是我想要記住的。 – Dathan 2010-03-17 20:37:25

0

我似乎記得您可以配置NuSphere的產品,以自動嘗試使用或不使用DBGSESSID參數(在查詢字符串或cookie)來連接到調試監聽器。儘管如此,我並不樂觀。但是,您可以通過執行以下操作來獲得要查找的效果。這可能比你想要的更加人工密集。

  1. 設置某種HTTP查詢/響應監聽器。
  2. 針對來自客戶端的Web服務執行所需的訪問。
  3. 手動重新發出這些請求,追加相應的DBGSESSID

對於多一點的初始設置,但較低的摩擦調試後:

  1. 配置您的客戶端來訪問一個備用網址。
  2. 設置一個代理來監聽該URL(對於調試,我已經看到Privoxy被推薦,儘管我個人沒有經驗)。
  3. 配置代理的所有請求轉發到真正的Web服務,附加適當的DBGSESSID參數或包括餅乾