心电图合规性:怎么办?


10

也有一些是像coding standardMagento的1,称为ECG其中有大量的事情,应避免或不应该使用的方法。

让我们尝试创建一个列表,其中包含在代码中引发“错误”或“警告”的所有情况。

您将在下面找到所有可能的警告的列表。我会定期更新此帖子,并链接到给定和推荐的答案。

注意:请尽量避免重复的答案;)

下载:https : //github.com/magento-ecg/coding-standard


心电图闻

班级

的MySQL4

Mysql4类已过时。

对象实例化

在Magento中不建议使用直接对象实例化(类%s)。

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

...

的PHP

不鼓励使用goto。

...

命名空间

未指定“'。$ exceptionClassName。'”类的命名空间。

...

私人班级成员

检测到私人班级成员。

...

Var

检测到私人班级成员。

...

性能

收款计数

不必要地加载了Magento数据集合。请改用getSize()方法。

全部提取

对于大型数据集,fetchAll()可能会使内存效率低下。

...

GetFirstItem

getFirstItem()不会将集合加载的结果限制为一个项目。

  • GetFirstItem- https: //magento.stackexchange.com/a/179309/46249

在循环中检测到数组大小计算功能%s

在循环中检测到模型LSD方法%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
    );

...

超全球

直接检测到%s Superglobal。

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Ə

Stripcslashes()有其他选择吗?@ sv3n感谢您提供此类描述问题和答案:)
Keyur Shah,

@KeyurShah号。要么忽略警告,要么尝试避免使用“ before” :)在这种情况下,您可以使用它吗?也许将此添加为问题?
sv3n

Answers:


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)

范例:

收集750种产品...

之前没有限制:

  • 总含税 墙时间(微秒):2,116,522微秒
  • 总含税 CPU(微秒):2,101,688微秒
  • 总含税 MemUse(字节):4,783,504字节
  • 总含税 PeakMemUse(字节):4,363,112字节
  • 函数调用数:104,187

使用时getSelect()->limit(1)

  • 总含税 墙壁时间(微秒):149,803微秒
  • 总含税 CPU(微秒):131,405微秒
  • 总含税 MemUse(字节):2,384,840字节
  • 总含税 PeakMemUse(字节):1,827,112字节
  • 函数调用数:5,327

随着使用 setPageSize(1, 1)

  • 总含税 挂墙时间(微秒):155,025微秒
  • 总含税 CPU(微秒):136,191微秒
  • 总含税 MemUse(字节):2,413,128字节
  • 总含税 PeakMemUse(字节):1,856,064字节
  • 函数调用数:5,515

注意:

即使您之前限制了收藏,此警告仍然会弹出。要摆脱此消息,请$collection->getLastItem()改用。


Data access method LIMIT detected outside of Resource Model在使用极限时会遇到问题
Amit Patel

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。如何使用该类,我在供应商中找到了它,但是没有运气。
Nitin Pawar

@NitinPawar能否请您打开一个新问题?您的代码似乎出了点问题。
sv3n
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.