mysql — где правильно разместить и назвать файл .pem для уведомления Apple в Stack Overflow

Мои файлы cron находятся в папке cron, которая находится в корневом каталоге. Но это всегда показывает ошибку как —

Warning: stream_socket_client(): SSL: crypto enabling timeout in /home/myname/beta.myhost.com/cron/dailycron.php on line 43

Warning: stream_socket_client(): Failed to enable crypto in /home/myname/beta.myhost.com/cron/dailycron.php on line 43

Warning: stream_socket_client(): unable to connect to ssl://gateway.sandbox.push.apple.com:2195 (Unknown error) in /home/myname/beta.myhost.com/cron/dailycron.php on line 43

Линия 43 вокруг —

$apns = stream_socket_client('ssl://' . $apns_url . ':' . $apns_port, $error, $error_string, 2, STREAM_CLIENT_CONNECT, $stream_context);

Мой код выглядит следующим образом —

<?php

//############################# Database connection ################################/

//######################### Daily notification code ############################################/

$result = mysql_query("SELECT DISTINCT EntryId, twittes, groupname, created_at FROM users_twitte NATURAL JOIN (SELECT EntryId, MAX( created_at ) created_at FROM users_twitte GROUP BY EntryId) t");
while( $row = mysql_fetch_array($result) ) {

// Get user array from EntryId
$rowdata = $row['EntryId'];

$result2 = mysql_query("SELECT * FROM `users_subscription` WHERE EntryId = $rowdata");

while( $row2 = mysql_fetch_assoc($result2) ) {
$group_name = $row['groupname'];
$grp_usr_id = $row2['uid'];
send_notification($group_name, $grp_usr_id);
}
}

// Send Notification
function send_notification($groupname, $uid) {

// GET device token from uid
//$device_token = get_device_token($uid);

$payload = array();
$payload['aps'] = array('alert' => "THERE IS AN MESSAGE FROM $groupname", 'badge' => 0, 'sound' => 'default');
$payload = json_encode($payload);

$apns_url = NULL;
$apns_cert = NULL;
$apns_port = 2195;

$apns_url = 'gateway.sandbox.push.apple.com';
$apns_cert = '/home/myname/beta.myhost.com/cron/ck.pem';

$stream_context = stream_context_create();
stream_context_set_option($stream_context, 'ssl', 'local_cert', $apns_cert);
stream_context_set_option($stream_context, 'ssl', 'passphrase', "12345");

$apns = stream_socket_client('ssl://' . $apns_url . ':' . $apns_port, $error, $error_string, 2, STREAM_CLIENT_CONNECT, $stream_context);

$get_token_info = get_device_token_and_type($uid);
if( 1 === $get_token_info['status'] ) {
if(0 === $get_token_info['device_type']) {
$device_token = $get_token_info['$device_token'];
$apns_message = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $device_token)) . chr(0) . chr(strlen($payload)) . $payload;
}
fwrite($apns, $apns_message);
@socket_close($apns);
@fclose($apns);
}
}

// GET device token for uid
function get_device_token_and_type($uid) {
$dev_tok_type_arr = array();
// GET EMAIL id from uid
$result = mysql_query("SELECT LoginData.device_token, LoginData.device_type FROM LoginData INNER JOIN users ON LoginData.userid = users.email WHERE users.uid =$uid");
if( mysql_num_rows($result) > 0 ) {
while( $rows = mysql_fetch_assoc($result) ) {
$dev_tok_type_arr = array('device_token'=> $rows['device_token'], 'device_type'=> $rows['device_type'], 'status'=> 1);
}
}
else {
$dev_tok_type_arr = array('status'=>0, 'message'=> 'No device token exists for the userid');
}
return $dev_tok_type_arr;
}

?>

Мой .pem файл находится в той же папке cron, и я упомянул абсолютный путь в — $apns_cert , Дайте мне знать, что я делаю неправильно, я проверил правильную фразу-пароль.

0

Решение

Просто поместите ваш pem-файл в ту же папку вашего php-скрипта и измените вашу переменную следующим образом:

$apns_cert = 'ck.pem';
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector