Cron функция не отрабатывает php скрипт

Есть функция php которая лежит по адресу от корневого файла cron\update.php в ней находиться просто тестовый код, который генерирует txt страницы.

<?php file_put_contents($_SERVER["DOCUMENT_ROOT"].'/cron/'.date('H-i-s_d-m-Y').'.txt', "123");

Функция проверена и она отрабатывает. При создании cron запроса который по идеи должен выполняться каждую минуту OpenServer

%progdir%\modules\php\%phpdriver%\php-win.exe -c %progdir%\modules\php\%phpdriver%\php.ini -q -f %sitedir%\btsports.loc\cron\update.php

введите сюда описание изображения

Эта функция не срабатывает. Можете подсказать в чём может быть проблема? *В логах запросы вижу, но результата выполнения - нет. введите сюда описание изображения


Ответы (3 шт):

Автор решения: Давид Манжула

Cron - не браузер. При запросе HTTP-сервер (Apache, Nginc, etc.) добавляют свои стандартные и общепринятые поля.
Cron - это консольный запуск.

Чтоб дебажить такие приложения, добавьте в PATH папку интерпретатора PHP. Далее запускайте файл из консоли и смотрите результат выполнения.
Только учтите что переменные %phpdriver% и %progdir% - переменные чисто OpenServer'а, и их лучше прописать явно.


К решению вашей проблеммы. Во первых, как уже сказали, в консоли нету $_SERVER["DOCUMENT_ROOT"]. Поэтому лучше отталкиватся от директории, в которой лежит скрипт.
Так же, в коде, что вы указали в комментариях, вы пытаетесь создать файл в папке, которая не существует. В таком случае папка сама не создадится.

Поэтому нужно её создать. Вот такое решение получилось у меня:

<?php
$logDirectory = dirname(__FILE__) . "/cron";
$logFilename = $logDirectory . "/" . date("H-i-s_d-m-Y") . ".txt";
if(!is_dir($logDirectory)){
  mkdir($logDirectory);
}

file_put_contents($logFilename, "123");

Совет который меня не просили: Лучшая практика формата временной метки для имен файлов - "Y-m-d_H-i-s". В таком случае, при сортировке файлов по имени они будут идти в хронологическом порядке.
У вас же (например), вы сначала увидите в папке все файлы за месяц, что были сделаны в 1 час, потом в 2 часа, пото в 3 часа.

→ Ссылка
Автор решения: newman

Попробуйте вот так

<?php file_put_contents(__DIR__ . date('H-i-s_d-m-Y') . '.txt', "123"); 
→ Ссылка
Автор решения: BlackStar1991

Вот так выглядел путь, если крон файл из другой дериктории запускаеться:

<?php file_put_contents('E:\\OSPanel\\domains\\test.loc\\cron\\' . date('H-i-s_d-m-Y') . '.txt', "123");

или короткая запись

<?php file_put_contents(__DIR__. '\\' . date('Y-m-d_H-i-s') . '.txt', '123');

→ Ссылка