Давайте представим, что запрос выполнен, который длится некоторое время, пока не запустится Php, отображающий содержимое. Для очистки содержимого я использую:
echo str_repeat(' ', 99999).str_repeat(' ', 99999); ob_implicit_flush(true);
Итак, пока запрос обрабатывается, мы на самом деле можем видеть вывод.
Теперь я хотел бы иметь кнопку типа «остановить это», чтобы из Php я мог убить этот процесс (процесс Apache, я думаю). Как?
Теперь я хотел бы иметь кнопку, как «остановить его», чтобы из Php я мог убить этот процесс
Непонятно, что ты здесь спрашиваешь. Обычно PHP запускается в одном потоке (о выполнении — не говоря о легких процессах здесь). Кроме того, для любого языка, работающего как CGI / FastCGI / mod_php, нет входных событий — ввод из канала HTTP читается только один раз в начале выполнения.
Можно (в зависимости от того, регулярно ли поток выполнения повторно вводит интерпретатор PHP) попросить PHP запускать функцию через определенные промежутки времени (register_tick_function ()), которая может опрашивать какое-либо событие, передаваемое по другому каналу (например, другой запрос HTP). установка семафора).
Отправка потока неопределенной и потенциально очень большой длины в браузер — действительно плохая идея. Правильное решение (ваш пример несколько надуманный) может заключаться в порождать фоновый процесс на веб-сервере и опрашивать вывод через Ajax. Вы все равно должны были бы реализовать какой-то канал управления.
Иногда поток выполнения выходит из PHP и остается там в течение длительного времени. Во многих случаях, если пользователь завершает выполнение сценария PHP, который имеет длительный запрос к базе данных, PHP может перестать работать, но SQL продолжит работать до завершения. Есть решения — но вы не сказали, было ли это проблемой.
Других решений пока нет …