ECGコンプライアンス:方法


10

以下のようなものがあるcoding standardためMagentoの1と呼ばれます、ECG使用すべきではない、多くの物事は避けるべきどこかの方法が。

コードで「エラー」または「警告」をスローするすべてのケースをカバーするリストを作成してみましょう。

以下に、考えられるすべての警告のリストを示します。私はこの投稿を定期的に更新し、与えられた回答と投票された回答へのリンクを追加します。

注意:回答の重複を避けてください;)

ダウンロード:https : //github.com/magento-ecg/coding-standard


ECGスニフ

クラス

Mysql4

Mysql4クラスは廃止されました。

オブジェクトのインスタンス化

Magentoでは、オブジェクトの直接インスタンス化(クラス%s)は推奨されていません。

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

...

PHP

後藤

gotoの使用はお勧めしません。

...

名前空間

"'。$ exceptionClassName。'"クラスの名前空間が指定されていません。

...

プライベートクラスメンバー

プライベートクラスメンバーが検出されました。

...

Var

プライベートクラスメンバーが検出されました。

...

パフォーマンス

コレクション数

Magentoデータコレクションの不要な読み込み。代わりにgetSize()メソッドを使用してください。

FetchAll

fetchAll()は、大きなデータセットの場合、メモリ効率が悪い場合があります。

...

GetFirstItem

getFirstItem()は、コレクションのロード結果を1つのアイテムに制限しません。

  • 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スーパーグローバルの直接使用が検出されました。

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',
);

...

文字列

RegEx

%sで実行可能な正規表現。パターンに「e」修飾子が含まれていないことを確認してください

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

...

文字列連結

検出された2つの文字列を連結するための+演算子の使用

...

文字列の位置

同一の演算子===は%s関数の戻り値のテストには使用されません

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

関連する質問と回答


LOLこの記事について、あなたは:)ほとんどのドキュメントを書いた
PЯINCƏ

@Prince誰か他の人がこれを完了するのに少し役立つかもしれません:P
sv3n 2017

私はそうは思いません:)
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()は、コレクションのロード結果を1つのアイテムに制限しません。

正しくない:

$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 2018年

@NitinPawar新しい質問を開いていただけますか?コードに問題があるようです。
sv3n 2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.