Пожалуйста оцените мое убогое ООП? regxp = '/(^\d+.\d+.\d+.\d+)\s*- -\s*([[]\d+\/\S+\s*[-|+]\d+])\s*"((POST|GET) \S+\s*\S+)"\s(\d+)\s*(\d+|-)\s*(\d+ \d+)?\s*"(http:\/\/\S+)"\s*"(\S+)\s*\(((compatible;\s*\S+ \d+.\d;))?(\s*\S+\s*\S+\s*\d+.\d+; \S+\s*\S+)\s*(\(\S+\s*\S+\s*\S+)?(\s*\D+)?/';
$this->path = 'http_access.log';
}
// Читаем файл и достаем строки из $this->path
function read_file()
{
if($handle = fopen($this->path, "r")){
while(!feof($handle)) {
yield trim(fgets($handle));
}
fclose($handle);
}
}
// Получаем интересующие нас значения файла с помощью регулярки
function get_log_array()
{
$iterator = $this->read_file();

foreach ($iterator as $v => $k) {
if(preg_match($this->regxp, $k, $m)){
$ips[] = $m[1];
$traffic[] = $m[6];
$statusCode[] = $m[5];
$urls[] = $m[12];
$main = array(
'ips' => $ips,
'traffic' => $traffic,
'statusCode' => $statusCode,
'urls' => $urls,
);
}
}
return $main;
}
// Получаем кол-во ip
function get_views()
{
return count($this->get_log_array()['ips']);
}
// Получаем трафик
function get_traffic()
{
$traffic_arr = $this->get_log_array()['traffic'];
for ($i = 0; $i get_views(); $i++) {
$traffic += (int)$traffic_arr[$i];
}
return $traffic;
}
// Получаем кол-во уникальных url
function get_urls(){
$urls = $this->get_log_array()['urls'];
for ($i = 0; $i get_views(); $i++) {
$urls[] .= $urls[$i];
}
return count(array_unique($urls));
}
// получаем статус-код
function get_status_codes(){
$status_codes = $this->get_log_array()['statusCode'];
$a = $b = 0;
for ($i = 0; $i $a,
'301' => $b,
);
return $sc;
}
// Формируем массив и json файл с этим массивом
function create_json(){
$file = file_get_contents('result.json');
$log = json_encode($file, TRUE);
unset($file);
$log = array(
'views' => $this->get_views(),
'urls' => $this->get_urls(),
'traffic' => $this->get_traffic(),
'crawlers' => [
'Google' => 2,
'Bing' => 0,
'Baidu' => 0,
'Yandex' => 0,
],
'statusCodes' => $this->get_status_codes('http_access.log'),
);
file_put_contents('result.json', json_encode($log, JSON_PRETTY_PRINT));
unset($log);
}
}
$obj = new MyParser();
$obj->create_json();
Суть в том что мне дали задание распарсить файл в котором такие строки:
84.242.208.111- - [11/May/2013:06:31:00 +0200] "POST /chat.php HTTP/1.1" 200 354 "bim-bom.ru" "Mozilla/5.0 (Windows NT 6.1; rv:20.0) Gecko/20100101 Firefox/20.0"
это одна строка.
Нужно было достать из строки интересующую информацию и отправить ее в json файл.{
"views": 16,
"urls": 4,
"traffic": 187990,
"crawlers": {
"Google": 2,
"Bing": 0,
"Baidu": 0,
"Yandex": 0
},
"statusCodes": {
"200": 14,
"301": 2
}
}
Я сделал как просили, все работает. Но мне почему-то отказали с этим решением. Очень хотелось бы узнать почему.
Вообщем нужна критика кода и ооп)

21 Авг 2019 в 06:59
172 +1
0
Ответы
1

Не очень хорошо использовать yield в методе read_file(), так как это усложняет понимание кода. Лучше прочитать весь файл и вернуть массив строк.

В методе get_log_array() не лучше задавать ключи массива напрямую, лучше создать временные переменные и затем сделать массив.

В методе get_traffic() есть проблема с инициализацией переменной $traffic. Лучше ее объявить перед циклом.

Метод get_urls() возвращает неверное количество уникальных url из-за ошибки в цикле.

Метод get_status_codes() не использует аргумент, который ему передается, и имеет лишний цикл. Лучше передавать переменную в метод через параметр.

Не очень понятно, зачем читать файл в методе create_json(), если у вас уже есть все данные из файла. Лучше передавать данные в метод через параметр.

В методе create_json() не нужно использовать unset() для удаления переменных.

Необходимо лучше структурировать код, разделяя его на более мелкие методы и следуя принципам SOLID.

Комментарии к методам и переменным помогут лучше понять, что делает каждая часть кода.

Это некоторые из основных проблем в вашем коде. Пожалуйст, попробуйте учесть эти замечания при изменении вашего кода.

20 Апр в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 95 047 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир