Запуск скрипта из скрипта. Как это выполнить? В проекте участвует два файла:
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


