Запуск скрипта из скрипта. Как это выполнить? В проекте участвует два файла:
1) timemap.php файл предназначен для генерации временных меток из указанного промежутка времени, которые распределены во времени по кривой Гаусса. Например задан промежуток между 9-00 и 22-00. В результате основная масса меток будет сосредоточена в середине промежутка, те между 15 и 16 часами. После отработки скрипта будет сформирован документ tmemap.txt с перечнем временных меток.
2) loadscript.php файл читает документ с метками времени построчно и если текущее время больше метки — происходит выполнение скрипта с одновременным удалением метки из файла, если меньше — ничего не происходит.
В cron нужно сделать запуск php скрипта timemap в начале суток. В результате у вас будет расписание на день.
timemap.php
<?php require 'config/function.php'; // echo $date = date('Y-m-d'); // echo '<br>'; // echo time(); function gauss() { // https://php.net/manual/ru/function.rand.php $randmax = 9999; // twelve random numbers $sum = 0; for ($i = 0; $i < 10; $i++) { $sum += rand(0, $randmax) / $randmax; } return $sum; } /* случайно(Gauss) выбирает 11 меток времени между 9-00 : 22-00*/ function getTimemap($count = 10,$mark_time_9 = 9,$mark_time_22 = 22) { $mark_time_9 = mktime(9, 0, 0, date('m'), date('d'), date('Y')); // 9,0,0 - 9 часы минуты секунды $mark_time_22 = mktime(22, 0, 0, date('m'), date('d'), date('Y')); // 22,0,0 - 22 часы минуты секунды unlink('timemap.txt'); $interval = $mark_time_22 - $mark_time_9; $a = 0; while ($a <= 11) { $array[] = gauss(); $a++; } sort($array); // p($array); $summ = 0; $mark_time = $mark_time_9; for ($i=0; $i < 11; $i++) { $rus = ($array[$i+1]-$array[$i])/($array[11]-$array[0]); echo $mark_time = round($interval*$rus+$mark_time+rand(-600,600)); // еще добавляет +-10 минут к метке, чтобы последняя метка не была круглой 22-00 file_put_contents('timemap.txt', $mark_time . PHP_EOL , FILE_APPEND); $out_time = getdate($mark_time); echo '<br>'; echo $out_time['hours'] .':'. $out_time['minutes']; echo '<br>'; $sum = $sum + $rus; } } getTimemap(); // 1490900401 tscript(); ?>
В результате получается файл такого вида:
1490858790 1490862979 1490867379 1490874214 1490876681 1490877007 1490887169 1490887813 1490889182 1490891907 1490901705
Этот файл используется в дальнейшем для организации запуска php скрипта по расписанию.
checktime.php
<?php require 'config/function.php'; // читает первую строку из файла и удаляет ее function rFString($namefile) { $array = file($namefile); $firststring = $array[0]; array_shift($array); $result=implode('',$array); $file=fopen($namefile,"w"); fwrite($file,$result); fclose($file); return(trim($firststring)); } function runScript($timemap,$urlscript) { $request = file($timemap); if(time() >= $request[0]){ rFString($timemap); echo file_get_contents($urlscript); }else{ echo 'wait...<br>=====<br>'; echo 'Time now: '.date('H:i:s'); echo '<br>'; $out_time = getdate($request[0]); echo 'Time run script: '.$out_time['hours'] .':'. $out_time['minutes'].':'. $out_time['seconds']; } } $timemap = 'timemap0.txt'; $urlscript = 'https://2017.scripts/13week/loaderscript/loadscript.php'; runScript($timemap,$urlscript); tscript(); ?>
Используемые стандартные функции:
- getdate() для получения из метки времени «красивого вывода»: 19:20:21 часы:минуты:секунды
- mktime() для получения метки времени конкретной даты: 2017-03-30 9:00