0

我刚刚熟悉使用 Exchange Web Service (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;

var_dump($client)第47 行之后的A返回正确的数据。但是在将 Class 对象转换为 a 中的变量后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($client)

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]

引号不在同一个地方。这是否相关并导致查询无法连接,因此没有返回数据?如果是这样,我该如何解决?

4

2 回答 2

0

好吧,最后我想我已经将此追溯到 PHP 5.3.3 中的错误或使用 PHP 5.3.3 进行交换的 Talking SOAP

我最好的猜测是,在原始帖子的更新 2 中提到的受保护变量的措辞方式存在错误。

与运行 PHP 5.1.1 和另一个 5.2.17 的服务器相关var_dump($client)

["user:protected"]

与运行 PHP 5.3.3 的服务器相关var_dump($client)

["user":protected]

因此,我想我将不得不更改为使用旧版本 PHP 的托管服务提供商。

于 2012-12-21T12:19:25.717 回答
0

FindFolder 是否返回一个对象(例如 return $this)?

方法链需要返回一个对象。

http://www.talkphp.com/advanced-php-programming/1163-php5-method-chaining.html

于 2012-12-20T11:32:17.047 回答