Дано: код, который анализирует онлайн-поток радиостанции, извлекает мета-данные и отдаёт через JSON.
P.S.: Его лепили из того, что было...
<?php
(PHP_SAPI !== 'cli' || isset($_SERVER['HTTP_USER_AGENT'])) && die();
error_reporting(0);
header('Content-Type: text/html; charset=utf-8', true);
set_time_limit(0);
ignore_user_abort(true);
exec('ps -ef | grep -v grep | grep ' . __FILE__ . ' 2>&1', $processes);
if ((isset($processes[1])) and (stripos($processes[1], __FILE__) !== false)) {
echo "A copy of the script is already running!" . PHP_EOL;
} else {
$stored_uniqueid = 0;
while (true) {
$meta = '';
$uniqueid = 0;
$meta = trim(htmlspecialchars_decode(strip_tags(file_get_contents('ссылка на поток&' .time()))));
$uniqueid = intval(crc32($meta));
if ($uniqueid !== $stored_uniqueid) {
$out = array();
$out['id'] = $uniqueid;
$out['meta'] = $meta;
$meta_arr = explode(' - ', $meta);
$out['artist'] = array_shift($meta_arr);
$out['title'] = implode(' - ', $meta_arr);
$out['cover'] = file_exists(__DIR__ . '/covers/' . str_replace('/\\', '_', $meta) . '.jpg') ? '/covers/' . str_replace('/\\', '_', $meta) . '.jpg' : '/covers/logo.jpg';
$out['last_modified'] = filemtime(__DIR__ . $out['cover']);
$stored_uniqueid = $uniqueid;
$file_out = fopen(__DIR__ . '/current.json', "w+");
$out_json = json_encode($out, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_HEX_APOS | JSON_HEX_QUOT) . PHP_EOL;
fwrite($file_out, $out_json);
fclose($file_out);
$file_out = fopen(__DIR__ . '/current.txt', "w+");
fwrite($file_out, $out['artist'] . ' - ' . $out['title']);
fclose($file_out);
//sleep(1);
}
sleep(20);
}
}
?>
Предполагается, что данный скрипт должен быть добавлен в CRON.
Используется FreeBSD. Смысл такой, что я могу запустить несколько копий и приведённый ниже код не отрабатывается:
exec('ps -ef | grep -v grep | grep ' . __FILE__ . ' 2>&1', $processes);
if ((isset($processes[1])) and (stripos($processes[1], __FILE__) !== false)) {
echo "A copy of the script is already running!" . PHP_EOL;
}
Если я ставлю в крон, то каждую минуту по скрипту у меня запускается get_meta.php. Итого в час, у меня запущено 60 скриптов.