GoldenEagle88
@GoldenEagle88

Как ускорить работу php скрипта?

Есть бд в ней 100-1000 аккаунтов.И каждый аккаунт должен выполнить какое то действия.
<?php
set_time_limit(0);
$res=mysqli_query($CONNECT, "SELECT * FROM `account`");
while($row=mysqli_fetch_assoc($res)){
$login=$row['login'];
$likes=trim($row['id']);
$account=trim($row['id_account']);   
$user=trim($row['id_users']);
$p1=trim($row['proxy']);   
$p2=trim($row['proxy_login']);
if($row['work']==1){
if(trim($row['like'])==1)
{
$respons=send('http://site.ru/elike','',1,$user,$account,$p1,$p2);
preg_match('/points\'>(.*?)</', $respons, $balance);
$respons=send('http://site.ru/wait.php','',1,$user,$account,$p1,$p2);
preg_match('/link=(.*?)\n/', $respons, $like);
if ($like[1]==''){
echo $login.' нету лайков<br>';   
}else {
$respons=send(trim($like[1]),'',1,$user,$account,$p1,$p2);
$last=$like[1];
preg_match('/media\?id=(.*?)"/i', $respons, $id);
$respons=like('https://www.instagram.com/web/likes/'.trim($id[1]).'/like/',1,0,$user,$account,$p1,$p2);
$json = json_decode($respons);
if ($json->status=='ok'){
mysqli_query($CONNECT, "UPDATE `account`  SET `balance` = '$balance[1]' WHERE `id` = '$likes'");
mysqli_query($CONNECT, "UPDATE `account`  SET `last` = '$last' WHERE `id` = '$likes'");
mysqli_query($CONNECT, "UPDATE `account`  SET `last_work` = 'like' WHERE `id` = '$likes'");
$respons=send('http://socgain.com/check/check_likes.php','',1,$user,$account,$p1,$p2);
echo $login.' лайк<br>';
}
else {
echo $login.' ошибка<br>';   
}   
}
}
}
}
?>

Но если в бд больше 50 аккаунтов ,скрипт просто зависает и выдает 500 ошибку.
Скрипт перебирает аккаунты инстаграм в базе и ставит лайки( через Curl с прокси).
Как можно ускорить работу скрипта?
  • Вопрос задан
  • 1353 просмотра
Пригласить эксперта
Ответы на вопрос 3
скрипт зависает из-за окончания время ожидания (т.е курл слишком долго получает ответ от сервера)

1. mysqli_query($CONNECT, "SELECT * FROM `account`") добавить LIMIT
2.
mysqli_query($CONNECT, "UPDATE `account` SET `balance` = '$balance[1]' WHERE `id` = '$likes'");
mysqli_query($CONNECT, "UPDATE `account` SET `last` = '$last' WHERE `id` = '$likes'");
mysqli_query($CONNECT, "UPDATE `account` SET `last_work` = 'like' WHERE `id` = '$likes'");

Зачем 3 запроса когда все это можно делать в 1?
Ответ написан
Комментировать
dimonchik2013
@dimonchik2013
non progredi est regredi
1) мультикурл
2) gearman

3) ну и асинхронный PHP
Ответ написан
Комментировать
curl тратит много времени на соединение, старьте лайки маленькими пачками по 10 аккаунтов и точно измерьте время запроса, время обработки одного аккаунта. Вдруг у вас там индексы не стоят.
Про trim верно сказали, данные в БД должны быть очищены уже, хотя это, конечно, экономия на спичках...
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы