У меня есть 10-минутный сценарий, выполняемый под названием php после нажатия кнопки отправки. Я могу выводить ход сценария в файл, но как я могу его прочитать на странице после нажатия кнопки отправки. Я не хочу открывать следующую страницу или обновлять текущую. Как это будет достигнуто?Индикатор выполнения веб-поиска из файла
ответ
С только PHP как «СЕВЕР СТОРОНЕ ЯЗЫКА», вам нужно будет опрашивать Sever для информации с использованием AJAX или (AKA) JAVASCRIPT асинхронных запросов, чтобы избежать перезагрузки страницы ...
var I = setInterval(function(){
$.post('serverurl', function(data){
//update progress with what is in data.
});
},5000);
На стороне php вещей вы просто прочитали бы файл
$progress = file_get_contents('file.txt'); //or what have you
echo $progress; //or json_encode($progress); if you need more then a simple sting.
Довольно простой.
Купите дорогу, вы можете закончить интервал, как только вы доберетесь до 100%, используя переменную I (в этом примере). Таким образом, вы не используете сетевой трафик без причины.
clearInterval(I);
Вы также можете сохранить объект запроса Ajax в переменной и проверить его статус, чтобы убедиться, что у вас нет условий гонки с опросом, но это сообщение на другой день. Для таких простых вещей, когда возвращение, скорее всего, займет всего несколько секунд, вероятно, это не стоит того.
ЕСЛИ вы используете что-то вроде NODE js, тогда это совсем другая история.
В PHP нет AJAX - AJAX используется для создания асинхронных вызовов через Javascript (из браузера клиента). Не уверен, что означает «только с php». –
Неужели? потому что Javascript и PHP никогда не сосуществуют. Они похожи на хлеб и масло. или Jelly и PB – ArtisticPhoenix
Сосуществование и утверждение, что AJAX является «просто PHP» - это две совершенно разные вещи. И нет, вы можете иметь AJAX без PHP. «Сценарий на стороне сервера» для отличного примера того, что существует вне PHP на стороне сервера. –
Для того, что вы пытаетесь достичь, вам нужно работать над несколькими вещами, поэтому давайте начнем.
Вам нужна кнопка, которая вызывает 10-минутный процесс. У вас уже есть это, так что давайте двигаться дальше =)
Если вы хотите остаться на той же странице, я бы использовал Javascript, чтобы скрыть эту кнопку, и покажу индикатор выполнения на 0%. Если вы хотите быть на новой странице, я бы использовал форму, которая при отправке перенаправила меня на новую страницу.
В любом случае, если вы были перенаправлены на новую страницу или вы остались, вам нужно отслеживать, кто вызвал этот процесс. Причина в том, что когда пользователь «стучит» с просьбой о статусе, вы знаете, к какому процессу они относятся. Самый простой способ - просто сохранить его в базе данных с идентификатором и следить за вещами. Этот идентификатор можно получить с помощью Javascript + AJAX (если вы остались) или с ответом на сервер (если это была перенаправление).
Теперь вам нужно проверить статус вашего серверного скрипта. Для этого вам понадобится конечная точка, которая получает идентификатор, который мы сгенерировали на предыдущем шаге, и что при вызове возвращает статус этого процесса. Вы говорите, что используете панель прогресса, поэтому я бы также включил процент в этот вызов. Конечная точка, например example.com/my_process_status.php?process_id=10, которая возвращает JSON, например {status: 'not_done', процент: 15}
Теперь, используя Javascript, вы должны позвонить конечной точке для проверки состояния с помощью AJAX , Если в статусе указано, что он не готов, вы просто используете setTimeout()
, чтобы снова проверить код за пару секунд и обновить процентную полосу индикатора прогресса.
И наконец, когда конечная точка сообщает вам, что сценарий завершен, вы перестаете вызывать setTimeout()
и отображаться каким-либо образом, когда вы найдете нужным, чтобы оно было закончено (с использованием Javascript).
Я знаю, что это большая работа, но когда все это вместе, все работает хорошо. Если какой-либо из этих явлений недостаточно ясен, я буду рад добавить дополнительную информацию.
Я не понимаю, почему я сделал это. Мой скрипт уже записывает данные для обработки файла, но нет проблем создавать следующий с номерами, вставленными моим скриптом. Так могу ли я просто готовые числа из этого файла? – WhatIsScriptingOn
И я не думаю, что мне нужно отслеживать, кто назвал этот процесс, он всегда будет одним пользователем в то время, и он будет apache (пользователь www-data). Но, может быть, я просто что-то упустил? – WhatIsScriptingOn
Ой, в этом случае, если это всего лишь 1 пользователь, тогда все может быть упрощено. Вместо того, чтобы использовать базу данных для отслеживания различных вызовов разными пользователями, вы можете использовать любой метод, который вам нужен для получения статуса процесса. Как вы говорите, вы можете прочитать файл (хотя я не уверен, что это хорошая идея - писать и читать файл одновременно). – cavpollo
Загрузить? Что происходит на задней панели, когда они нажимают кнопку? –
Это не загрузка, просто: сценарии конфигурации сервера запущены. – WhatIsScriptingOn
использует вызов ajax на сервер, который возвращает содержимое файла прогресса. Запустите и остановите интервал, который по сути опроса сервера. – ArtisticPhoenix