0

从昨晚开始,我一直在寻找答案,但似乎找不到遇到完全相同问题的人。类似但不是。我正在尝试通过 stream_socket_client 连接到 Apples APNS。我在 LAMP 环境中工作,并打开了 2195 端口。我的 errorString 说(权限被拒绝)。我的麻烦是找到发布了很多关于此错误的信息的人。我从错误报告中得到的警告是警告:stream_socket_client():无法连接到 ssl://gateway.sandbox.push.apple.com:2195(权限被拒绝)

至于好东西。我写了一个类来处理这个推送通知。这是设置连接的未完成方法。

 public function setConnection() {

        $apnsHost = 'gateway.sandbox.push.apple.com';
        $apnsPort = 2195;
        $apnsCert = '../model/apns-dev.pem';

        $streamContext = stream_context_create();
        stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert);
        stream_context_set_option($streamContext, 'ssl', 'passphrase', "********");
        stream_context_set_option($streamContext, 'ssl', 'verify_peer', true);

        $apns = stream_socket_client('ssl://'.$apnsHost.':'. $apnsPort, $error, $errorString, 20, STREAM_CLIENT_CONNECT , $streamContext);

    }

对我来说,这看起来是对的,但很明显,这是不对的。

4

2 回答 2

3

这是一个 SELinux 会议

问题出httpd_can_network_connect在 Fedora 12 中默认开启的 SELinux 设置。

在 shell 控制台中,以 root 身份运行:

/usr/sbin/setsebool httpd_can_network_connect=1

参考:http ://www.rkrishardy.com/2009/12/permission-denied-13-when-opening-socket-in-php-apache/

于 2015-05-04T16:46:45.957 回答
0

以下教程中的 simplepush.php 代码对我来说效果很好。 http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12

$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);
于 2012-04-05T09:07:30.870 回答