ECG 규정 준수 : 수행 방법


10

유사한 것이 있습니다 coding standard에 대한 젠토 일 이라고, ECG많은 일을 사용할 수 없습니다 방법을 피하거나 할 위치는.

코드에서 "오류"또는 "경고"가 발생하는 모든 경우를 다루는 목록을 만들어 봅시다.

다음은 가능한 모든 경고가있는 목록입니다. 이 게시물을 정기적으로 업데이트하고 주어진 답변과 추천 된 답변으로 연결합니다.

참고 : 중복 답변을 피하십시오.)

다운로드 : https://github.com/magento-ecg/coding-standard


심전도 스 니프

클래스

MySQL4

Mysql4 클래스는 더 이상 사용되지 않습니다.

객체 인스턴스화

Magento에서는 직접 개체 인스턴스화 (클래스 % s)를 사용하지 않는 것이 좋습니다.

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

...

PHP

이동

goto의 사용은 권장하지 않습니다.

...

네임 스페이스

" '. $ exceptionClassName.'"클래스의 네임 스페이스가 지정되지 않았습니다.

...

개인 클래스 멤버

개인 반원이 감지되었습니다.

...

바르

개인 반원이 감지되었습니다.

...

공연

수집 횟수

Magento 데이터 수집이 불필요하게로드되었습니다. 대신 getSize () 메소드를 사용하십시오.

FetchAll

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"문이 발견되었습니다. 파일 조작은 권장하지 않습니다.

... 문장은 함수가 아니며 괄호가 필요하지 않습니다.

... URL 전달은 금지되어 있습니다.

... 연결은 금지되어 있습니다.

... 내부 변수가 안전하지 않습니다.

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, 당신은 거의 의사를 썼습니다 :)
PЯINCƏ

@ 프린스 다른 누군가가 이것을 완성하는 데 도움이 될 수 있습니다 : P
sv3n

나는 그렇게 생각하지 않습니다 :)
PЯINCƏ

stripcslashes ()에 대한 대안? @ sv3n 그런 설명 질문과 답변에 감사드립니다 :)
Keyur Shah

@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)

예 :

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
자세한 내용은 다음과 같습니다
Amit Patel

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.