Есть общий скрипт:
<?php
$connect=new mysqli("localhost","","","");
$connect->query("SET NAMES 'utf8'");
clear_table("a",$connect);
clear_table("b",$connect);
clear_table("c",$connect);
...
include_once 'data_new.php';
exec('php data_new.php'); //insert данных в foreach
include_once 'data_old.php';
exec('php data_old.php'); //insert данных в foreach
include_once 'data_fut.php';
exec('php data_fut.php'); //insert данных в foreach
function clear_table($table, $connect){
$sql = "DELETE FROM ".$table;
$connect->query($sql);
$sql = "ALTER TABLE ".$table." AUTO_INCREMENT = 1";
$connect->query($sql);
}
?>
Каким образом сделать так, чтобы каждый clear_table и каждый exec выполнялся поочередно, а то при запуске выдает ошибку (Ошибка 504 Gateway Timeout (time out) nginx) ?
Можно поочерёдно выполнять разные блоки case'ов, передавая в switch() GET-параметры, и в каждом case'е выполнять перенаправление на следующий по порядку case. Теоретически, этот код должен запускаться при клике по ссылке "Запуск", и останавливаться после выполнения последнего блока case: 3:
$connect=new mysqli("localhost","","","");
$connect->query("SET NAMES 'utf8'");
$k = isset($_GET['k']) ? abs($_GET['k']) : 0;
switch ($k) {
case 1:
clear_table("a", $connect);
// include_once 'data_new.php';
exec('php data_new.php'); //insert данных в foreach
header('Refresh:0; url=?k=' . ++$k);
break;
case 2:
clear_table("b",$connect);
// include_once 'data_old.php';
exec('php data_old.php'); //insert данных в foreach
header('Refresh:0; url=?k=' . ++$k);
break;
case 3:
clear_table("c",$connect);
// include_once 'data_fut.php';
exec('php data_fut.php'); //insert данных в foreach
header('Refresh:0; url=' . basename(__FILE__));
break;
default:
echo '<a href="?k=1">Запуск</a>';
break;
}
function clear_table($table, $connect){
$sql = "DELETE FROM ".$table;
$connect->query($sql);
$sql = "ALTER TABLE ".$table." AUTO_INCREMENT = 1";
$connect->query($sql);
}
Надо просто убрать строчки с exec() (или include, на выбор)
Тогда этот код перестанет выполнять каждый скрипт по два раза и станет работать значительно быстрее.
Плюс, если там вставки в цикле, то заключить их в транзакции
Ошибка 504 Gateway Timeout (time out) nginx
В вашем php скрипте нужно увеличить время выполнения, это можно сделать следующим образом
<?php
set_time_limit(0); // 0 Без-конечно или же другое время в секундах
Раз у вас ругается NGINX нужно править его конфиг, на ограничения ngixn влияют следующие настройки, это с учетом что у вас за ним стоит apache а не что-то вроде PHP-FPM
# Где-то в nginx.conf - файле
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
Продвижение своими сайтами как стратегия роста и независимости