0

作業中のWOLPHPスクリプトがあり、ajaxを使用してページの一部を更新する方法を見つけたいと思っていました。それとも、外部のphpスクリプトを呼び出す必要があるのでしょうか。

私のPHPスクリプトは、PCを起動し、それが稼働しているかどうかを確認するために複数回チェックします。しかし、PHPの場合、ユーザーは、結果が表示される前に、完了するまで待たなければならないことは明らかです。ページの最初の部分がロードされた後、実行中の「whileループ」を実行して更新する方法はありましたか?

基本的に、checkstatus関数はポートが実行されているかどうかを確認してから出力を表示します。メインページをロードしてから、ajaxまたは別のphpスクリプトを使用してポートチェックのステータスを更新したいと思っていました。方法がわからない。

function CheckStatus($tries, $device, $deviceip, $deviceport, $devicemac1, $devicemac2, $maxtries, $broadcast, $udport, $timeout){
    while($tries <= $maxtries){
        echo "<br \>";
        echo "Try $tries of $maxtries";
        echo "<br \>";
        //echo portcheck($deviceip, $deviceport);
        if (portcheck($deviceip, $deviceport) != 0){
                echo "  ------>  Could NOT open connection to $device at $deviceip on port $deviceport";
                echo "<br \>";                
                //echo "<br /> TRIES: $tries";

            }else{
                echo "<br \>";
                echo "<br \>";
                echo "<br \>";
                echo "TESTED OKAY!  $device";
                return TRUE;
            }
            $tries=$tries + 1;
    }
    echo "<br />";
    echo "MAX TRIES REACHED... COULD NOT CONNECT!";
    return FALSE;
}   
4

1 に答える 1

0

「PHP の 1 つのインスタンスでは実行できない」というコメントを投稿したので、先に進み、自分が間違っていることを証明します。

これは、一種のサーバー プッシュセットアップを使用して行うことができます。次のコードを検討してください。

<?php

  // Do all your preliminary stuff here

?>
<html>
  <head>
    <title>Server push demo</title>
    <script type="text/javascript">
      function updateTries(tries) {
        document.getElementById('num_tries').innerHTML = tries;
      }
      function pushEvent(str) {
        var event = document.createElement('div');
        event.innerHTML = str;
        document.getElementById('stream_container').appendChild(event);
      }
    </script>
  </head>
  <body>
    <div>
      Number of tries:
      <span id="num_tries"></span>
    </div>
    <div id="stream_container"></div>
<?php

  // Push all output so far to the client
  flush();

  // Start status check loop
  CheckStatus($tries, $device, $deviceip, $deviceport, $devicemac1, $devicemac2, $maxtries, $broadcast, $udport, $timeout);

  function CheckStatus($tries, $device, $deviceip, $deviceport, $devicemac1, $devicemac2, $maxtries, $broadcast, $udport, $timeout){

    while ($tries < $maxtries) {

        echo "<script type='text/javascript'>updateTries($tries);</script>";
        flush();

        if (portcheck($deviceip, $deviceport) != 0){

          echo "<script type='text/javascript'>pushEvent('Could NOT open connection to $device at $deviceip on port $deviceport');</script>";
          flush();

        } else {

          echo "<script type='text/javascript'>pushEvent('TESTED OKAY! $device');</script>";
          flush();
          return TRUE;

        }

        $tries++;

    }

    echo "<script type='text/javascript'>pushEvent('MAX TRIES REACHED... COULD NOT CONNECT!');</script>";
    flush();
    return FALSE;

  }

?>
</body></html>

ただし、ループをクライアント側に抽象化し、AJAX を使用して一度に 1 つのチェックを実行するサーバーをポーリングする方が良いと私はまだ主張しています。

于 2012-05-15T19:13:43.140 に答える