Отображение хода выполнения и любых ошибок во время выполнения длинного сценария в CodeIgniter - PullRequest
0 голосов
/ 11 октября 2018

Я работаю над приложением, которое создает QR-коды и отображает их для нескольких графических изображений для пользователя.

Проблема: Я написал скрипт для импорта пользователей для создания изCSV.Мне нужно создать более 100 пользователей (каждый, включая процесс выше).Прямо сейчас для завершения каждого нового пользователя требуется примерно 1 минута, а затем выкладывается сразу все мои сообщения об ошибках / успехах.

Мой вопрос: Вместо браузерамедленно загружая представление результатов (в настоящее время остается на белой странице до завершения), пока мой сценарий обрабатывает, это несколько простой способ отображать текущий прогресс и ошибки по мере их появления? Что-то вроде индикатора прогресса обновленопоскольку каждый пользователь создан / терпит неудачу.Я предполагаю, что это потребует AJAX?

1 Ответ

0 голосов
/ 11 октября 2018

Имея дело с веб-сайтами, помните золотое правило.

PHP ДОЛЖЕН УМИРАТЬ.

Нубс полагает, что это люди, чинящие PHP.Это не так.Это цикл HTTP-запросов.

Request In> PHP> Response Out> PHP процесс умирает.

Это относится только к веб-серверам и браузерам, а не к CLI PHP.Но дело в том, что вы можете получить тайм-ауты Apache, если ваш сценарий занимает столько времени, сколько вы говорите.

Одним из решений может быть установка cron, который проверяет файл и, если он его находит, обрабатывает его, сброс номера строки в текстовом файле, который может проверить ваш браузер, что означает, что вы можете получить прогресс:

<?php

if (file_exists('/some/csv/to/process.csv')) {
   // open file
   // get row to work on
   // process row
   // update progress file with next line number
}

Между тем, вы можете настроить скрипт, который делает это:

<?php

$progress = file_get_contents('/path/to/progress.txt');
header('Content-Type: application/json');
echo json_encode(['progress' => $progress]);

А затем получите прогресс, используя AJAX внутри функции setInterval:

$.get('/path/to/progress/json/page', function(data){
    console.log(data);
});

Просто идея, может вам или не подойдет, но попробуйте!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...