2011-12-14 8 views
6

मैंने देखा कि PHP filter_var फ़ंक्शन के साथ आप कई चीजें कर सकते हैं जो अन्य फ़ंक्शन के साथ भी किया जा सकता है।PHP php फ़ंक्शंस में निर्मित के बजाय filter_var का उपयोग करने के लिए

उदाहरण के लिए, फ़िल्टर FILTER_VALIDATE_REGEXP, FILTER_SANITIZE_ENCODED और कई अन्य लोगों के पास PHP में उनके संबंधित समर्पित कार्य भी हैं।

मुझे filter_var का उपयोग कब करना चाहिए और मुझे PHP फ़ंक्शंस का उपयोग कब करना चाहिए? फायदे और नुकसान क्या हैं?

+1

उपयोग php_filter कभी भी आप कर सकते हैं, इसे बनाने में है (थोड़ा तेजी से और आप आप सही सत्यापन का उपयोग यकीन है), तो आप आप क्या जरूरत नहीं मिल रहा है, तो एक कस्टम एक का उपयोग करें। –

+1

मैं कस्टम फ़ंक्शंस के बारे में बात नहीं कर रहा था, क्योंकि फ़ंक्शन में बनाया गया हमेशा तेज़ होगा। मैं फ़िल्टर के बारे में बात कर रहा था जिसमें पहले से ही मूल php फ़ंक्शन विकल्प है। – Tiddo

+0

मैं समझता हूं, लेकिन यदि आप preg_match का उपयोग करते हैं तो आपको regexp को कस्टमाइज़ करना होगा - मुझे कहना चाहिए था कि preg_match के साथ regexp को कस्टमाइज़ किया गया है –

उत्तर

7

filter एक्सटेंशन का लाभ यह है कि आपके पास सब कुछ एक ही स्थान पर है।

लेकिन आप सही हैं, यह बहुत उपन्यास सुविधाएं प्रदान नहीं करता है। आप FILTER_VALIDATE_REGEXP के बजाय मौजूदा कार्यों के साथ अधिकतर सामान preg_replace या preg_match में कर सकते हैं। या टाइपकास्टिंग, और फ़िल्टर विकल्प के बजाय सामान्य htmlspecialchars का उपयोग करना।

हालांकि filter_var_array है, जहां एक लाभ स्पष्ट हो जाता है। आप प्रति कॉन्फ़िगरेशन के चर के भार फ़िल्टर कर सकते हैं। और अगर आप एक बार में सभीलागू करने के लिए फिल्टर की एक सूची परिभाषित कर लेते हैं कर सकते हैं:

$_POST = filter_var_array($_POST, array(
    "text" => FILTER_SANITIZE_ENCODED, 
    "id" => FILTER_VALIDATE_INT, 
    "title" => FILTER_SANITIZE_ENCODED, 
)); 

मैं स्वीकार करते हैं कि मूल रूप से एक चालू होने मैजिक_कोट्स उदाहरण है, लेकिन आप चित्र प्राप्त। एकीकरण।

6
इस दिन के लिए

मैं filter_var

filter_var($string, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH) 

का उपयोग कर PHP में बहुत सी बातें की तरह से एक स्ट्रिंग से विशेष वर्ण को दूर करने के लिए एक तेज (या बेहतर) रास्ता नहीं मिला है, तो उन्हें कर के कई तरीके हैं। filter_var सुविधाजनक है।

+0

क्या यह प्रत्येक filter_var फ़ंक्शन के लिए है जो कि एक और अंतर्निहित समकक्ष है? या यह केवल इस फिल्टर के लिए है? – Tiddo

+0

हां, स्ट्रिंग से संबंधित संस्करणों के लिए अच्छा है। यहां एक नज़र डालें, आप देखेंगे कि FILTER_FLAG_STRIP_HIGH कुछ –

+0

पर लागू होता है जो इसे वोट देंगे? क्यूं कर? –

1

मैं सिर्फ एक microtime बेंचमार्क पक्ष की ओर से preg_match के खिलाफ 50 बार एक if बयान में चलाने के लिए और filter_var_array ठीक उसी रीसेट डेटा मान्य है, यहाँ microtime परिणाम हैं:

filter_var_array 
microtime: 0.000834226608276 

preg_match 
microtime: 0.000180006027222 

filter_var_array को सुंदर दिखता है, लेकिन 4 preg_match से 8 गुना धीमी है, इसलिए यदि आपके पास उच्च ट्रैफ़िक वेबसाइट है और तेज़ कोड पसंद करते हैं तो मैं preg_match की अनुशंसा करता हूं।

हालांकि यदि आपको अच्छा साफ कोड पसंद है और वास्तव में यह परवाह नहीं है कि यह कैसे चलता है तो filter_var_array का उपयोग करें जो कई रूपों के अनुरोधों और इनपुट पर आसान फ़िल्टर लागू करने के लिए अधिक प्रबंधनीय हो सकता है।

लेकिन आसानी के इस तरह का भी इस तरह के ईमेल या अक्षरांकीय के रूप में विभिन्न परिदृश्यों के लिए एक preg_match समारोह लेखन, लेकिन जब उदाहरण के लिए regex लेखन मन preg_match सुरक्षा में रखने के द्वारा प्राप्त किया जा सकता है:

http://blog.php-security.org/archives/76-Holes-in-most-preg_match-filters.html

मैं करूंगा दोनों पर स्मृति उपयोग करुणा भी देखना पसंद है।

आशा इस मदद करता है

+0

समयपूर्व अनुकूलन की जड़ है ..., आप जानते हैं। –

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