PHP - Сохранить crontab в базу - PullRequest
0 голосов
/ 18 июня 2020

У меня есть переменная, содержащая список из 3 заданий, которые могут быть созданы в linux, и я хотел бы сохранить каждую строку работы в своей базе данных:

$jobs = """
0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
"""
$array = explode(" ", $jobs);
$job = new Job;
$job->min = $array[0];
$job->hour = $array[1];
$job->day_month = $array[2];
$job->mes = $array[3];
$job->day_week = $array[4];
$job->command = "/bin/bash";
$job->save();

Возникающая проблема для меня это то, что мне удается сохранить только первую строку. Другие строки не сохраняются, и я думаю, это потому, что между ними есть ввод.

Второй вопрос: как использовать регулярное выражение, чтобы получить только команду для моей работы tar -zcf /var/backups/home.tgz / home /, в которой есть пробелы, но Я хотел сохранить всю команду в таблице под названием «команда».

1 Ответ

0 голосов
/ 18 июня 2020

$array будет содержать все слова, разделенные пробелом.

[
 "0",
 "5",
 "*",
 "*",
 "1",
 "tar",
 "-zcf",
 "var/backups/home.tgz",
 "home\n0",
 "5",
 "*",
 "*",
 "1",
 ...
]

Вам нужно разделить строки и l oop через них.

Для второго вопроса; используйте array_slice, чтобы получить оставшиеся элементы из массива, а затем объедините их с помощью implode.

$jobs = "
0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
";

$lines = explode("\n", trim($jobs));

foreach ($lines as $line) {
  $array = explode(" ", $line);
  $job = new Job;
  $job->min = $array[0];
  $job->hour = $array[1];
  $job->day_month = $array[2];
  $job->mes = $array[3];
  $job->day_week = $array[4];
  $job->command = implode(" ", array_slice($array, 5));
  $job->save();
}

...