Php 无法连接到APNS(连接超时)

Php 无法连接到APNS(连接超时),php,ios,ssl,apple-push-notifications,Php,Ios,Ssl,Apple Push Notifications,不过,我之前成功地使用raywenderlich的优秀教程向我的iPhone发送推送通知,并使用mac终端运行php脚本,现在我正试图实现同样的目标,只是现在我将push.php脚本上传到服务器上,并通过Cron Job每隔5分钟运行一次脚本,但我现在遇到了以下错误: 流\u套接字\u客户端():无法连接到ssl://gateway.sandbox.push.apple.com:2195 (连接超时) 正如我之前所说,当我在终端上运行脚本时,它工作正常。我认为问题在于服务器上的php脚本无法访问

不过,我之前成功地使用raywenderlich的优秀教程向我的iPhone发送推送通知,并使用mac终端运行php脚本,现在我正试图实现同样的目标,只是现在我将push.php脚本上传到服务器上,并通过Cron Job每隔5分钟运行一次脚本,但我现在遇到了以下错误:

流\u套接字\u客户端():无法连接到ssl://gateway.sandbox.push.apple.com:2195 (连接超时)

正如我之前所说,当我在终端上运行脚本时,它工作正常。我认为问题在于服务器上的php脚本无法访问我的推送证书。如何授予脚本对它们的访问权限?请帮忙

以下是php脚本(如果有帮助):

<?php


// Assign data into variables
$deviceToken = "e39ffc6b98f649f127d07d2d881bc9faa621a3c5d59f9647e64f6452fc37af6c";
$passphrase = "9q3n6k80";
$sound = '';
$blank = "";

$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);

// Open a connection to the APNS server
$fp = stream_socket_client(
    'ssl://gateway.sandbox.push.apple.com:2195', $err,
    $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);

if (!$fp)
    exit("Failed to connect: $err $errstr" . PHP_EOL);

echo 'Connected to APNS' . PHP_EOL;


// Create the payload body
$body['aps'] = array(
    'alert' => "mic check",
    'sound' => 'default'
    );

// Encode the payload as JSON
$payload = json_encode($body);

// 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 succesfully delivered' . PHP_EOL;

// Close the connection to the server
fclose($fp); 

“通过Cron作业每5分钟运行一次脚本”?记住苹果说“在多个通知中保持与APN的连接打开;不要反复打开和关闭连接。APNs将快速连接和断开连接视为拒绝服务攻击。您应该让连接保持打开状态,除非您知道它将在较长时间内处于空闲状态。例如,如果您每天只向用户发送一次通知,则可以每天使用新连接。“。每5分钟可能不足以触发他们的DoS过滤器,但你应该避免这种模式。对,我实际上不是每5分钟运行一次,而是每小时运行一次,但是为了调试的目的,我把它改为5分钟,这样我就不用等一个小时看它是否有效了哈哈,我只是简化了脚本,这样就更容易发现问题了。你可能还想检查你的主机和/或服务器是否出于某种原因阻止了端口。我现在正面临着完全相同的问题。我每8分钟运行一次脚本。是否可能重复“通过Cron作业每5分钟运行一次脚本”?记住苹果说“在多个通知中保持与APN的连接打开;不要反复打开和关闭连接。APNs将快速连接和断开连接视为拒绝服务攻击。您应该让连接保持打开状态,除非您知道它将在较长时间内处于空闲状态。例如,如果您每天只向用户发送一次通知,则可以每天使用新连接。“。每5分钟可能不足以触发他们的DoS过滤器,但你应该避免这种模式。对,我实际上不是每5分钟运行一次,而是每小时运行一次,但是为了调试的目的,我把它改为5分钟,这样我就不用等一个小时看它是否有效了哈哈,我只是简化了脚本,这样就更容易发现问题了。你可能还想检查你的主机和/或服务器是否出于某种原因阻止了端口。我现在正面临着完全相同的问题。我每8分钟运行一次脚本。可能重复