PHP警告:pack():类型H:非法的十六进制数字r错误

Jon*_*son 7 php binary runtime-error apple-push-notifications devicetoken

可能重复:
php中的pack().非法十六进制数字警告

我正在使用apple的推送通知服务,为了发送通知,您必须以二进制格式构建消息.我在下面的行中遇到以下错误:

警告:pack():类型H:非法的十六进制数字r

警告:pack():类型H:非法的十六进制数字y

注意:第130行的C:\ xampp\htdocs\firecom\FireComAPNS.php中的数组到字符串转换

这是抛出错误的代码行:

$msg = chr(0).pack('n', 32).pack('H*', $devicetoken).pack('n',strlen($payload)) . $payload;
Run Code Online (Sandbox Code Playgroud)

$devicetoken=773f5436825a7115417d3d1e036da20e806efeef547b7c3fe4da724d97c01b30
Run Code Online (Sandbox Code Playgroud)

我在互联网上搜索了很多,但我不知道如何搞乱二进制文件,任何有关正在发生的事情的帮助将不胜感激!

Gle*_*las 0

在 php < 5.4.0 上尝试此功能

function hex2bin($hexdata) {
   $bindata="";
   for ($i=0;$i<strlen($hexdata);$i+=2) {
      $bindata.=chr(hexdec(substr($hexdata,$i,2)));
   }

   return $bindata;
}
Run Code Online (Sandbox Code Playgroud)

  • 我解决了这个问题。$deviceToken 是一个数组而不是字符串。我使用 $deviceToken = $row['devicetoken']; 得到正确的行,一切又恢复正常。 (4认同)