@razorvinbofg

Как замедлить время выполнения?

Как можно замедлить время скрипта ? 4 цикла проходит нормально, на 5 сервер уходит в защиту и скрипт выдает ошибку
1368
Fatal error: Uncaught Error: Call to a member function find() on boolean in C:\OSPanel\domains\pars\index.php:27 Stack trace: #0 {main} thrown in C:\OSPanel\domains\pars\index.php on line 27


<?php
require_once('simple_html_dom.php'); //Библиотека для парсинга
require_once('curl_query.php'); //парсинг
require_once('model.php'); //функционал
require('db.php'); //база даных

//Запрос к базе
$query = "SELECT * FROM seria";
$result = $mysql->query($query);

//вытащить все из базы в массив
while ($row = $result->fetch_assoc()) {
	$id[] = $row["id"];
	$silka[] = $row["silka"]; 
	$series[] = $row["series"];
};


$count = count($id); 

for($i = 0; $i < $count; $i++){
	$html =  curl_get($silka[$i]); //ссылка на сереал
	$dom = str_get_html($html); //парсить страницу
	$finds = $dom->find('.added-info'); 

	foreach($finds as $find){
		$tfind = trim($find->plaintext);
		if($series[$i] === $tfind){
			echo $id[$i];
			sleep(5);
		}
		else{
			$sql = "UPDATE `seria` SET `series` = '$tfind' WHERE `seria`.`id` = $id[$i]";
			$mysql->query($sql);
			message_to_telegram("Вышла новая серия".$series[$i].$silka[$i]);
			echo $id[$i];
		};
	};

};
  • Вопрос задан
  • 127 просмотров
Пригласить эксперта
Ответы на вопрос 2
@pantsarny
usleep(250000)
пауза на четверть секунды
Ответ написан
Комментировать
kawabanga
@kawabanga
for ($i = 0; $i < $count; $i++) {
    sleep(5); // Я бы тут поигрался с sleep.

    // $html = curl_get($silka[$i]); // Ссылка на сериал
    // А вот тут я бы проверял, что запрос дошел. Можно кастомизировать, но в простом случае
    $stopAsking = false;
    $countRequests = 0;

    while (!$stopAsking) {
        try {
            $html = curl_get($silka[$i]); // Здесь в функции выбрасывайте исключение и ловите его с помощью https://www.php.net/manual/en/function.curl-error.php
            $stopAsking = true;
        } catch (Exception $e) {
            sleep(1); // Подвязать логику слипа на количество запросов
            $countRequests++;

            if ($countRequests > 5) {
                $stopAsking = true; // И прерывать действие части скрипта, которая делает запрос на сервер.
            }
        }
    }

    if ($countRequests > 5) {
        continue;
    }

    $dom = str_get_html($html); // Парсить страницу

    $finds = $dom->find('.added-info');

    foreach ($finds as $find) {
        $tfind = trim($find->plaintext);
        if ($series[$i] === $tfind) {
            echo $id[$i];
            sleep(5); // У вас это запускается только в случае, если будет finds. В принципе, sleep тут не нужен уже, так как выработаете с готовой страницей. Но, например, если $finds = $dom->find('.added-info'); - не будет, то следующий запрос будет моментален.
        } else {
            $sql = "UPDATE `seria` SET `series` = '$tfind' WHERE `seria`.`id` = $id[$i]";
            $mysql->query($sql);
            message_to_telegram("Вышла новая серия" . $series[$i] . $silka[$i]);
            echo $id[$i];
        }
    }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы