Можно ли реализовать бесконечный цикл в PHP?

Ответ

Да, бесконечный цикл реализуется стандартными языковыми конструкциями. Основные способы:

// 1. Использование while(true)
while (true) {
    // Тело цикла
    if ($shouldExit) {
        break; // Критически важный механизм выхода
    }
    usleep(100000); // Часто добавляют задержку в долгосрочных циклах
}

// 2. Использование for без условий
for (;;) {
    // Тело цикла
    if ($shouldExit) {
        break;
    }
}

Контекст использования и важные предостережения:

Контекст Особенности
Веб-запрос (FPM, Apache) Цикл будет принудительно прерван по истечении max_execution_time (обычно 30 сек). Это приведет к фатальной ошибке и незавершенному ответу пользователю. Практически никогда не нужно.
CLI-скрипты (командная строка) Основная область применения. Используется для демонов, воркеров очередей, слушателей. Обязательно нужен механизм graceful shutdown (обработка сигналов SIGTERM, SIGINT).
Тестирование/Отладка Может использоваться для симуляции нагрузки или отладки параллельных процессов.

Пример CLI-демона с обработкой сигналов:

declare(ticks=1);
$running = true;

pcntl_signal(SIGTERM, function () use (&$running) {
    $running = false;
    echo "Получен сигнал завершения.n";
});

while ($running) {
    // Проверка новых задач в очереди (например, из Redis или Beanstalkd)
    // $task = $queue->reserve();
    // if ($task) { ... обработать задачу ... }
    sleep(1); // Избегаем busy waiting
}
echo "Демон завершил работу.n";

Ответ 18+ 🔞

А, ну это же классика, ебушки-воробушки! Сейчас объясню, как эти вечные циклы устроены, чтобы у тебя потом сервак не накрылся медным тазом.

Смотри, в пхп есть два основных способа зациклиться навечно, прям как моя тёща у холодильника. Первый — через while(true). Просто, как три копейки, но внутри обязательно должен быть break, иначе ты нахуй никогда не выйдешь, это раз. И второе — часто туда usleep пихают, чтобы процессор не ебал твою систему в сраку без перерыва.

// 1. Использование while(true)
while (true) {
    // Тело цикла
    if ($shouldExit) {
        break; // Критически важный механизм выхода
    }
    usleep(100000); // Часто добавляют задержку в долгосрочных циклах
}

// 2. Использование for без условий
for (;;) {
    // Тело цикла
    if ($shouldExit) {
        break;
    }
}

А теперь, ёпта, самое важное — где это можно применять, а где получишь пиздюлину. Смотри таблицу, я для тебя красивую сделал:

Контекст Особенности
Веб-запрос (FPM, Apache) Цикл будет принудительно прерван по истечении max_execution_time (обычно 30 сек). Это приведет к фатальной ошибке и незавершенному ответу пользователю. Практически никогда не нужно.
CLI-скрипты (командная строка) Основная область применения. Используется для демонов, воркеров очередей, слушателей. Обязательно нужен механизм graceful shutdown (обработка сигналов SIGTERM, SIGINT).
Тестирование/Отладка Может использоваться для симуляции нагрузки или отладки параллельных процессов.

Вот если в вебе такое запустишь — тебе пользователь через полминуты ошибку в лицо получит, а не результат. Доверия ебать ноль к такому коду. А вот в консоли — другое дело. Там ты царь и бог, можешь висеть хоть до второго пришествия. Но и тут, чувак, надо уметь красиво завершаться, а не просто kill -9 получать.

Смотри, как взрослые дяди пишут демонов:

declare(ticks=1);
$running = true;

pcntl_signal(SIGTERM, function () use (&$running) {
    $running = false;
    echo "Получен сигнал завершения.n";
});

while ($running) {
    // Проверка новых задач в очереди (например, из Redis или Beanstalkd)
    // $task = $queue->reserve();
    // if ($task) { ... обработать задачу ... }
    sleep(1); // Избегаем busy waiting
}
echo "Демон завершил работу.n";

Видишь? Тут $running — это наш флажок. Прилетел сигнал SIGTERM (система вежливо просит завершиться) — флажок опустили, цикл закончился, скрипт вышел чисто, как пай-мальчик. А sleep(1) — это чтобы в холостую не молотить, бережём ресурсы. Без этого — будет просто жрать процессорное время, как не в себя, хитрая жопа.

Короче, запомни: бесконечный цикл — это мощный инструмент, но острый, как вилка. Можно им задачу решить, а можно себе в глаз или в жопу раз. Используй с умом, э бошка думай, и всегда планируй, как из этого дерьма выбраться.