Tuân thủ ECG: Làm thế nào?


10

Có một cái gì đó giống như coding standardcho Magento 1 , được gọi là ECGnơi nên tránh nhiều thứ hoặc các phương pháp không nên sử dụng.

Hãy thử tạo một danh sách bao gồm tất cả các trường hợp đang ném "lỗi" hoặc "cảnh báo" trong mã của bạn.

Dưới đây bạn sẽ tìm thấy một danh sách với tất cả các cảnh báo có thể. Tôi sẽ cập nhật bài đăng này đều đặn và liên kết đến các câu trả lời được đưa ra và nâng cao.

Lưu ý: vui lòng cố gắng tránh các câu trả lời trùng lặp;)

Tải xuống: https://github.com/magento-ecg/coding-st Chuẩn


Đánh hơi điện tâm đồ

Các lớp học

Mysql4

Các lớp Mysql4 đã lỗi thời.

Khởi tạo đối tượng

Khởi tạo đối tượng trực tiếp (lớp% s) không được khuyến khích trong Magento.

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

...

PHP

Đi đến

Sử dụng goto là không khuyến khích.

...

Không gian tên

Không gian tên cho lớp "'. $ ExceptionClassName.'" Không được chỉ định.

...

Thành viên lớp tư nhân

Phát hiện thành viên lớp tư nhân.

...

Var

Phát hiện thành viên lớp tư nhân.

...

Hiệu suất

Bộ sưu tập

Tải không cần thiết của một bộ sưu tập dữ liệu Magento. Sử dụng phương thức getSize () để thay thế.

Tìm nạp

fetchAll () có thể không hiệu quả bộ nhớ cho các tập dữ liệu lớn.

...

GetFirstItem

getFirstItem () không giới hạn kết quả tải bộ sưu tập vào một mục.

Vòng

Hàm tính toán kích thước mảng% s được phát hiện trong vòng lặp

Mô hình LSD mô hình% s được phát hiện trong vòng lặp

Phương pháp tải dữ liệu% s được phát hiện trong vòng lặp

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

Bảo vệ

Acl

Thiếu phương thức ACL% s () trong lớp% s.

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

...

Chức năng không khuyến khích

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

...

Chức năng cấm

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

Bao gồm tập tin

Phát hiện "% s". Thao tác tập tin được khuyến khích.

... Tuyên bố không phải là một chức năng, không yêu cầu dấu ngoặc đơn.

... Vượt qua các url bị cấm.

... Việc kết nối bị cấm.

... Các biến bên trong không an toàn.

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

...

Ngôn ngữ xây dựng

Sử dụng không chính xác của chuỗi trích dẫn trở lại hằng số. Báo giá trở lại phải luôn luôn bên trong chuỗi.

Việc sử dụng cấu trúc ngôn ngữ% s không được khuyến khích.

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

...

Siêu lớp

Phát hiện trực tiếp% s Superglobal được phát hiện.

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

Sql

Truy vấn thô

Đã phát hiện câu lệnh SQL thô% s

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

...

Truy vấn chậm

Đã phát hiện câu lệnh SQL chậm% s

Có thể phát hiện phương thức SQL chậm% s

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

...

Dây

RegEx

Biểu thức chính quy có thể thực thi trong% s. Đảm bảo rằng mẫu không chứa công cụ sửa đổi "e"

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

...

Chuỗi concat

Sử dụng toán tử + để nối hai chuỗi được phát hiện

...

Vị trí chuỗi

Toán tử giống hệt === không được sử dụng để kiểm tra giá trị trả về của hàm% s

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

Câu hỏi và câu trả lời liên quan để


LOL về bài đăng này, bạn đã viết gần như một tài liệu :)
PЯINCƏ

@Prince người khác có thể giúp một chút để hoàn thành việc này: P
sv3n

Tôi không nghĩ vậy :)
PINCƏ 22/07/17

bất kỳ thay thế cho dải phân cách ()? @ sv3n cảm ơn vì câu hỏi và câu trả lời mô tả như vậy :)
Keyur Shah

@KeyurShah Không. Hoặc bỏ qua cảnh báo hoặc cố gắng tránh "trước" :) Trong trường hợp bạn sử dụng nó? Có thể thêm điều này như câu hỏi?
sv3n

Câu trả lời:


6

Chức năng cấm

File tồn tại()

Việc sử dụng hàm file_exists () bị cấm

sai:

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

chính xác:

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

hoặc là

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

5

GetFirstItem

getFirstItem () không giới hạn kết quả tải bộ sưu tập vào một mục.

sai:

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

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

chính xác:

Áp dụng giới hạn trước khi lấy dữ liệu.

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

hoặc là

$collection->setPageSize(1, 1)

Expamples:

Bộ sưu tập với 750 sản phẩm ...

Không giới hạn trước:

  • Tổng số bao gồm Thời gian treo tường (microsec): 2.116.522 microsec
  • Tổng số bao gồm CPU (microsec): 2.101.688 microsec
  • Tổng số bao gồm MemUse (byte): 4,783,504 byte
  • Tổng số bao gồm PeakMemUse (byte): 4.363.112 byte
  • Số lượng các cuộc gọi chức năng: 104.187

Với việc sử dụng getSelect()->limit(1):

  • Tổng số bao gồm Thời gian treo tường (microsec): 149.803 microsec
  • Tổng số bao gồm CPU (microsec): 131.405 microsec
  • Tổng số bao gồm MemUse (byte): 2.384.840 byte
  • Tổng số bao gồm PeakMemUse (byte): 1,827,112 byte
  • Số lượng các cuộc gọi chức năng: 5.327

Với việc sử dụng setPageSize(1, 1)

  • Tổng số bao gồm Thời gian treo tường (microsec): 155.025 microsec
  • Tổng số bao gồm CPU (microsec): 136.191 microsec
  • Tổng số bao gồm MemUse (byte): 2,413,128 byte
  • Tổng số bao gồm PeakMemUse (byte): 1.856.064 byte
  • Số lượng cuộc gọi chức năng: 5,515

Ghi chú:

Cảnh báo này vẫn sẽ bật lên, ngay cả khi bạn giới hạn bộ sưu tập của mình trước đó. Để thoát khỏi tin nhắn này sử dụng $collection->getLastItem()thay thế.


Tôi nhận được Data access method LIMIT detected outside of Resource Modelkhi sử dụng giới hạn`
Amit Patel

1
Dưới đây là chi tiết
Amit Patel

5

Chức năng cấm

curl_xyz

Việc sử dụng hàm curl_init (), curl_setopt (), curl_exec (), curl_close () bị cấm

sai:

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

chính xác:

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

Tôi đã sử dụng mã ở trên và nó đang cho tôi lỗi Uncaught Error: Class 'Custom\Rma\Helper\Varien_Http_Adapter_Curl' not found. Làm thế nào để sử dụng lớp tôi tìm thấy nó trong nhà cung cấp nhưng không có may mắn.
Nitin Pawar

@NitinPawar bạn có thể vui lòng mở một câu hỏi mới không? Một cái gì đó dường như là sai với mã của bạn.
sv3n
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.