PHP: Запуск скрипта из скрипта

Запуск скрипта из скрипта. Как это выполнить? В проекте участвует два файла:

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
Рейтинг
( 1 оценка, среднее 4 из 5 )
Загрузка ...