2010-06-18 13 views
17
  • मापने का उचित तरीका बाइट्स/किलोबाइट्स में वास्तविक आकार का क्या है? पूछने के लिए

कारण:
मुझे लगता है कि गैर तकनीकी ग्राहकों द्वारा उपयोग किया जाएगा अपने वेब आवेदन में कैश भंडारण के लिए memcached का उपयोग कर रहा हूँ। हालांकि, चूंकि memcached के पास maximum size of 1mb है, इसलिए शुरुआत से एक फ़ंक्शन स्थापित करना बहुत अच्छा होगा कि मुझे चयनित वस्तुओं/सरणी/डेटासेट के आकार को मापने के लिए उपयोग किया जा सकता है, ताकि उन्हें बड़े से बढ़ने से रोका जा सके।PHP: ऑब्जेक्ट/सरणी के किलोबाइट्स में आकार मापें?

ध्यान दें कि मैं समय के साथ कैश प्रदर्शन और भंडारण संभावनाओं का ट्रैक रखने के लिए इसे चेतावनी/नैदानिक ​​उपकरण के रूप में उपयोग करने की योजना बना रहा हूं। मुझे लगता है कि प्रत्येक memcached सेट/एड कॉल पर गणना की गति चीजों को थोड़ा धीमा कर देगा।

मुझे याद है कि मेमकैड में बड़े डेटासेट को संग्रहीत करने के बारे में भी जानकारी है, रैम में चीज़ों को संग्रहीत करने के पूरे विचार को दूर ले जाता है, और यही कारण है कि ग्राहकों को बड़े डेटासेट तक पहुंचने से रोकने के लिए मुझे पहले से ही पता होना चाहिए।

धन्यवाद एक बहुत

उत्तर

30

ठीक है, के बाद से Memcached कच्चे वस्तुओं की दुकान नहीं है (यह वास्तव में serialiezd संस्करण को संग्रहीत), तो आप ऐसा कर सकते हैं: करने के लिए सरणी के

$serializedFoo = serialize($foo); 
if (function_exists('mb_strlen')) { 
    $size = mb_strlen($serializedFoo, '8bit'); 
} else { 
    $size = strlen($serializedFoo); 
} 
+1

यूनिकोड सही के कारण यह 16 बिट बाइट होगा? –

+0

हाय! यही वह है जो मैं पूछने वाला था। यह यूटीएफ 8 और एकाधिक बाइट वर्णों को कैसे संभालता है? – Industrial

+2

अच्छा, यह सब निर्भर करता है। यदि आपके पास mb_string फ़ंक्शन ओवरलोडिंग है, तो आपके पास समस्याएं हैं। यदि नहीं, तो 'strlen' बाइट लंबाई लौटाएगा (जो आप पहले स्थान पर चाहते हैं)। यदि आपके पास 'mbstring.func_overload' है, तो आप' mb_strlen (serialize ($ foo), '8bit') का उपयोग कर सकते हैं; 'strlen के स्थान पर। लेकिन ध्यान दें, mb_string इसका उपयोग करने के लिए स्थापित होना चाहिए। मैं एक और मजबूत संस्करण में संपादित करूंगा ... – ircmaxell

4

एक और आसान तरीका pute सामग्री फ़ाइल और फिर फ़ाइल आकार की जांच करें।

$str = print_r($array, true); 
file_put_contents('data.txt', $str); 
$size = filesize('data.txt'); 
+1

क्या? कभी मत करो! –

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