ईसीजी अनुपालन: कैसे करें?


10

Magento 1 केcoding standard लिए कुछ ऐसा है , जिसे कहा जाता है कि कई चीजों से बचना चाहिए या उन तरीकों का इस्तेमाल नहीं किया जाना चाहिए।ECG

आइए एक सूची बनाने की कोशिश करें जो आपके कोड में "त्रुटियों" या "चेतावनी" को फेंकने वाले सभी मामलों को कवर करती है।

नीचे आपको सभी संभावित चेतावनियों के साथ एक सूची मिलेगी। मैं नियमित अंतराल पर इस पोस्ट को अपडेट करूंगा और दिए गए और उत्कीर्ण उत्तरों के लिंक दूंगा।

नोट: कृपया डुप्लिकेट उत्तरों से बचने की कोशिश करें;)

डाउनलोड करें: https://github.com/magento-ecg/coding-standard


ईसीजी सूँघता है

कक्षाएं

MySQL4

मायिकल 4 कक्षाएं अप्रचलित हैं।

वस्तु तात्कालिकता

Magento में प्रत्यक्ष वस्तु तात्कालिकता (वर्ग% s) हतोत्साहित किया जाता है।

protected $disallowedClassPrefixes = array(
    'Mage_',
    'Enterprise_',
);

...

पीएचपी

के लिए जाओ

गोटो का उपयोग हतोत्साहित किया जाता है।

...

नाम स्थान

Namespace for "'। $ अपवाद .ClassName।" "वर्ग निर्दिष्ट नहीं है।

...

निजी वर्ग के सदस्य

निजी वर्ग के सदस्य का पता चला।

...

वार

निजी वर्ग के सदस्य का पता चला।

...

प्रदर्शन

संग्रह की गिनती

Magento डेटा संग्रह की अनावश्यक लोडिंग। इसके बजाय getSize () विधि का उपयोग करें।

FetchAll

fetchAll () बड़े डेटा सेट के लिए स्मृति अक्षम हो सकती है।

...

GetFirstItem

getFirstItem () संग्रह भार के परिणाम को एक आइटम तक सीमित नहीं करता है।

लूप

लूप में पाया गया आकार आकार गणना फ़ंक्शन% s है

मॉडल एलएसडी विधि% s लूप में पाई गई

डेटा लोड% s विधि लूप में पाई गई

protected $countFunctions = array(
    'sizeof',
    'count'
);
protected $modelLsdMethods = array(
    'load',
    'save',
    'delete'
);

सुरक्षा

Acl

% S वर्ग में% s () ACL विधि गुम है।

const PARENT_CLASS_NAME = 'Mage_Adminhtml_Controller_Action';
const REQUIRED_ACL_METHOD_NAME = '_isAllowed';

...

हतोत्साहित किया गया कार्य

public $forbiddenFunctions = array(
    '^is_dir' => null,
    '^is_file$' => null,
    '^pathinfo$' => null,
);

...

निषिद्ध कार्य

