【发布时间】:2011-03-01 04:22:16
【问题描述】:
我需要开发一个 PHP 类来与 Apple 服务器进行通信,以便进行推送通知 (APNS)。我有证书 (.pem),我尝试按照 Internet 上的各种教程进行操作,但尝试使用流套接字连接到 ssl://gateway.sandbox.push.apple.com:2195 时仍然出错:
$apnsHost = 'gateway.sandbox.push.apple.com';
$apnsPort = 2195;
$apnsCert = 'apns-dev.pem';
$streamContext = stream_context_create();
stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert);
$apns = stream_socket_client('ssl://'.$apnsHost.':'.$apnsPort, $error, $errorString, 2,
STREAM_CLIENT_CONNECT, $streamContext);
此 URL 上的 telnet 有效,因此端口 2195 已打开。 Openssl 在 PHP 上被激活,因为我得到了带有 phpinfo() 的“Registered Stream Socket Transports : tcp, udp, ssl, sslv3, sslv2, tls”。 我的证书读得很清楚(PHP is_readable(certif.pem) 在文件上返回 true)
还有什么可以在 Apache 或 PHP 中激活以使其工作吗?
【问题讨论】:
-
另外,你提到了一个错误。究竟是什么错误?
-
是否有更详细的错误显示? (检查您的错误报告级别)
-
正如我在下面写的,错误如下: [function.stream-socket-client]: Unable to set local cert chain file `editus_dev_push.pem'; [function.stream-socket-client]:无法创建 SSL 句柄 [function.stream-socket-client]:无法启用加密 [function.stream-socket-client]:无法连接到 ssl://gateway。 sandbox.push.apple.com:2195(未知错误)
-
确保 apache 有权访问 .pem
-
我想是的,我在 Windows XP 下运行我的开发并且文件不是只读的。