2015-02-24 04:51
浏览 54

Ios推送通知PHP脚本不适用于Ubuntu 14.04

I'm working on an iOS app that use iOS Push Notifications. I want to send the notification from a php script on my windows PC. I use this php script to send notification and it works well too:

// Put your device token here (without spaces):
$deviceToken = 'sdsdsdsdsczc2';
$sound = '';
// Put your private key's passphrase here:
$passphrase = 'awertf';

// Put your alert message here:
$message = 'My first push notification!';


$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.push.apple.com:2195', $err,

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

echo 'Connected to APNS' . PHP_EOL;

// Create the payload body
$body['aps'] = array(
    'badge' => +1,
    'alert' => $message,
    'sound' => $sound


// 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;
    echo 'Message successfully delivered' . PHP_EOL;

// Close the connection to the server

This php script works well on windows but now i'm working on Ubuntu 14.04 operating system and same php script is giving me error.

 Message:  stream_socket_client(): SSL operation failed with code 1. OpenSSL Error messages:error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

I guess it's something related with port 2195. But how to solve this!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • drnx3715
    drnx3715 2015-02-24 09:15

    This was an enormously helpful link to find:

    http://php.net/manual/en/migration56.openssl.php http://php.net/manual/en/context.php

    An official document describing the changes made to openssl in PHP 5.6 It's usefull to learn one more parameter that Tou should have set to false/true: for example "verify_peer_name"=>false

    So some code looks like this:

    $response = file_get_contents('ssl://'.$host.':'.$port, false, stream_context_create($arrContextOptions));
    echo $response; ?>
    点赞 评论