2015-01-04 161 views
2

我在這裏有一個主要的頭痛。基本上我有一個腳本,它使用肥皂服務來檢索有關貨物的詳細信息。使用xampp在本地運行腳本完美無誤地工作,但是在我的客戶端實際生產服務器上有時會起作用,有時它會引發異常,說明它無法解析wsdl文件或無法連接到主機。PHP肥皂客戶端隨機錯誤

每次我得到這些錯誤,我去檢查服務實際上正在運行,每次我都這樣做,這很好。

我試過設置在腳本文件的頂部以下選項:

ini_set('soap.wsdl_cache_enabled',0); 
ini_set('soap.wsdl_cache_ttl',0); 
libxml_disable_entity_loader(false); 

我已經注意到的是,如果我得到超過三個例外腳本執行期間拋出的服務器將返回500內部錯誤。有沒有人有什麼建議可能會導致這些問題?

以下是錯誤消息之一,我會添加更多,因爲我重新測試腳本:

SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://api.ukmail.com/Services/UKMAuthenticationServices/UKMAuthenticationService.svc?wsdl' : failed to load external entity "https://api.ukmail.com/Services/UKMAuthenticationServices/UKMAuthenticationService.svc?wsdl 

SoapFault exception: [HTTP] Error Fetching http headers 

服務器已經啓用的OpenSSL所以這不應該是一個問題。

剛剛嘗試下載並在本地使用wsdl文件,結果相同。到目前爲止,我幾乎沒有選擇這個選項。

+0

我們可以看到這兩種錯誤類型中的每一種的整體編輯到問題中嗎?這些SOAP錯誤是否在XML封套中? – halfer 2015-01-04 14:41:58

+1

我已經添加了我得到的第一個執行選項。我現在再次運行腳本以查看是否可以生成其他腳本。 – CelestialDog 2015-01-04 14:46:51

+0

腳本可以在沒有SSL的情況下臨時運行,看看是否有問題? – halfer 2015-01-04 14:48:11

回答

0

我最終放棄了PHP內置的soap客戶端,並決定嘗試通過curl發送和接收請求,這些請求實際上比內置函數的運行速度奇怪得多,但經過如此多的查詢後,我仍然以500內部服務器錯誤。我最終不得不打破這個過程,以便只在需要的時候才以20個塊的形式查詢服務。

+0

令人沮喪。我剛剛遇到這個以及升級到PHP 5.5.27後。把我拉上牆,然後回來。有趣的是,這也是UKmail,我試圖讓這個工作,我來到這裏尋找無法加載實體錯誤。這在5.2上沒有錯誤地工作 – elfling 2015-07-31 21:47:40

0

只是你知道,這個錯誤很可能是由於端口沒有被指定。 這就是爲什麼它在更新版本的PHP/Soap上產生這種特殊行爲的原因。

$soapClient = new SoapClient('https://api.ukmail.com:443/Services/UKMAuthenticationServices/UKMAuthenticationService.svc?wsdl', $params); 

它將偵聽端口80,而不是443的響應添加:443的URL解決了這個問題對我來說。

產生的500錯誤是SOAP PHP錯誤解析WSDL:無法加載外部實體。