Kepatuhan EKG: Bagaimana caranya?

10

Ada sesuatu seperti coding standarduntuk Magento 1 , yang disebut di ECGmana banyak hal harus dihindari atau metode yang tidak boleh digunakan.

Mari kita coba membuat daftar yang mencakup semua kasus yang melemparkan "kesalahan" atau "peringatan" dalam kode Anda.

Di bawah ini Anda akan menemukan daftar dengan semua peringatan yang mungkin. Saya akan memperbarui posting ini secara berkala dan menautkan ke jawaban yang diberikan dan di-upgrade.

Catatan: harap coba menghindari jawaban rangkap;)

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


EKG Sniffs

Kelas

Mysql4

Kelas Mysql4 sudah usang.

Instansiasi objek

Instansiasi objek langsung (kelas% s) tidak disarankan di Magento.

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

...

PHP

Pergi ke

Penggunaan goto tidak disarankan.

...

Namespace

Namespace untuk kelas "'. $ ExceptionClassName.'" Tidak ditentukan.

...

Anggota Kelas Privat

Anggota kelas pribadi terdeteksi.

...

Var

Anggota kelas pribadi terdeteksi.

...

Performa

Jumlah Koleksi

Memuat koleksi data Magento yang tidak perlu. Gunakan metode getSize () sebagai gantinya.

Ambil semuanya

fetchAll () bisa jadi memori tidak efisien untuk set data besar.

...

GetFirstItem

getFirstItem () tidak membatasi hasil pengumpulan koleksi untuk satu item.

Loop

Fungsi perhitungan ukuran array% s terdeteksi dalam loop

Metode Model LSD% s terdeteksi dalam lingkaran

Data load% s metode terdeteksi dalam loop

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

Keamanan

Acl

Kehilangan metode% s () ACL di kelas% s.

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

...

Fungsi yang tidak disarankan

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

...

Fungsi Terlarang

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

Sertakan File

Pernyataan "% s" terdeteksi. Manipulasi file tidak disarankan.

... Pernyataan bukan fungsi, tidak ada tanda kurung yang diperlukan.

... Melewati url dilarang.

... Menggabungkan dilarang.

... Variabel di dalamnya tidak aman.

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

...

Konstruksi Bahasa

Penggunaan string back quote konstan salah. Kutipan kembali harus selalu di dalam string.

Penggunaan konstruksi bahasa% s tidak disarankan.

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

...

Superglobal

Penggunaan langsung% s Superglobal terdeteksi.

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

Sql

Permintaan Baku

Kemungkinan pernyataan SQL mentah% s terdeteksi

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

...

Permintaan Lambat

Kemungkinan pernyataan SQL lambat% s terdeteksi

Kemungkinan metode SQL lambat% s terdeteksi

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

...

String

RegEx

Kemungkinan ekspresi reguler yang dapat dieksekusi dalam% s. Pastikan polanya tidak mengandung pengubah "e"

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

...

String Concat

Gunakan operator + untuk menggabungkan dua string yang terdeteksi

...

Posisi String

Operator identik === tidak digunakan untuk menguji nilai pengembalian fungsi% s

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

Pertanyaan & jawaban terkait untuk

sv3n
sumber
LOL tentang posting ini, Anda menulis hampir sebuah dokumen :)
PЯINCƏ
@ Pangeran orang lain dapat sedikit membantu menyelesaikan ini: P
sv3n
Saya tidak berpikir begitu :)
PЯINCƏ
ada alternatif untuk stripcslashes ()? @ sv3n terima kasih atas pertanyaan dan jawaban uraian seperti itu :)
Keyur Shah
@KeyurShah No. Entah mengabaikan peringatan atau mencoba menghindari "sebelum" :) Jika Anda menggunakannya? Mungkin menambahkan ini sebagai pertanyaan?
sv3n

Jawaban:

6

Fungsi Terlarang

file_exists ()

Penggunaan fungsi file_exists () dilarang

salah:

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

benar:

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

atau

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

GetFirstItem

getFirstItem () tidak membatasi hasil pengumpulan koleksi untuk satu item.

salah:

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

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

benar:

Terapkan batas sebelum mengambil data.

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

atau

$collection->setPageSize(1, 1)

Contoh:

Koleksi dengan 750 produk ...

Tanpa membatasi sebelumnya:

  • Total Termasuk Waktu Dinding (microsec): 2.116.522 microsecs
  • Total Termasuk CPU (mikrod): 2.101.688 mikrod
  • Total Termasuk MemUse (byte): 4,783.504 byte
  • Total Termasuk PeakMemUse (bytes): 4.363.112 byte
  • Jumlah Panggilan Fungsi: 104.187

Dengan menggunakan getSelect()->limit(1):

  • Total Termasuk Waktu Dinding (microsec): 149.803 microsecs
  • Total Termasuk CPU (mikrod): 131.405 mikrod
  • Total Termasuk MemUse (bytes): 2.384.840 bytes
  • Total Termasuk PeakMemUse (bytes): 1,827.112 byte
  • Jumlah Panggilan Fungsi: 5.327

Dengan menggunakan setPageSize(1, 1)

  • Total Termasuk Waktu Dinding (microsec): 155.025 microsecs
  • Total Termasuk CPU (mikrod): 136.191 mikrod
  • Total Termasuk MemUse (byte): 2,413,128 byte
  • Total Termasuk PeakMemUse (bytes): 1.856.064 byte
  • Jumlah Panggilan Fungsi: 5.515

catatan:

Peringatan ini akan tetap muncul, bahkan jika Anda membatasi koleksi Anda sebelumnya. Untuk menyingkirkan pesan ini, gunakan $collection->getLastItem()saja.

sv3n
sumber
Saya mendapatkan Data access method LIMIT detected outside of Resource Modelketika menggunakan limit`
Amit Patel
1
Berikut ini rincian lebih lanjut
Amit Patel
5

Fungsi Terlarang

curl_xyz

Penggunaan fungsi curl_init (), curl_setopt (), curl_exec (), curl_close () dilarang

salah:

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

benar:

$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();
sv3n
sumber
Saya menggunakan kode di atas dan itu memberi saya kesalahan Uncaught Error: Class 'Custom\Rma\Helper\Varien_Http_Adapter_Curl' not found. Cara menggunakan kelas saya menemukannya di vendor tetapi tidak berhasil.
Nitin Pawar
@NitinPawar dapatkah Anda membuka pertanyaan baru? Tampaknya ada yang salah dengan kode Anda.
sv3n