Дублируются записи в базе данных

89
23 мая 2021, 00:20

Всем привет.

Возникла необходимость перевести сайт, который представляет из себя около 10 тысяч html статичных страничек, перевести на php с подгрузкой информации из базы данных.

Написал скрипт php , который сканирует папку с html страничками и берет из них важные блоки.

Но проблема в том что файлов 10 тысяч, а записей в базу создается более 200 тысяч. Запускаю через cron на openserver. Перед запуском скрипта таблицу очищаю. Повторные запуски исключены, так как после того как скрипт запускается я его комментирую.

$link = mysqli_connect("localhost", "root", "", "pages");
$directory = 'pages/';
$scandir = scandir($directory);
$metatag_content = '';
$categories_panel = '';
for ($i=0; $i<count($scandir); $i++) {
    if ($scandir[$i] != '.' && $scandir[$i] != '..' && $scandir[$i] != '.htaccess') {
        if (($result = mysqli_query($link,"SELECT * FROM `content_lite_add_tabs` WHERE `name` = '".$scandir[$i]."'")) && mysqli_num_rows($result) == 0 ) {
            $data = file_get_contents($directory.$scandir[$i]);
            $data = preg_replace("#<script[^>]*>.*?<\/script>#is", "", $data);
            $data = preg_replace("#<meta[^>]name=\"description\"[^>]*>#is", "", $data);
            preg_match_all('/<head[^>]*?>.*?<\/head>/is', $data, $head);
            preg_match_all('/<form[^>]*?action="\/basket\/add.php"[^>]*?>.*?<\/form>/is', $data, $form);
            preg_match_all('/<ul[^>]*?class="breadcrumbs"[^>]*?>.*?<\/ul>/is', $data, $breadcrumbs);
            preg_match_all('/<h2[^>]*?class="tabs__head"[^>]*?>.*?<\/h2>/is', $data, $tabs__head);
            preg_match_all('/<div[^>]*?class="tabs__body"[^>]*?>.*?<\/div>/is', $data, $tabs__body);

            if (preg_match("/<meta[^>]*?property=\"og:type\"[^>]*?content=\"product\"[^>]*?>/is", $data)) {
                $metatag_content = 'product'; 
            } elseif (preg_match("/<meta[^>]*?property=\"og:type\"[^>]*?content=\"product.group\"[^>]*?>/is", $data)) {
                $metatag_content = 'product.group';
            } else {
                $metatag_content = '';
            }
            $data = (isset($form[0]) && isset($head[0]) && isset($head[0]) && isset($tabs__head[0]) && isset($tabs__body[0])) ? $head[0][0].$breadcrumbs[0][0].$form[0][0].$tabs__head[0][0].$tabs__body[0][0] : "";
            unset($head, $breadcrumbs, $tabs__head, $tabs__body);
            if (!empty($data)) {
                mysqli_query($link, "INSERT INTO `content_lite_add_tabs` (`data`, `name`, `metatag_content`) VALUES ('".addslashes($data)."', '".$scandir[$i]."', '".$metatag_content."');");
            }
        }   
    }
}

Причем если счетчик в цикле, то он пишет что итераций цикла было столько и страниц.

Раньше скрипт работал быстро и без дублей. МОжет ли такое быть из-за того что добавил в базе поле id с первичным ключем и индексом?

READ ALSO
получение reactions в slack

получение reactions в slack

Как получить reactions в Slack зная его timeStamp? Используя JavaУ меня бот видит новые сообщения и всю информацию об сообщении, но обратиться к старому...

110
hibernate many to many и ошибка java.sql.SQLIntegrityConstraintViolationException: Duplicate entry

hibernate many to many и ошибка java.sql.SQLIntegrityConstraintViolationException: Duplicate entry

Есть унаследованная база данных, пытаюсь построить вокруг нее приложениеПроблема в том что я получаю периодически Duplicate entry при попытке вставить...

131