От здесь .
“Slug” является газетным термином, но что это означает, вот заключительный бит URL. Например, сообщение с заголовком, бит “A о Django” станет, “bit-about-django” автоматически (можно, конечно, изменить его легко если Вы don’t как автоматически сгенерированный краткий заголовок).
Можно ли создать отдельный .php файл, который затем запускается из php cli выполнить одну из этих функций?
Вероятно, я бы сделал это следующим образом:
Вот еще пара мыслей:
Ваш " скрипт обработки "должен запускаться каждые пару минут; вы можете использовать cron для этого, если вы работаете на Linux-подобной машине.
Изменить: немного больше информации после просмотра комментария
Поскольку часть обработки выполняется из CLI, и не из Apache, вам не нужны какие-либо «фоновые» манипуляции: вы можете просто использовать shell_exec
, который вернет весь вывод команды вашему PHP-скрипту, когда он закончит свою работу.
] Для пользователя, просматривающего веб-страницу с надписью «обработка», это будет казаться фоновой обработкой; и в каком-то смысле это будет, поскольку обработка будет выполняться другим процессом (возможно, даже на другой машине).
Но для вас это будет намного проще:
Ваш сценарий обработки мог бы выглядеть примерно так, я полагаю:
// Fetch informations from DB about one file to process
// and mark it as "processing"
// Those would be fetched / determined from the data you just fetched from DB
$in_file = 'in-file.avi';
$out_file = 'out-file.avi';
// Launch the ffmpeg processing command (will probably require more options ^^ )
// The PHP script will wait until it's finished :
// No background work
// No need for any kind of polling
$output = shell_exec('ffmpeg ' . escapeshellarg($in_file) . ' ' . escapeshellarg($out_file));
// File has been processed
// Store the "output name" to DB
// Mark the record in DB as "processed"
Действительно проще, чем вы сначала думали, не так ли? ;-)
Только не беспокойтесь о фоновых вещах: важно только, чтобы скрипт обработки запускался регулярно из crontab.
Надеюсь, это поможет: -)
Для этого не нужно писать отдельный скрипт php (хотя вы можете захотеть сделать это позже, если реализуете какую-то систему очередей).
Вы почти у цели. Единственная проблема заключается в том, что блоки вызова shell_exec () ждут возврата оболочки. Вы можете избежать этого, если перенаправите весь вывод команды в оболочке, чтобы уничтожить файл или / dev / null и выполнить задачу в фоновом режиме (с помощью оператора &). Таким образом, ваш код будет выглядеть следующим образом:
//Run linux command in background and return the PID created by the OS
function run_in_background($Command, $Priority = 0)
{
if($Priority) {
shell_exec("nohup nice -n $Priority $Command 2> /dev/null > /dev/null &");
} else {
shell_exec("nohup $Command 2> /dev/null > /dev/null &");
}
}
Я не думаю, что есть какой-либо способ получить PID, к сожалению.