2010-07-15 2 views
1

Я не знаю, возможно ли это только с PHP, но мысль спросит здесь ...Обновление фона через PHP?

У меня есть код PHP, который обновляет данные каждые 15 дней. моя проблема заключается в том, что он обновляет весь процесс, занимая более 5 секунд, поэтому пользователь должен дождаться завершения обновлений.

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

мой текущий код приведен ниже: -

$result = $db->sql_query("SELECT * FROM data1,data2,data3,data4 WHERE person='" .$name. "'"); 

$row = $db->sql_fetchrow($result); 
$day = $row['regtime']; 
$days = (strtotime(date("Y-m-d")) - strtotime($row['regtime']))/(60 * 60 * 24); 
if($row > 0 && $days < 15){ 

$row = ['name']; 
$row = ['age']; 
$row = ['place']; 
$row = ['address']; 
$row = ['lat']; 
$row = ['long']; 
$row = ['geo']; 
//etc 
}else{ //do update 
//insert into database 
} 
+0

Возможный ответ на ваш вопрос: http://stackoverflow.com/questions/45953/php-execute-a-background-process – Redlab

+0

mathew - я добавил тэг jquery для вас :) –

ответ

1

ок Mathew,

предположение в том, что у вас есть пустой DIV на странице с идентификатором = myStatusDiv. Кроме того, предполагается, что у вас есть url/php file/home/longprocess. добавить JQuery на страницу, а затем в нижней части страницы, добавьте следующее:

<script type="text/javascript"> 
    $(document).ready(function() { 
     $.ajax({ 
      type: 'POST', 
      data: "username=" + $("#username").val(), 
      url: 'longprocess.php', 
      beforeSend: function() { 
       // you could also put a spinner img or whatever here too.. 
       $("#myStatusDiv").html("please wait, page being updated..."); 
      }, 
      success: function(result) { 
       $("#myStatusDiv").html(result); 
      } 
     }); 
    }); 
</script> 

в основном, когда дом был загружен, функция $ .ajax будет молча работать в Backgound. по завершении, div myStatusDiv получит сообщение о том, какое сообщение статуса вы создали из вашего метода longprocess. это может быть что угодно: от простого сообщения до «почти» всего раздела на странице. вашей php-странице нужно будет искать именованные параметры, отправленные через объект данных - то есть в приведенном выше примере -> $ name = $ _POST ['username'];

Есть множество примеров в сети и здесь, в SO.

удачи (подсказка: поиск Google для 'PHP Ajax JQuery $ _POST');)

джим

[править] - конечно, вам придется включить переменные $ _POST в методе $, ajax ... Я сделал предположение, что у вас есть ввод текстового поля с id = username. там снова есть много примеров, но вот тут один из быстрых примеров, которые я нашел для вас: http://www.talkphp.com/vbarticles.php?do=article&articleid=58&title=simple-ajax-with-jquery

+0

Great Jim thanks. один вопрос, когда я выполняю поиск, на моей странице результатов отображаются старые данные до тех пор, пока обновление не будет выполнено или оно не сообщит об обновлении? – mathew

+0

mathew - вы можете добавить событие, чтобы показать, что страница обновляется в событии beforeSend:. Я обновлю свой пример.Кроме того, если вы принимаете это как ответ, обязательно обновите теги, чтобы включить jquery, чтобы будущие поиски отображали ваш квест :) –

+0

Но у Джима есть некоторые проблемы, я думаю ... что, если данные в течение 15 дней и обновления Не требуется? – mathew

0

Mathew - я не буду комментировать код сам по себе, достаточно сказать, что мы надеемся, что не содержится в самой странице. во всяком случае, с этим с пути :). php/linux (насколько я знаю) не позволит вам создавать новые потоки, поэтому лучшим вариантом может быть вызов метода сервера через $ ajax. Таким образом, это не в руке области пользователей страниц и будет держать их страницы отзывчивыми.

Как я уже сказал, код, указанный выше, содержится в каком-либо классе, доступном через URL-адрес. то вы просто вызываете метод и возвращаете либо результат html, либо простое сообщение в div состояния.

+0

у вас есть что-нибудь, что может быть иллюстрируется ?? Я не возражаю, если он находится в ajax. – mathew

+0

уверен - дайте мне 5 минут и отдельное сообщение ниже ... –

1

Вместо того, чтобы запускать обновление по запросу пользователя, вы также можете запускать скрипт каждую ночь через задание cron. Таким образом, пользователь никогда не беспокоится.

Смежные вопросы