苹果iOS推送通知的PHP脚本错误
Posted
技术标签:
【中文标题】苹果iOS推送通知的PHP脚本错误【英文标题】:PHP script error for apple iOS push notification 【发布时间】:2013-03-27 21:58:17 【问题描述】:我有一个 ios 应用程序,当我在我的网站上写新帖子时,我使用苹果推送通知来发送通知,所以有 php 脚本具有 ssl 证书,当我发送推送通知时它通常会发送但出现错误日志我收到此错误:
[27-Mar-2013 15:30:44] PHP 致命错误:最长执行时间为 30 第 56 行 /home3/basiphon/public_html/Push.php 中超过的秒数
推送通知(通常)发送成功,但我在错误日志中收到此错误,有时推送通知未发送,我也收到此错误到另一个类似这样的错误:
[27-Mar-2013 05:45:04] PHP 警告:stream_socket_client() [function.stream-socket-client]: SSL:/home3/basiphon/public_html/Push.php 中的连接超时 第 56 行 [27-Mar-2013 05:45:04] PHP 警告:stream_socket_client() [function.stream-socket-client]: 无法在 /home3/basiphon/public_html/Push.php 中启用加密 第 56 行 [27-Mar-2013 05:45:04] PHP 警告:stream_socket_client() [function.stream-socket-client]: 无法连接到 ssl://gateway.push.apple.com:2195(未知错误) 在 /home3/basiphon/public_html/Push.php 第 56 行
请看我的 push.php 脚本代码:
`// 打开到 APNS 服务器的连接
$fp = stream_socket_client(
$url, $err,
$errstr, 2, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
if (!$fp)
exit("Failed to connect: $err $errstr" . PHP_EOL);
echo 'Connected to APNS' . PHP_EOL;
// Build the binary notification
$msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;
// Send it to the server
$result = fwrite($fp, $msg, strlen($msg));
if (!$result)
echo 'Message not delivered' . PHP_EOL;
else
echo 'Message successfully delivered111' . PHP_EOL;
$query_update="update wp_apns_messages set status='delivered',delivery=NOW() where pid='$pid'";
$res_update=mysql_query($query_update) or die(mysql_error());
// Close the connection to the server
fclose($fp);`
【问题讨论】:
请在此处以文本形式发布相关的 PHP 代码,有一大堆原因导致屏幕截图不是一个好主意。 好的,谢谢汤姆,这里是我的push.php脚本的完整代码,我将编辑帖子并放置脚本代码的文本 我应该提到,您需要编辑您的问题,而不是发表评论,使用代码。 我编辑了问题,我不能放完整的代码,但我添加了脚本的最后一部分。 【参考方案1】:我之前在运行 www.raywenderlich.com 上的推送通知教程提供的 PHP 脚本时遇到了同样的错误。
确保您没有运行任何防火墙来干扰您与 APN 的连接。
如果您遵循上述网站的教程,请确保在终端中运行以下命令时收到响应而不是错误:
$ openssl s_client -connect gateway.sandbox.push.apple.com:2195
-cert PushChatCert.pem -key PushChatKey.pem
Enter pass phrase for PushChatKey.pem:
【讨论】:
您好,非常感谢您的回答,您的意思是我的 Mac 中的防火墙?它已经开始了,我将在我的终端中尝试此代码..但这会影响我的 PushChatCert 吗? 我的脚本代码有错误吗?我需要编辑一些东西吗? 不!以上终端代码不会影响您的 PushChatCert;上面的代码使用您的证书+密钥连接到 APN。如果它有效,你应该得到一堆输出。否则,您将收到错误消息。此外,可能是任何干扰您的连接的网络防火墙。我相信这是你的问题,否则很可能是你的证书/密钥。 我运行这段代码出错了,我更新了问题,你可以看到错误,今天我也没有收到推送通知。 现在我在术语 nail 中收到此错误:-bash: Enter: command not found,所以我为 -cert PushChatCert.pem 输入了什么 .. 这是生产 certifcate.pem 还是开发证书.pem?以上是关于苹果iOS推送通知的PHP脚本错误的主要内容,如果未能解决你的问题,请参考以下文章