Ответы пользователя по тегу PHP
  • Как отследить ошибки 404 и записать?

    @DollaR84
    Код писал давно, возможно можно улучшить и оптимизировать, но лень было пока этим заниматься, работает, что мне надо исполняет :)
    Сначала в отдельный файл лучше скинуть несколько вспомогательных функций, чтобы не нагромождать код. Например, functools.php

    <?php
    
        function finder($string, $substring) {
            $pos = stripos($string, $substring);
            if ($pos === false) {
                return false;
            } else {
                return true;
            }
        }
    
        function cut_rows($data) {
            $result = array();
            foreach ($data as $str) {
                $row = array();
                $str = explode(" ", $str);
                $concat = false;
                $temp = "";
                foreach($str as $substr) {
                    if ((finder($substr, "[")) && (!finder($substr, "]"))) {
                        $temp = $substr;
                        $concat = true;
                    } else if ((finder($substr, "]")) && ($concat == true)) {
                        $temp .= " ".$substr;
                        $row[] = $temp;
                        $concat = false;
                    } else if (finder($substr, "\"")) {
                        $pos1 = stripos($substr, "\"", 0);
                        $pos2 = stripos($substr, "\"", ($pos1 + 1));
                    if (!($pos1 === false) && ($pos2 === false) && ($concat == false)) {
                            $temp = $substr;
                            $concat = true;
                        } else if (!($pos1 === false) && ($pos2 === false) && ($concat == true)) {
                            $temp .= " ".$substr;
                            $row[] = $temp;
                            $concat = false;
                        } else {
                            $row[] = $substr;
                        }
                    } else if ($concat == true) {
                        $temp .= " ".$substr;
                    } else {
                        $row[] = $substr;
                    }
                }
                $result[] = $row;
            }
            return $result;
        }
    
    ?>


    Теперь можно написать сам скрипт, который можно назначить на исполнение в cron, например runner.php

    <?php
    
        include('functools.php ');
        $data = file_get_contents("тут_путь_к_файлу_лога/access.log");
        $data = explode("\n", $data);
        array_pop($data);
        $data = cut_rows($data);
    
        // на данном этапе мы имеем массив строк, разбитый по колонкам
        // содержание запросов получается в колонке 4
        // у меня выбиралась статистика, поэтому готовой функции поиска запросов 404 я не делал, но думаю не составит труда составить подобную функцию
        // напомню, запрос будет в 4-м элементе данного массива $data
        // делаете перебор по нему и проверяете на необходимое вам
        // когда находите необходимый запрос - можно получить дополнительные данные следующие:
        // IP? с которого был запрос в элементе под индексом 0
        // дату можно получить под индексом 3? но она для всех данных в файле одинаковая, поэтому можно например так:
        $date = substr($data[0][3], 1, 11);
        // с 1 по 10 включительно символ - это именно дата: день, месяц и год
        // если надо время - оно в этой же строке, индексы вроде с 12 по 19 включительно, формат часы:минуты:секунды
        // но у каждого запроса оно свое. Тогда можно как-то так сделать:
        $time = substr($data[index][3], 12, 20);
        
        // ну а дальше подключение к БД и запись того что нужно, зависит от вашей структуры БД
    
    ?>
    Ответ написан