EKG-Konformität: Wie geht das?


10

Es gibt so etwas wie ein coding standardfür Magento 1 , ECGbei dem zahlreiche Dinge vermieden werden sollten oder Methoden, die nicht verwendet werden sollten.

Versuchen wir, eine Liste zu erstellen, die alle Fälle abdeckt, in denen "Fehler" oder "Warnungen" in Ihrem Code auftreten.

Unten finden Sie eine Liste mit allen möglichen Warnungen. Ich werde diesen Beitrag in regelmäßigen Abständen aktualisieren und auf gegebene und positiv bewertete Antworten verlinken.

Hinweis: Bitte versuchen Sie doppelte Antworten zu vermeiden;)

Download: https://github.com/magento-ecg/coding-standard


EKG schnüffelt

Klassen

Mysql4

Mysql4-Klassen sind veraltet.

Objektinstanziierung

Von direkter Objektinstanziierung (Klasse% s) wird in Magento abgeraten.

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

...

PHP

Gehe zu

Von der Verwendung von goto wird abgeraten.

...

Namespace

Der Namespace für die Klasse "'. $ ExceptionClassName.'" Ist nicht angegeben.

...

Private Class Mitglied

Privates Klassenmitglied erkannt.

...

Var

Privates Klassenmitglied erkannt.

...

Performance

Sammlungsanzahl

Unnötiges Laden einer Magento-Datenerfassung. Verwenden Sie stattdessen die Methode getSize ().

FetchAll

fetchAll () kann für große Datenmengen speichereffizient sein.

...

GetFirstItem

getFirstItem () beschränkt das Ergebnis des Ladens der Sammlung nicht auf ein Element.

Schleife

Arraygrößenberechnungsfunktion% s in Schleife erkannt

Modell LSD-Methode% s in Schleife erkannt

Datenlast% s Methode in Schleife erkannt

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

Sicherheit

Acl

Fehlende% s () ACL-Methode in der% s-Klasse.

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

...

Entmutigte Funktion

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

...

Verbotene Funktion

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

Datei einschließen

Anweisung "% s" erkannt. Von Dateimanipulationen wird abgeraten.

... Anweisung ist keine Funktion, es sind keine Klammern erforderlich.

... das Weitergeben von URLs ist verboten.

... Verketten ist verboten.

... Variablen im Inneren sind unsicher.

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

...

Sprachkonstrukt

Falsche Verwendung der Back-Quote-String-Konstante. Hintere Anführungszeichen sollten immer in Zeichenfolgen stehen.

Von der Verwendung des Sprachkonstrukts% s wird abgeraten.

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

...

Superglobal

Direkte Verwendung von% s Superglobal erkannt.

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

Sql

Rohe Abfrage

Mögliche SQL-Rohanweisung% s erkannt

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

...

Langsame Abfrage

Mögliche langsame SQL-Anweisung% s erkannt

Mögliche langsame SQL-Methode% s erkannt

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

...

Saiten

RegEx

Möglicher ausführbarer regulärer Ausdruck in% s. Stellen Sie sicher, dass das Muster keinen Modifikator "e" enthält

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

...

String Concat

Verwendung des Operators + zum Verketten von zwei erkannten Zeichenfolgen

...

String Position

Der identische Operator === wird nicht zum Testen des Rückgabewerts der% s-Funktion verwendet

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

Verwandte Fragen und Antworten für


LOL über diesen Beitrag, Sie haben fast ein Dokument geschrieben :)
PЯINCƏ

@ Prinz jemand anderes könnte ein bisschen helfen, um dies zu vervollständigen: P
sv3n

Ich glaube nicht :)
PЯINCƏ

Gibt es eine Alternative für Stripcslashes ()? @ sv3n danke für solche Beschreibung Frage und Antworten :)
Keyur Shah

@KeyurShah Nein. Entweder ignorieren Sie die Warnung oder versuchen Sie, "vorher" zu vermeiden :) In welchem ​​Fall verwenden Sie sie? Vielleicht als Frage hinzufügen?
Sv3n

Antworten:


6

Verbotene Funktion

Datei existiert()

Die Verwendung der Funktion file_exists () ist verboten

falsch:

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

richtig:

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

oder

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

5

GetFirstItem

getFirstItem () beschränkt das Ergebnis des Ladens der Sammlung nicht auf ein Element.

falsch:

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

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

richtig:

Wenden Sie das Limit an, bevor Sie Daten erfassen.

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

oder

$collection->setPageSize(1, 1)

Beispiele:

Kollektion mit 750 Produkten ...

Ohne vorher einzuschränken:

  • Total Inkl. Wandzeit (Mikrosekunden): 2.116.522 Mikrosekunden
  • Total Inkl. CPU (Mikrosekunden): 2.101.688 Mikrosekunden
  • Total Inkl. MemUse (Bytes): 4.783.504 Bytes
  • Total Inkl. PeakMemUse (Bytes): 4.363.112 Bytes
  • Anzahl der Funktionsaufrufe: 104.187

Mit getSelect()->limit(1):

  • Total Inkl. Wandzeit (Mikrosekunden): 149.803 Mikrosekunden
  • Total Inkl. CPU (Mikrosekunden): 131.405 Mikrosekunden
  • Total Inkl. MemUse (Bytes): 2.384.840 Bytes
  • Total Inkl. PeakMemUse (Bytes): 1.827.112 Bytes
  • Anzahl der Funktionsaufrufe: 5.327

Mit der Verwendung setPageSize(1, 1)

  • Total Inkl. Wandzeit (Mikrosekunden): 155.025 Mikrosekunden
  • Total Inkl. CPU (Mikrosekunden): 136.191 Mikrosekunden
  • Total Inkl. MemUse (Bytes): 2.413.128 Bytes
  • Total Inkl. PeakMemUse (Bytes): 1.856.064 Bytes
  • Anzahl der Funktionsaufrufe: 5.515

Hinweis:

Diese Warnung wird weiterhin angezeigt, auch wenn Sie Ihre Sammlung zuvor eingeschränkt haben. Um diese Nachricht loszuwerden, verwenden Sie $collection->getLastItem()stattdessen.


Ich Data access method LIMIT detected outside of Resource Modelbekomme bei der Verwendung von Limit`
Amit Patel

1
Hier ist mehr Details
Amit Patel

5

Verbotene Funktion

curl_xyz

Die Verwendung der Funktionen curl_init (), curl_setopt (), curl_exec (), curl_close () ist verboten

falsch:

$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);

richtig:

$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();

Ich habe den obigen Code verwendet und er gibt mir einen Fehler Uncaught Error: Class 'Custom\Rma\Helper\Varien_Http_Adapter_Curl' not found. Wie man die Klasse benutzt Ich fand sie im Verkäufer, aber kein Glück.
Nitin Pawar

@NitinPawar kannst du bitte eine neue Frage öffnen? Mit Ihrem Code scheint etwas nicht zu stimmen.
Sv3n
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.