जवाबों:
इसका मतलब है कि जब आप इसे बाइनरी डेटा (यानी गैर-एएससीआईआई बाइट्स और / या शून्य बाइट्स वाले तार) पास करते हैं तो फ़ंक्शन सही ढंग से काम करेगा।
उदाहरण के लिए, एक गैर-बाइनरी-सुरक्षित फ़ंक्शन एक सी फ़ंक्शन पर आधारित हो सकता है जो अशक्त-समाप्त स्ट्रिंग्स की अपेक्षा करता है, इसलिए यदि स्ट्रिंग में एक अशक्त चरित्र है, तो फ़ंक्शन इसके बाद कुछ भी अनदेखा करेगा।
यह प्रासंगिक है क्योंकि PHP सफाई से अलग स्ट्रिंग और बाइनरी डेटा नहीं करता है।
अन्य उपयोगकर्ताओं ने पहले ही उल्लेख किया है कि binary safeसामान्य रूप से क्या मतलब है।
PHP में, अर्थ अधिक विशिष्ट है, केवल एक उदाहरण के रूप में माइकल क्या देता है, इसका जिक्र करते हुए।
PHP में सभी स्ट्रिंग्स की लंबाई जुड़ी होती है, जो इसे बनाने वाले बाइट्स की संख्या होती है। जब एक फ़ंक्शन स्ट्रिंग में हेरफेर करता है, तो यह या तो हो सकता है:
0दिखाई देगा।यह भी सच है कि इंजन द्वारा हेरफेर किए गए सभी स्ट्रिंग PHP चर भी अशक्त हैं। फ़ंक्शंस के साथ समस्या जो 2. पर निर्भर करती है, वह यह है कि, यदि स्ट्रिंग में स्वयं मूल्य के साथ बाइट होता है 0, तो जो फ़ंक्शन इसे हेरफेर कर रहा है वह सोचेंगे कि स्ट्रिंग उस बिंदु पर समाप्त हो गई है और उसके बाद सब कुछ अनदेखा कर देगा।
उदाहरण के लिए, यदि PHP के strlenफ़ंक्शन ने C मानक लाइब्रेरी की तरह काम किया strlen, तो यहां परिणाम गलत होगा:
$str = "abc\x00abc";
echo strlen($str); //gives 7, not 3!
strlen()एक बाइनरी-सुरक्षित फ़ंक्शन है? मैं आपसे पुष्टि कर रहा हूं क्योंकि फ़ंक्शन के लिए PHP मैनुअल पेज पर strlen()यह उल्लेख नहीं किया गया है कि यह द्विआधारी-सुरक्षित फ़ंक्शन है या गैर-बाइनरी बाइनरी फ़ंक्शन है। PHP मेनुअल से यह केवल गायब चीज़ मेरे दिमाग में भ्रम पैदा कर रही है इसलिए मैं आपसे इसकी पुष्टि करना चाहता हूं। मैं आपके उत्तर की उत्सुकता से प्रतीक्षा कर रहा हूं। धन्यवाद।
php -r 'var_dump("\x00\x00\x00");'सत्यापित करने के लिए दौड़ें , लेकिन php का strlen बहुत लंबे समय तक द्विआधारी सुरक्षित रहा है , क्योंकि कम से कम php 4.x (जो कहा गया है, "mb_overload" नामक एक घृणा है, लेकिन यह सिर्फ दिखावा करता है जो मौजूद नहीं है - php.net /manual/en/mbstring.overload.php )
और ज्यादा उदाहरण:
<?php
$string1 = "Hello";
$string2 = "Hello\x00World";
// This function is NOT ! binary safe
echo strcoll($string1, $string2); // gives 0, strings are equal.
// This function is binary safe
echo strcmp($string1, $string2); // gives <0, $string1 is less than $string2.
?>
\xइंगित करता है हेक्साडेसिमल संकेतन। देखें: PHP स्ट्रिंग्स
0x00 = NULL
0x04 = EOT (End of transmission)
ASCII चार्ट देखने के लिए ASCII तालिका देखें
Hello\r\nWORLDनहीं होना चाहिए जैसे Helloकि फ़ंक्शन बाइनरी सुरक्षित है, है ना?
strlen() बाइनरी-सेफ में बनाया गया है ?