public $forbiddenFunctions = array(
    '^assert$' => null,
    '^bind_textdomain_codeset$' => null,
    '^bindtextdomain$' => null,
    '^bz.*$' => null,
    '^call_user_func$' => null,
    '^call_user_func_array$' => null,
    '^chdir$' => null,
    '^chgrp$' => null,
    '^chmod$' => null,
    '^chown$' => null,
    '^chroot$' => null,
    '^com_load_typelib$' => null,
    '^copy$' => null,
    '^create_function$' => null,
    '^curl_.*$' => null,
    '^cyrus_connect$' => null,
    '^dba_.*$' => null,
    '^dbase_.*$' => null,
    '^dbx_.*$' => null,
    '^dcgettext$' => null,
    '^dcngettext$' => null,
    '^dgettext$' => null,
    '^dio_.*$' => null,
    '^dirname$' => null,
    '^dngettext$' => null,
    '^domxml_.*$' => null,
    '^exec$' => null,
    '^fbsql_.*$' => null,
    '^fdf_add_doc_javascript$' => null,
    '^fdf_open$' => null,
    '^fopen$' => null,
    '^fsockopen$' => null,
    '^ftp_.*$' => null,
    '^fwrite$' => null,
    '^gettext$' => null,
    '^gz.*$' => null,
    '^header$' => null,
    '^highlight_file$' => null,
    '^ibase_.*$' => null,
    '^id3_set_tag$' => null,
    '^ifx_.*$' => null,
    '^image.*$' => null,
    '^imap_.*$' => null,
    '^ingres_.*$' => null,
    '^ircg_.*$' => null,
    '^ldap_.*$' => null,
    '^link$' => null,
    '^mail$' => null,
    '^mb_send_mail$' => null,
    '^mkdir$' => null,
    '^move_uploaded_file$' => null,
    '^msession_.*$' => null,
    '^msg_send$' => null,
    '^msql$' => null,
    '^msql_.*$' => null,
    '^mssql_.*$' => null,
    '^mysql_.*$' => null,
    '^odbc_.*$' => null,
    '^opendir$' => null,
    '^openlog$' => null,
    '^ora_.*$' => null,
    '^ovrimos_.*$' => null,
    '^parse_ini_file$' => null,
    '^parse_str$' => null,
    '^parse_url$' => null,
    '^parsekit_compile_string$' => null,
    '^passthru$' => null,
    '^pcntl_.*$' => null,
    '^posix_.*$' => null,
    '^pfpro_.*$' => null,
    '^pfsockopen$' => null,
    '^pg_.*$' => null,
    '^php_check_syntax$' => null,
    '^popen$' => null,
    '^print_r$' => null,
    '^printf$' => null,
    '^proc_open$' => null,
    '^putenv$' => null,
    '^readfile$' => null,
    '^readgzfile$' => null,
    '^readline$' => null,
    '^readlink$' => null,
    '^register_shutdown_function$' => null,
    '^register_tick_function$' => null,
    '^rename$' => null,
    '^rmdir$' => null,
    '^scandir$' => null,
    '^session_.*$' => null,
    '^set_include_path$' => null,
    '^set_ini$' => null,
    '^set_time_limit$' => null,
    '^setcookie$' => null,
    '^setlocale$' => null,
    '^setrawcookie$' => null,
    '^shell_exec$' => null,
    '^sleep$' => null,
    '^socket_.*$' => null,
    '^stream_.*$' => null,
    '^sybase_.*$' => null,
    '^symlink$' => null,
    '^syslog$' => null,
    '^system$' => null,
    '^touch$' => null,
    '^trigger_error$' => null,
    '^unlink$' => null,
    '^vprintf$' => null,
    '^mysqli.*$' => null,
    '^oci_connect$' => null,
    '^oci_pconnect$' => null,
    '^quotemeta$' => null,
    '^sqlite_popen$' => null,
    '^time_nanosleep$' => null,
    '^base64_decode$' => null,
    '^base_convert$' => null,
    '^basename$' => null,
    '^chr$' => null,
    '^convert_cyr_string$' => null,
    '^dba_nextkey$' => null,
    '^dns_get_record$' => null,
    '^extract$' => null,
    '^fdf_.*$' => null,
    '^fget.*$' => null,
    '^fread$' => null,
    '^fflush$' => null,
    '^get_browser$' => null,
    '^get_headers$' => null,
    '^get_meta_tags$' => null,
    '^getallheaders$' => null,
    '^getenv$' => null,
    '^getopt$' => null,
    '^headers_list$' => null,
    '^hebrev$' => null,
    '^hebrevc$' => null,
    '^highlight_string$' => null,
    '^html_entity_decode$' => null,
    '^ibase_blob_import$' => null,
    '^id3_get_tag$' => null,
    '^import_request_variables$' => null,
    '^ircg_nickname_unescape$' => null,
    '^ldap_get_values$' => null,
    '^mb_decode_mimeheader$' => null,
    '^mb_parse_str$' => null,
    '^mcrypt_decrypt$' => null,
    '^mdecrypt_generic$' => null,
    '^msg_receive$' => null,
    '^ngettext$' => null,
    '^ob_get_contents$' => null,
    '^ob_get_flush$' => null,
    '^rawurldecode$' => null,
    '^shm_get_var$' => null,
    '^stripcslashes$' => null,
    '^stripslashes$' => null,
    '^token_get_all$' => null,
    '^unpack$' => null,
    '^convert_uudecode$' => null,
    '^iconv_mime_decode$' => null,
    '^iconv_mime_decode_headers$' => null,
    '^iconv_mime_encode$' => null,
    '^iconv_set_encoding$' => null,
    '^php_strip_whitespace$' => null,
    '^addcslashes$' => null,
    '^addslashes$' => null,
    '^escapeshellarg$' => null,
    '^escapeshellcmd$' => null,
    '^gettype$' => null,
    '^var_dump$' => null,
    '^tempnam$' => null,
    '^realpath$' => null,
    '^linkinfo$' => null,
    '^lstat$' => null,
    '^stat$' => null,
    '^lchgrp$' => null,
    '^lchown$' => null,
    '^show_source$' => null,
    '^is_executable$' => null,
    '^is_link$' => null,
    '^is_readable$' => null,
    '^is_writable$' => null,
    '^is_writeable$' => null,
    '^is_uploaded_file$' => null,
    '^glob$' => null,
    '^ssh2_.*$' => null,
    '^delete$' => null,
    '^file.*$' => null,
);

