Цикл Foreach не работает в cronjob в php

#php #cron

#php #cron

Вопрос:

Я написал скрипт для проверки только файлов CSV и их удаления.

 $dir = $getData['ftp_location']; //get the dir locations from db
echo $dir;
echo nl2br("n"); 

$files = glob("$dir/*.csv"); //get only csv files

echo $files;
echo nl2br("n");

foreach ($files as $tmpname)
{
   //do some stuff. I have also done echo here it is not working.
   echo "File Deleted";
}
 

Итак, я попробовал простой код foreach, подобный этому:

 $colors = array("red", "green", "blue", "yellow");

foreach ($colors as $value) 
{
      echo "$value <br>";
}
 

Примечание: При каждом запуске я получаю электронное письмо с сообщением о том, что cronjob успешно запущен с напечатанным echo.

Напишите вот так:

./files/pvc/
Array

Я не получаю эхо внутри цикла foreach.

Например, «файл удален» или «цвета»

Если я запускаю тот же код напрямую, он работает нормально, но не через cronjob. Есть идеи, почему?

Комментарии:

1. glob() действительно возвращает массив, поэтому электронное письмо правильное.

2. Да, но я не получаю эхо внутри foreach. Для простого кода, такого как печать цветов внутри массива.

3. ОК. В вашем коде может быть ошибка. Проверьте журнал ошибок PHP. Еще одна вещь, которая может быть проблемой, — это каталог, из которого запускается скрипт. Это может быть не то же самое, когда вы используете скрипт напрямую и когда вы используете cron. Убедитесь, что каталог и пути к файлам начинаются с корня файловой системы.

Ответ №1:

Потому что путь csv является относительным путем.

Когда выполняется cron, текущий путь к каталогу совпадает с двоичным путем php (например: /usr/bin/php).

Пожалуйста, используйте абсолютный путь.

 $dir = __DIR__. DIRECTORY_SEPARATOR. $getData['ftp_location']; //get the dir locations from db