得到一个奇怪的错误,我不知道如何修复。这是错误:
( ! ) Catchable fatal error: Argument 2 passed to GuzzleServiceClient::getCommand() must be an array, string given, called in phar://C:/wamp/www/PHPCodeLance/WebTech/Projects/MIB v2/lib/aws/aws.phar/vendor/guzzle/guzzle/src/Guzzle/Service/Client.php on line 93 and defined in phar://C:/wamp/www/PHPCodeLance/WebTech/Projects/MIB v2/lib/aws/aws.phar/vendor/guzzle/guzzle/src/Guzzle/Service/Client.php on line 113
Call Stack
# Time Memory Function Location
1 0.0009 676280 {main}( ) ..test.php:0
2 0.0557 3311632 AwsSesSesClient->send_email( ) ..test.php:30
3 0.0557 3312128 AwsCommonClientAbstractClient->__call( ) ..test.php:30
4 0.0557 3312208 GuzzleServiceClient->__call( ) ..(null):103
5 0.0557 3312296 GuzzleServiceClient->getCommand( ) ..(null):93
这是我使用的代码(直接来自AWS页面)
$client = SesClient::factory(array(
'key' => '',
'secret' => '',
'region' => 'us-east-1'
));
$response = $client->send_email(
'no-reply@amazon.com', // Source (aka From)
array('ToAddresses' => array( // Destination (aka To)
'myemail@hotmail.nl'
)),
array( // Message (short form)
'Subject.Data' => 'Email Test ' . time(),
'Body.Text.Data' => 'This is a simple test message ' . time()
)
);
// Success?
var_dump($response->isOK());
更新! !:
修复了上面的问题,现在我得到了一个SSL证书问题:
GuzzleHttpExceptionCurlException: [curl] 60: SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed [url] https://email.us-east-1.amazonaws.com/ in phar://C:/wamp/www/PHPCodeLance/WebTech/Projects/MIB v2/lib/aws/aws.phar/vendor/guzzle/guzzle/src/Guzzle/Http/Curl/CurlMulti.php on line 578
Thanks in advance
关于第一个问题的答案,请参阅使用SES发送电子邮件时出现的AWS SDK Guzzle错误
请,如果你有一个问题的解决方案,特别是一个像这样神秘的问题,把它发布给别人使用。
首先,看起来你应该在try-catch块中包含用于实例化客户端和发送电子邮件的代码,这肯定会解决可捕获的致命错误部分,并允许你的代码继续执行。
就getCommand参数问题而言,我的猜测是您对send_email()
的参数存在一些问题,这些参数向下传递到调用堆栈。在不深入研究SDK的情况下,我不知道具体传递给getCommand
的参数是什么,但是您在那里拥有调试问题所需的所有信息,因为您应该能够映射参数如何通过堆栈跟踪中显示的每个调用传递,在此过程中进行调试以验证传递给每个函数的内容是预期的。
SSL的问题在于CURL不再捆绑CA证书,您需要设置适当的CA信息。
解决方案1(更改PHP.ini):
- 从http://curl.haxx.se/docs/caextract.html下载CA bundle (cacert.pem)
- 将其放在本地系统(例如:C:xamppcacert.pem) 打开php.ini文件
设置旋度。Ca_info选项指向cacert.pem
的位置。Example: curl.ca_info="C:xamppcacert.pem"
重新启动Apache
解决方案2(在每次CURL调用之前设置选项)
- 从http://curl.haxx.se/docs/caextract.html下载CA bundle (cacert.pem)
- 将其放在本地系统(例如:C:xamppcacert.pem)
-
编写以下代码:
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, TRUE); curl_setopt ($ch, CURLOPT_CAINFO, "pathtocacert.pem");
来源:http://tumblr.wehavefaces.net/post/52114563111/environment-windows-xampp-curl-library