फ़ाइल शामिल करें

"% s" कथन का पता चला। फ़ाइल हेरफेर को हतोत्साहित किया जाता है।

... कथन एक फ़ंक्शन नहीं है, कोई कोष्ठक की आवश्यकता नहीं है।

... यूरेल पास करना मना है।

... कॉन्टेनेट करना मना है।

... अंदर के चर असुरक्षित हैं।

public $urlPattern = '#(https?|ftp)://.*#i';

...

भाषा निर्माण

बैक कोट स्ट्रिंग निरंतर का गलत उपयोग। वापस उद्धरण हमेशा स्ट्रिंग्स के अंदर होना चाहिए।

% S भाषा निर्माण का उपयोग हतोत्साहित किया जाता है।

    return array(
        T_EXIT,
        T_ECHO,
        T_PRINT,
        T_BACKTICK
    );

...

superglobal

% S सुपरग्लोबल का प्रत्यक्ष उपयोग पाया गया।

public $superGlobalErrors = array(
    '$GLOBALS',
    '$_GET',
    '$_POST',
    '$_SESSION',
    '$_REQUEST',
    '$_ENV'
);
public $superGlobalWarning = array(
    '$_FILES',
    '$_COOKIE',
    '$_SERVER',
);

Sql

कच्ची क्वेरी

संभावित कच्चे SQL कथन% s का पता चला

public $statements = array(
    'SELECT',
    'UPDATE',
    'INSERT',
    'CREATE',
    'DELETE',
    'ALTER',
    'DROP'
);
public $queryFunctions = array(
    'query',
    'raw_query'
);

...

धीमी क्वेरी

संभावित धीमा SQL कथन% s का पता चला

संभावित धीमी SQL विधि% s का पता चला

public $adapterMethods = array(
    'group',
    'having',
    'distinct',
    'addLikeEscape',
    'escapeLikeValue',
    'union',
    'orHaving',
);
public $rawStatements = array(
    'GROUP BY',
    'HAVING',
    'DISTINCT',
    'LIKE',
    'UNION',
);

...

स्ट्रिंग्स

रेगुलर एक्सप्रेशन से

% S में संभावित निष्पादन योग्य नियमित अभिव्यक्ति। सुनिश्चित करें कि पैटर्न में "e" संशोधक नहीं है

public $functions = array(
    'preg_replace',
);

...

स्ट्रिंग कॉनटैट

पता लगाया गया दो तारों को जोड़ने के लिए + ऑपरेटर का उपयोग

...

स्ट्रिंग स्थिति

% S फ़ंक्शन के रिटर्न मान के परीक्षण के लिए आइडेंटिकल ऑपरेटर === का उपयोग नहीं किया जाता है

public $functions = array(
    'strpos',
    'stripos',
);

लिए संबंधित प्रश्न और उत्तर


इस पोस्ट के बारे में LOL, आपने लगभग doc :)
PƏINC

@ कोई और व्यक्ति इसे पूरा करने में थोड़ी मदद कर सकता है: P
sv3n

मुझे ऐसा नहीं लगता :)
PЯINCƏ

स्ट्राइकलैश के लिए कोई विकल्प ()? @ sv3n इस तरह के वर्णन सवाल और जवाब के लिए धन्यवाद :)
कीयूर शाह

@KeyurShah नहीं। या तो चेतावनी को नजरअंदाज करें या "पहले" से बचने की कोशिश करें :) इस मामले में आप इसका इस्तेमाल करते हैं? शायद इसे प्रश्न के रूप में जोड़ दें?
sv3n

जवाबों:


6

निषिद्ध कार्य

फाइल मौजूद है()

फ़ंक्शन file_exists का उपयोग निषिद्ध है

