浏览器上的推送通知工作不在命令行上
Posted
技术标签:
【中文标题】浏览器上的推送通知工作不在命令行上【英文标题】:Push notification work on browser doesn't on commandline 【发布时间】:2018-10-08 11:09:14 【问题描述】:我有运行 apns 的 php 文件。当我在浏览器上调用网页时它确实有效。但是它不适用于终端调用
php deneme.php
我确认 .pem 文件已正确创建。并且还确定它在 php 文件中的位置也是正确的(因为在浏览器上正常工作)。我用完了选项。希望大家给个思路。
deneme.php 文件是:
<?php
$apnsServer = 'ssl://gateway.sandbox.push.apple.com:2195';
$privateKeyPassword = 'MyPassword123';
$message = 'Test Push Notifications';
$deviceToken =
'2877b691ffd9a3edfa45ee31ff25083f1845e016e7902d130eb09713b1c2ed2f';
$pushCertAndKeyPemFile = $_SERVER['DOCUMENT_ROOT'].'/ck.pem';// 'ck.pem';
$stream = stream_context_create();
stream_context_set_option($stream,
'ssl',
'passphrase',
$privateKeyPassword);
stream_context_set_option($stream,
'ssl',
'local_cert',
$pushCertAndKeyPemFile);
$connectionTimeout = 20;
$connectionType = STREAM_CLIENT_CONNECT | STREAM_CLIENT_PERSISTENT;
$connection = stream_socket_client($apnsServer,
$errorNumber,
$errorString,
$connectionTimeout,
$connectionType,
$stream);
if (!$connection)
echo "Failed to connect to the APNS server. Error no = $errorNumber<br/>";
exit;
else
echo "Successfully connected to the APNS. Processing...</br>";
$messageBody['aps'] = array('alert' => $message,
'sound' => 'default',
'badge' => 2,
);
$payload = json_encode($messageBody);
$notification = chr(0) .
pack('n', 32) .
pack('H*', $deviceToken) .
pack('n', strlen($payload)) .
$payload;
$wroteSuccessfully = fwrite($connection, $notification, strlen($notification));
if (!$wroteSuccessfully)
echo "Could not send the message<br/>";
else
echo "Successfully sent the message<br/>";
fclose($connection);
?>
【问题讨论】:
从 CLI 运行时是否有$_SERVER['DOCUMENT_ROOT']
?不这么认为。
你是天才!.... 在 ssh $_server 变量上始终为空。因此,当我输入 /var/www/html/xxx.pem 并且它有效!你拯救了我的一天
没问题,很高兴它有效。
【参考方案1】:
从 CLI 运行时没有可用的 $_SERVER[]
超全局变量,因为没有服务器在运行。将$_SERVER['DOCUMENT_ROOT'].'/ck.pem';
替换为您的ck.pem
文件的绝对路径。
【讨论】:
以上是关于浏览器上的推送通知工作不在命令行上的主要内容,如果未能解决你的问题,请参考以下文章