Я использую простой скрипт php, чтобы отправить push-уведомление со своего сервера на мой iPhone (см. Ниже). Я уже импортировал сертификаты. Если я открою /выполнять этот php-файл с браузер мой iPhone получает уведомление, и я получаю положительный ответ из APNS.
Теперь я пытаюсь выполнить тот же php-файл с Командная строка моего сервера с помощью этого заявления:
php -f C:/inetpub/wwwroot/pushNotification/new.php
Я получаю такой же положительный ответ от APNS, как и при запуске php-файла в браузере, но мой айфон никогда не получает Отправить уведомление.
Кто-нибудь знает, что здесь не так?
Благодарю вас!
Бьерн
PHP-файл:
<?php
$deviceToken ='xxxxx';
$passphrase = 'mypass';
$message = "TEST";
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck-pub.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
$fp = stream_socket_client(
'ssl://gateway.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;
$body['aps'] = array(
'alert' => $message,
'sound' => 'default'
);
$payload = json_encode($body);
$msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;
$result = fwrite($fp, $msg, strlen($msg));
if (!$result)
echo 'Message not delivered' . PHP_EOL;
else
echo 'Message successfully delivered' . PHP_EOL;
fclose($fp);
?>
Ответ командной строки:
Connected to APNS
Message successfully delivered
Вы можете попробовать создать .cmd
файл со следующими строками (например: test.cmd):
cd C:\inetpub\wwwroot\pushNotification\
php -f news.php
И в твоем file1.php
, используйте эту строку кода вместо:
exec('test.cmd');
Надеюсь это поможет.
Не проверено: Вы также можете передавать аргументы по этому пути:
exec('test.cmd arg1 arg2');
И в
.cmd
файл
cd C:\inetpub\wwwroot\pushNotification\
php -f news.php %1 %2
Если вы попытаетесь выполнить php1-файл в другом php2-файле (используя exec ()), это решение основанный на подсказке Хакермана что вы должны изменить каталог.
Вы меняете каталог вашего процесса php2, используя:
chdir('php1_directory_path');
после этого вы можете запустить свой php1-файл, как если бы php2 работал в каталоге php1, используя:
exec('php -f php1.php')
Преимущество этого решения в том, что вы все равно можете передавать аргументы в php1:
exec('php -f *php1.php* "'.escapeshellarg(arg1).'" "'.escapeshellarg(arg2))