APNS не работает с командной строкой

Я использую простой скрипт 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

0

Решение

Вы можете попробовать создать .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
1

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

Если вы попытаетесь выполнить 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))
0