7

Possible Duplicate:
pack() in php. Illegal hex digit warningPHP Warning: pack(): Type H: errore di r illegale hex cifre

Sto utilizzando il servizio di notifica push di Apple e per inviare la notifica, è necessario costruire il messaggio in formato binario. Ho ottenuto le seguenti errori per la linea di seguito:

Warning: pack(): Type H: illegal hex digit r

Warning: pack(): Type H: illegal hex digit y

Notice: Array to string conversion in C:\xampp\htdocs\firecom\FireComAPNS.php on line 130

Ecco la riga di codice gettando l'errore:

$msg = chr(0).pack('n', 32).pack('H*', $devicetoken).pack('n',strlen($payload)) . $payload; 

e

$devicetoken=773f5436825a7115417d3d1e036da20e806efeef547b7c3fe4da724d97c01b30 

Ho cercato su internet un sacco, ma non ho idea di come fare casino con binario, qualsiasi aiuto su quello che sta succedendo sarebbe molto apprezzato!

risposta

0

Prova questa funzione per 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; 
} 
+4

ho capito il problema. $ deviceToken era una matrice invece di una stringa. Ho usato $ deviceToken = $ row ['devicetoken']; per ottenere la fila giusta e tutto va bene di nuovo. –

+0

Grandi cose. Sono contento di sentire che l'hai trovato tu stesso. –

+0

Che bello averlo capito, ma è più importante rendersi conto che 1) la matrice che hai passato è stata convertita in una stringa da 'pack'; 2) il valore della stringa era il testo 'Array'; 3) I caratteri 'r' e' y' in quella stringa non sono cifre esadecimali valide; 4) ... ecco perché ha fallito. –