Могу ли я автоматически обновить мой div с помощью кода PHP, который у меня уже есть - PullRequest
0 голосов
/ 03 февраля 2012

Есть ли способ сделать определенный div autorefresh каждую минуту или около того, а не всю мою страницу? Потому что это займет слишком много времени, чтобы перезагрузить страницу каждую минуту. Сам div - важная часть, которая может измениться.

<div id="livetable">
<?php loadpage(); ?>
</div>

<?php
define('ELEMENT_CONTENT_ONLY', true);
define('ELEMENT_PRESERVE_TAGS', false);

function value_in($element_name, $xml, $content_only = true) 
{
    if ($xml == false)
    {
        return false;
    }
    $found = preg_match('#<'.$element_name.'(?:\s+[^>]+)?>(.*?)'.'</'.$element_name.'>#s', $xml, $matches);
    if ($found != false) 
    {
        if ($content_only) 
        {
            return $matches[1];  //ignore the enclosing tags
        }
       else 
       {
            return $matches[0];  //return the full pattern match
        }
    }
    // No match found: return false.
    return false;
}

function loadpage()
{
      echo "<table cellpadding=\"0\" cellspacing=\"0\" style=\"width: 95%\" >";
      echo "<tr class=\"info-row\" bgcolor=#252525 style=\"color:white;  height: 15px;\">";
      echo "<td style=\"width: 14%; height: 10px; padding-left: 5px;\"><b>Preview</b></td>";
      echo "<td style=\"width: 10%; height: 10px; padding-left: 5px;\"><b>Live</b></td>";
      echo "<td style=\"width: 36%; height: 10px; padding-left: 5px;\"><b>Stream</b></td>";
      echo "<td style=\"width: 10%; height: 10px; padding-left: 5px;\"><b>Viewers</b></td>";
      echo "<td style=\"width: 10%; height: 10px; padding-left: 5px;\"><b>Time online</b></td>";
      echo "</tr>";
      addrow(107473,10,"Osuryn","Osuryn is streaming random games live",false);
      addrow(210320,28,"Dennojj","Dennojj is streaming PS3 games",true);
      echo "</table>";
}

function addrow($streamID, $streamPage , $streamName , $streamSlogan, $odd)
{
     if ($odd)
     {
            echo "<tr class=\"content-row online\" id=\"958\" bgcolor=#A7A7A7>";
     }
     else
     {
            echo "<tr class=\"content-row online\" id=\"958\" bgcolor=#BFBFBF>";
     }
     echo "<td style=\"width: 14%;\"><img src=\"http://img.hw.own3d.tv/live/live_tn_".$streamID."_.jpg\" style=\"height: 72px;\" \></td>";
     echo "<td style=\"width: 10%; padding-left: 5px;\"><br><br><b>".getLiveStatus($streamID)."</b></td>";
     echo "<td style=\"width: 36%; vertical-align: top; padding-top: 6px; padding-right: 6px;\">";
     echo "<div><br><a href=\"http://brokendiamond.org/?q=node/$streamPage\">$streamName</a></div>";
     echo "<div style=\"padding-top: 6px; font-size: 11px;\">$streamSlogan</div>";
     echo "</td>";
     echo "<td style=\"width: 10%; padding-left: 5px;\"><br><br>".getLiveViews($streamID)."</td>";
     echo "<td style=\"width: 10%; padding-left: 5px;\"><br><br>".getOnTime($streamID)." minutes online</td>";
     echo "</tr>";
}

function getLiveStatus($streamID)
{
    $request =  'http://api.own3d.tv/liveCheck.php?live_id='.$streamID;
    $arg = '240';

    $session = curl_init($request.$arg);

    curl_setopt($session, CURLOPT_HEADER, false);
    curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($session);
    curl_close($session);

    if (preg_match("/true/",$response, $result)) 
    {
        $streamStatus="Live";
    } 
    else 
    {
      $streamStatus="Offline";
    }
    return $streamStatus;
}

function getLiveViews($StreamID)
{
    $request =  'http://api.own3d.tv/liveCheck.php?live_id='.$StreamID;
    $arg = '240';

    $session = curl_init($request.$arg);

    curl_setopt($session, CURLOPT_HEADER, false);
    curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($session);
    curl_close($session);

    $viewStatus =value_in('liveViewers', $response) + "";

    return $viewStatus;
}

function getOnTime($StreamID)
{
    $request =  'http://api.own3d.tv/liveCheck.php?live_id='.$StreamID;
    $arg = '240';

    $session = curl_init($request.$arg);

    curl_setopt($session, CURLOPT_HEADER, false);
    curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($session);
    curl_close($session);

    $onStatus =value_in('LiveDuration', $response) + "";

    return $onStatus;
}
?>

Ответы [ 5 ]

3 голосов
/ 03 февраля 2012

Не просто с PHP, нет.Но вы можете использовать AJAX для извлечения данных из внешнего файла и обновления содержимого div с помощью JavaScript.Используя jQuery:

$.get('/path/to/php/script', function(data) {
  $('#selector').html(data);
});

ИЛИ, проще:

$('#selector').load('/path/to/php/script');

Редактировать - уточнение:

Файл "ajax.php":

<?php

// Include your functions here
echo loadpage();

Файл HTML:

<div id="content"></div>
<script>
  $(document).ready(function() {
    $("#livetable").load("ajax.php");
  });
</script>
2 голосов
/ 03 февраля 2012

Вам нужно будет сделать запрос AJAX с JavaScript, который обновит div или использовать iframe.

Самый простой способ сделать это или, возможно, если вы не знакомы с JavaScript, это использовать iframe. По сути, вам нужно загрузить содержимое div, используя iframe, а также изменить код PHP, который используется в iframe, чтобы перезагрузить страницу через X секунд. Это должно быть легко с функцией PHP header().

Если вы собираетесь использовать вместо этого AJAX, вам нужно использовать функцию setInterval(), чтобы повторить вызов функции, который фактически сделает запрос AJAX и обновит div ' содержание. Однако было бы неплохо использовать взамен setTimeout() и вызывать саму функцию, также используя, конечно же, setTimeout() через X секунд. Причина этого заключается в том, что при использовании setInterval() JavaScript будет продолжать работать, даже если последняя операция еще не завершена. Но если бы вы использовали setTimeout() JavaScript будет ждать завершения последнего вызова функции, прежде чем перейти к следующему.

0 голосов
/ 03 февраля 2012

* в php невозможно обновить конкретный div, возможно только полное обновление страницы, попробуйте это, если вы хотите сделать это в AJAX, это возможно с помощью settimeout refresh *

// в php у нас есть

заголовок ( "обновление: 5; URL: tvinfo.php");

0 голосов
/ 03 февраля 2012

Вы можете легко обновить всю страницу, используя meta refresh .

Если вы хотите обновить только на div, вам понадобится ajax, возможно, самое простое решение - использовать jQuery или просто load()

0 голосов
/ 03 февраля 2012

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

...