2011-10-11 104 views
9

我開發了一些代碼,它使用PHP的NuSoap類來調用soap web服務。我使用NuSoap而不是PHP 5本地類,主要是因爲我不想在共享Web服務器上安裝此代碼時添加額外的先決條件。該代碼工作正常,我的機器上:使用NuSoap在本地機器上工作,但不在服務器上

require DOCROOT.'modules/nbn_species_dict_sync/lib/nusoap.php'; 
$client = new nusoap_client('http://www.nbnws.net/ws_3_5/GatewayWebService?wsdl', true); 
$query1 = '<TaxonReportingCategoryListRequest xmlns="http://www.nbnws.net/TaxonReportingCategory" registrationKey="'.$key.'"></TaxonReportingCategoryListRequest>'; 
$response = $client->call('GetTaxonReportingCategoryList', $query1); 

當我把這個建立一個虛擬服務器上,而不是在本地運行它,最後一行只是掛起約10秒鐘,然後PHP炸彈了。沒有異常提出,並沒有PHP錯誤(我嘗試使用try..catch和set_error_handler只是爲了確保)。

我的第一反應是,這可能是服務器上運行的防火牆阻止傳出的請求,但我成功地在其他地方使用cUrl請求,我很確定沒有防火牆在這裏運行。調用$ client-> use_curl雖然對NuSoap調用沒有任何影響,但它仍然不起作用。

任何想法,爲什麼這可能會發生將不勝感激。

+0

最有可能的memory_limit設置在本地主機和服務器上不同,並且服務器耗盡內存。 –

+0

感謝您的建議。我已經將內存限制提高到了96M,但是這隻有在我還調用$ client-> setGlobalDebugLevel(0)時纔有效。即使調試關閉,64M也不夠。我剛剛檢查過,Web服務正在響應~2MB的數據。在這種情況下,內存使用率如此之高似乎很奇怪。 – Johnvb

+0

我也遇到類似的問題。我有一個web服務的5MB數據響應,nuSOAP想佔用超過256mb的內存來處理。 – Travis

回答

0

你能確保WWW的數據有(權限)訪問

DOCROOT.'modules/nbn_species_dict_sync/lib/nusoap.php' ? 

或者你可以嘗試的NuSOAP複製到另一個目錄?

或者你可以嘗試以root用戶身份從命令提示符運行它嗎?

順便說一句,你得到了什麼樣的錯誤/警告?

2

如果您沒有排除故障的想法,並且假設您在Linux上運行,則可以使用strace來查看系統調用。這些電話可能看起來很神祕,但有時你可以看到系統稱之爲掛機,然後Google呼叫更多信息。

strace -p processid 

或者,如果你想跟蹤你的腳本執行的開始到結束,並轉儲到輸出文件:

strace -o trace.txt myscript.php 

Here is a good strace tutorial

相關問題