#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