[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как объединить несколько заданий Cron в один файл
Евгений1721
Здравствуйте, подскажите пожалуйста

Как объединить несколько заданий Cron.php (Обновление ЦенТоваров) в один файл (Cron1.php, Cron2.php, Cron3.php и т.д. будет добавляться со временем)

Дано:
Файл CeniTovary.csv (Внем содержаться цены на товар). АртикулТовара^Цена. Пример:

36^1450,00
37^2450,00
38^3450,00
39^4450,00
40^5450,00
----------
20356^130,00


Файл Script1.php // Разбивает большой CeniTovary.csv(Прайс товаров) на МаленькиеФайлы.csv запускается по средствам задания Cron. Создает file1.csv; file2.csv; file3.csv

<?php
$start_time = microtime(true);

$csv_array = file('/home/www/site.ru/CeniTovary.csv'); // считываем файл необходим для разделения

$strings_in_file = 2000; //указываем количество строк для разделения
$string_counter = 0; //позиция строк
$file_counter = 1; //счетчик контейнеров для файлов разбива

for($i=0; $i<count($csv_array); $i++)
{
//если счетчик разбива равен $strings_in_file закрываем старый файл и добавляем 1 к $file_counter
if($string_counter == $strings_in_file)
{
$string_counter = 0; //обнуляем позицию строк после записи
fclose($fp);
unset($fp); // Удаляет переменную
echo "Файл file$file_counter.csv успешно создан<br>";
$file_counter++;
}
//если файл для записи не открыт открываем его
if(!$fp) $fp = fopen('/home/www/site.ru/file'.$file_counter.'.csv', 'w'); // 'w' Открывает файл только для записи; помещает указатель в начало файла и обрезает файл до нулевой длины. Если файл не существует - пробует его создать.

//записываем строку и прибавляем к счетчику 1

fputs($fp, $csv_array[$i]); // Бинарно-безопасная запись в файл
$string_counter++; // Добавляем +1 к контейнеру
}
if($fp){
fclose($fp);
echo "Файл file$file_counter.csv успешно создан<br>";
}
$exec_time = microtime(true) - $start_time;// выполнение действий
echo "<p>".'Время исполнения '.$exec_time."</p>";
?>


Файлы Cron1.php; Cron2.php; Cron3.php (Будут добавляться)// Подгружают Прайсы товаров в БД запускаются по средствам задания в Cron

<?php
// Cron1.php // Cron2.php и Cron3.php аналогичны, подключают только file2.csv и file3.csv соответственно
$start_time = microtime(true);

if ($handle = fopen("/home/www/site.ru/file1.csv", "r")){ // Путь

$dblocation = "server.adress.ru"; //замените localhost на свой адрес сервера БД
$dbname = "admin"; // измените bdname на ваше Название БД
$dbuser = "admin"; // bduser замените на ваш Логин пользователя БД
$dbpasswd = "12345"; // Пароль пользователя БД
$pref = "555_"; //Префикс для названия таблиц в БД

$dbcnx = mysql_connect($dblocation, $dbuser, $dbpasswd);
if (!$dbcnx)
{
echo "<p>К сожалению, не доступен сервер mySQL</p>";
exit();
}
if (!mysql_select_db($dbname,$dbcnx) )
{
echo "<p>К сожалению, не доступна база данных</p>";
exit();
}
mysql_query ("set character_set_client='utf8'");
mysql_query ("set character_set_results='utf8'");
mysql_query ("set collation_connection='utf8'");

// Обновление прайсов в БД
while (($data = fgetcsv($handle, 0, "^")) !== FALSE) {
$select = mysql_query("SELECT `virtuemart_product_id` FROM `".$pref."virtuemart_products` WHERE `product_sku` = '$data[0]' ");
$product_id = mysql_result($select,0);
// Обновление цен товаров в БД
$update1 = mysql_query("UPDATE `".$pref."virtuemart_product_prices` SET `product_price` = '$data[1]' WHERE `virtuemart_product_id` ='$product_id'");
}

echo "О, чудо Файл file1.csv экспортирован в БД успешно. Всё прошло успешно!"";
$exec_time = microtime(true) - $start_time;// выполнение действий
echo "
<p>".'Время исполнения '.$exec_time."</p>";
fclose(
$handle);
}else{
echo 'Файл не открыт';
}
?>



Резюме: Все это сделано с той целью что бы не перегружать выполнение скрипта на сервере хостинга (не более 30 сек), т.к. исходный ФайлПрайсТовары.csv достаточно большой, если весь разом грузить через Cron1.php -> ФайлПрайсТовары.csv, то сервер выдает ошибку "Превышен интервал времени исполнения и т.д. (Ошибка 502 вроде)"

Сейчас заданий Cron уже 4 шт. (В процессе они только будут добавляться)

Время (23.00 каждый день) Задание
00 23 * * * /home/www/site.ru/Script1.php
01 23 * * * /home/www/site.ru/Cron1.php
02 23 * * * /home/www/site.ru/Cron2.php
03 23 * * * /home/www/site.ru/Cron3.php


Вопрос: Подскажите пожалуйста можно ли как то это все прописать Одним файлом и как следствие использовать одно задание Cron при этом не вызывая перезагрузки сервера на выполнения всех операций этих скриптов (Script1.php и Cron1.php; Cron2.php и др.)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.