गलत:

if (!file_exists($filePath)) {
    ...
}

सही बात:

$io = new Varien_Io_File();
if (!$io->fileExists($filePath)) {
    ...
}

या

$validatorNot = new Zend_Validate_File_NotExists($path);
if ($validatorNot->isValid($file)) {
    ...
}

5

GetFirstItem

getFirstItem () संग्रह भार के परिणाम को एक आइटम तक सीमित नहीं करता है।

गलत:

$collection = Mage::getModel('catalog/category')
    ->load(41)
    ->getProductCollection()
    ->addAttributeToSelect('weight');

$product = $collection->getFirstItem();
$weight  = $product->getData('weight');

सही बात:

डेटा हड़पने से पहले सीमा लागू करें।

$collection->getSelect()->limit(1)

या

$collection->setPageSize(1, 1)

Expamples:

750 उत्पादों के साथ संग्रह ...

पहले सीमित किए बिना:

  • टोटल इंक्ल। दीवार समय (microsec): 2,116,522 microsecs
  • टोटल इंक्ल। CPU (microsecs): 2,101,688 microsecs
  • टोटल इंक्ल। मेम्यूज़ (बाइट्स): 4,783,504 बाइट्स
  • टोटल इंक्ल। पीकम्यूसे (बाइट्स): 4,363,112 बाइट्स
  • फ़ंक्शन कॉल की संख्या: 104,187

उपयोग के साथ getSelect()->limit(1):

  • टोटल इंक्ल। दीवार का समय (माइक्रोसेक): 149,803 माइक्रोसैक
  • टोटल इंक्ल। CPU (microsecs): 131,405 microsecs
  • टोटल इंक्ल। मेम्यूज़ (बाइट्स): 2,384,840 बाइट्स
  • टोटल इंक्ल। PeakMemUse (बाइट्स): 1,827,112 बाइट्स
  • फ़ंक्शन कॉल की संख्या: 5,327

उपयोग के साथ setPageSize(1, 1)

  • टोटल इंक्ल। दीवार समय (माइक्रोसेक): 155,025 माइक्रोसैक
  • टोटल इंक्ल। CPU (microsecs): 136,191 microsecs
  • टोटल इंक्ल। मेम्यूज़ (बाइट्स): 2,413,128 बाइट्स
  • टोटल इंक्ल। PeakMemUse (बाइट्स): 1,856,064 बाइट्स
  • फ़ंक्शन कॉल की संख्या: 5,515

ध्यान दें:

यदि आप पहले भी अपने संग्रह को सीमित करते हैं, तो भी यह चेतावनी पॉप अप होगी। इसके $collection->getLastItem()बजाय इस संदेश के उपयोग से छुटकारा पाने के लिए ।


Data access method LIMIT detected outside of Resource Modelजब मैं लिमिट का उपयोग कर रहा हूँ तो
अमित पटेल

1
यहां अधिक विवरण है
अमित पटेल

5

निषिद्ध कार्य

curl_xyz

फ़ंक्शन curl_init (), curl_setopt (), curl_exec (), curl_close () का उपयोग निषिद्ध है

गलत:

$ch = curl_init();
curl_setopt($connection, CURLOPT_HTTPHEADER, $header);
curl_setopt($connection, CURLOPT_POSTFIELDS, $request);
curl_setopt($connection, CURLOPT_URL, $url);
$response = curl_exec($ch);
curl_close($ch);

सही बात:

$options = array(
    CURLOPT_HTTPHEADER => $header,
    CURLOPT_POSTFIELDS => $request
);

$curl = new Varien_Http_Adapter_Curl();
$curl->setOptions($options);
$curl->write(Zend_Http_Client::GET, $url, Zend_Http_Client::HTTP_0);
$response = $curl->read();
$responseBody = Zend_Http_Response::extractBody($response);
$curl->close();

मैंने उपरोक्त कोड का उपयोग किया है और यह मुझे त्रुटि दे रहा है Uncaught Error: Class 'Custom\Rma\Helper\Varien_Http_Adapter_Curl' not found। कक्षा का उपयोग कैसे करें मैंने इसे विक्रेता में पाया लेकिन भाग्य नहीं।
नितिन पवार

@NitinPawar क्या आप एक नया प्रश्न खोल सकते हैं? लगता है कि आपके कोड में कुछ गड़बड़ है।
sv3n
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.