2011-01-19 12 views
7

मैं पैक() का उपयोग कर phpपैक()। अवैध हेक्स अंकों चेतावनी

$currencypair = "EUR/USD"; 
$buy_sell = "buy"; 
$alert_device_token =array("a","a","b"); 
$message = "Your " . $currencypair . " " . $buy_sell . " alert price has been reached!"; 
$payload['aps'] = array (
    'alert' => $message, 
    'badge' => 1, 
    'sound' => 'default' 
); 
$payload = json_encode($payload); 

foreach ($alert_device_token as $alert_device) 
{ 
    $apnsMessage = chr(0) . chr(0) . chr(32) . 
       pack('H*', str_replace(' ', '', $alert_device)) . 
       chr(0) . chr(strlen($payload)) . $payload; 
    echo $apnsMessage; 
} 

में अब चेतावनी कभी कभी मैं निम्नलिखित मिल ही कोड चल कुछ समस्या हो रहा है -

Warning: pack() [function.pack]: Type H: illegal hex digit g in /code/FR2BVl 

अवैध हेक्स अंकों हालांकि अलग रखता है। इस चेतावनी और इसे हटाने के तरीकों के बारे में कोई भी विचार।

, यह जीना here

+0

अधिक कोड पोस्ट करें। '$_ alert_device' पर 'str_replace()' मुझे लगता है कि मध्य में अधिक कोड है जो '$ alert_device' की सामग्री को संशोधित कर सकता है। पोस्ट किए गए कोड के साथ, आपको जो त्रुटि मिल रही है उसे आपको प्राप्त नहीं करना चाहिए। –

+0

@ सैंडर: संपादित प्रश्न देखें। – ayush

+0

मेरे मामले में, मुझे यह त्रुटि मिली जब मैं एक खाली मान (या स्लैश /) पैक() फ़ंक्शन में पास करने का प्रयास कर रहा था। मुझे पता चला कि खाली मूल्य क्या था और इसे ठीक किया गया था। – Volomike

उत्तर

6

pack बाइनरी में हेक्साडेसिमल संख्या में कनवर्ट करता है, उदा .:

echo pack("H*", "2133") 

पैदा करता !3 जाँच के बाद से ! कोड 0x21 है और 3 कोड 0x33 है। चूंकि g हेक्स अंक नहीं है, चेतावनी दी जाती है। पैक के H प्रारूप के लिए उपयोगी होने के लिए, तर्क हेक्स संख्या होना चाहिए। यदि $alert_device नहीं है - आपको इसके बारे में कुछ और उपयोग करना चाहिए, इसके परिणामस्वरूप आप क्या चाहते हैं और परिणाम के रूप में आप क्या उम्मीद करते हैं।

-2

अपनी फ़ाइल को यूटीएफ -8 एन्कोडिंग में सहेजने का प्रयास करें।

0

इस मामले में, $alert_device एक सरणी है।

पैकिंग के लिए इसे एक मूल्य की आवश्यकता है।

इसके बजाय pack('H*', str_replace(' ', '', $alert_device[0])) का उपयोग करें।

1

आप

pack('H*', $someString) 

करने के लिए

strtr(rtrim(base64_encode(pack('H*', sprintf('%u', CRC32($someString)))) 
+2

कृपया आप कुछ समझा सकते हैं? – Zulu

6

त्रुटि चेकसम से संबंधित है के लिए कारण में से एक,

क्योंकि PHP के पूर्णांक प्रकार हस्ताक्षरित किया गया है कई CRC32 चेकसम को बदलना होगा परिणाम 3212 प्लेटफॉर्म पर नकारात्मक पूर्णांक में होगा। 64 बिट इंस्टॉलेशन पर सभी crc32() परिणाम हालांकि सकारात्मक पूर्णांक होंगे। इसलिए स्ट्रिंग को दशमलव प्रारूप में हस्ताक्षरित crc32() चेकसम का प्रतिनिधित्व करने के लिए sprintf() या printf() के "% u" फ़ॉर्मेटर का उपयोग करने की आवश्यकता है। http://www.php.net/crc32

इस मामले में त्रुटि पर्याप्त हो सकता है,

sprintf('%u', CRC32($someString)) 

ठीक करने के लिए,

pack('H*', str_replace(' ', '', sprintf('%u', CRC32($alert_device)))) 

रेफरी: https://github.com/bearsunday/BEAR.Package/issues/136

2

उपयोग strtr(rtrim(base64_encode(pack('H*', sprintf('%u', $algo($data)))), '='), '+/', '-_')pack('H*', $value) का उपयोग कर के insted।

0

Ionic/Cordova/PhoneGap का उपयोग करके एक हाइब्रिड ऐप विकसित करते समय मुझे एक ही समस्या थी। चूंकि एंड्रॉइड और आईओएस उपकरणों में एक ही कैड चलाया जाता है, इसलिए मैंने एपीएनएस टोकन के रूप में Google एफसीएम टोकन को संग्रहीत करने की गलती की थी।एपीएनएस टोकन पूरी तरह से हेक्साडेसिमल है लेकिन Google एफसीएम टोकन में गैर-हेक्साडेसिमल वर्ण हो सकते हैं। इसलिए, PHP के pack() फ़ंक्शन का उपयोग करके Google FCM टोकन पैक करने से illegal hex digit त्रुटि हो जाएगी।

संबंधित मुद्दे