Индикатор выполнения при запуске функции внутри цикла foreach - PullRequest
0 голосов
/ 31 октября 2011

У меня есть цикл foreach, который вызывает функцию для установки значений в массив.Иногда требуется несколько часов, чтобы завершить, в зависимости от того, сколько раз ему нужно выполнить для завершения функции.

То, что я хотел бы иметь, это индикатор выполнения или, по крайней мере, индикатор прогресса завершенного типа 1/1000.

Возможно ли это?Если да, то как я могу реализовать это в своем коде?Будет ли это в функции или в цикле foreach?Я исследовал и нашел несколько примеров использования for и $ i ++, но я не совсем уверен, как это реализовать, поскольку я уже использую цикл foreach.

Большое спасибо.

 function scrape_amazon($links) {
 //my code runs here to set all values in $ret array.
 }


 foreach($links as $link) {
$ret = scrape_amazon($link);
 }

Ответы [ 2 ]

0 голосов
/ 31 октября 2011

PHP, вероятно, не совсем подходящий инструмент для этой задачи, однако вы можете сделать следующее:

  • Запустить медленный код как фоновый процесс и вывести прогресс в файл.
  • Наличие PHP-скрипта, который опрашивает этот файл для получения информации о ходе выполнения (либо по обновлению страницы, либо по AJAX)

Запуск фонового процесса можно выполнить несколькими способами, в том числе:

  • Запуск через cron каждые 60 секунд и опрос новых заданий, помещенных в буфер в некоторой читаемой области
  • Запуск с помощью механизма fork / exec с веб-страницы
  • Запуск в качестве демона в системезапуск

Потребуются некоторые усилия, чтобы избежать проблем с несколькими выполнениями и / или перекрытием.

0 голосов
/ 31 октября 2011

Я использую это, что хорошо, а не ajax, делаю только сброс, но не так страшно.

Я помещаю изображение

<img src='progress.gif' height=18 width=0 name=probar>

Затем устанавливаю на каждое событие, выполненное на сервереecho строка, затем flush:

echo "<script language='JavaScript'>\ndocument.probar.width=".(($sys["probar_width"]/$task_all)*$task_i).";\n</script>\n";
flush();

Если ваш сервер (например, apache) использует кэширование (например, включен gzip), он не будет работать хорошо.

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