我刚刚熟悉使用Exchange Web服务(EWS)和网络上提供的指南(例如Talking SOAP with Exchange)。
我有一个测试服务器,我得到正确的响应。当我将exact same files
移动到生产服务器时,我没有得到任何响应(空白页面),并附带以下PHP注意事项:
Notice: Trying to get property of non-object in index.php on line 48
index.php第44至48行:
44 - $FindFolder->Traversal = 'Shallow';
45 - $FindFolder->FolderShape->BaseShape = 'AllProperties';
46 - $FindFolder->ParentFolderIds->DistinguishedFolderId->Id = 'root';
47 - $result = $client->FindFolder($FindFolder);
48 - $folders = $result->ResponseMessages->FindFolderResponseMessage->RootFolder->Folders->Folder;
第47行后的var_dump($client)
会返回正确的数据。但是在将Class对象转换为line 47: $result = $client->...
中的变量之后,var_dump($result)
返回NULL
(在生产服务器上但在测试服务器中充满了数据)。
我知道PHP类是区分大小写的,但这种情况对我来说似乎是正确的,这适用于测试服务器。
有什么想法吗?
更新#1
我添加了有关var_dumps的更多详细信息以跟踪问题。这些转储全部放在第47行之后:
的var_dump($ FindFolder)
object(stdClass)#2 (3) { ["Traversal"]=> string(7) "Shallow" ["FolderShape"]=>
object(stdClass)#3 (1) { ["BaseShape"]=> string(13) "AllProperties" } ["ParentFolderIds"]=>
object(stdClass)#4 (1) { ["DistinguishedFolderId"]=> object(stdClass)#5 (1) { ["Id"]=>
string(4) "root" } } }
的var_dump($客户端)
object(ExchangeNTLMSoapClient)#1 (5) { ["user":protected]=> string(6) "***hidden***"
["password":protected]=> string(8) "***hidden***" ["_soap_version"]=> int(1) ["sdl"]=>
resource(3) of type (Unknown) ["__last_request_headers"]=> array(5) { [0]=> string(12)
"Method: POST" [1]=> string(22) "Connection: Keep-Alive" [2]=> string(25) "User-Agent:
PHP-SOAP-CURL" [3]=> string(37) "Content-Type: text/xml; charset=utf-8" [4]=> string(85)
"SOAPAction: "http://schemas.microsoft.com/exchange/services/2006/messages/FindFolder"" } }
的var_dump($结果)
NULL
更新#2
可以肯定的是,我在生产服务器上测试了cURL并且它可以工作。我还注意到var_dump与测试服务器和生产服务器的细微差别:
来自测试服务器的var_dump($ client)的相关部分:
["user:protected"]
来自生产服务器的var_dump($ client)的相关部分:
["user":protected]
报价不在同一个地方。这是相关的并导致查询不连接,因此不返回数据?如果是这样,我该如何解决?
答案 0 :(得分:0)
FindFolder是否返回一个对象(例如,返回$ this)?
方法链需要返回一个对象。
http://www.talkphp.com/advanced-php-programming/1163-php5-method-chaining.html
答案 1 :(得分:0)
最后,我认为我已将此跟踪到PHP 5.3.3中的错误或使用PHP 5.3.3与Talking SOAP with Exchange中的错误
我最好的猜测是,如原始帖子的更新2中提到的受保护变量的措辞有一个错误。
运行PHP 5.1.1的服务器和另一个5.2.17的相关var_dump($client)
:
["user:protected"]
运行PHP 5.3.3的服务器的相关var_dump($client)
:
["user":protected]
所以我不得不改为使用旧版PHP的托管服务提供商。