server status script works but with a bug

Discussion in 'PHP' started by cyber2001, Oct 25, 2006.

  1. #1
    Hello,

    I have a problem wich i cant solve because my knowledge of PHP is to poor at this moment. So i hope someone can help me out with a problem and give me a clear solution.

    This script is working fine when the hosting pc is turned on. The script will clearly show if the game is running or not. But when the hosting pc is turned of i get a error on line 11 wich says:

    Fatal error: maximum execution time of 30 seconds.... on line 11.

    Can somebody please help me with this ?

    Here is the script:

    <?php
    
    $s_port = 12203;          // Serverport
    $s_ip   = "82.217.212.106";    // Server-IP
    $s_con = fsockopen("udp://".$s_ip, $s_port);
    fwrite($s_con, "ÿÿÿÿ". chr (0x02). "getstatus". chr (0x00));
    
    // testing HERE IS WHERE IT GOES WRONG !!!! 
    
    fread($s_con, 4);
    $status = socket_get_status($s_con);
    
    // SERVER DOWN
    
    if($status["unread_bytes"] == 0) 
    {
     echo "<div align='left'>
      <table width='20%' border='1' cellpadding='0' cellspacing='0' bordercolor='#465461'>
        <tr> 
          <td colspan='3'> <div align='center'><strong>Hier Plaatje</strong></div></td>
        </tr>
       <tr> 
          <td colspan='3'> <div align='center'><strong>server
              status</strong></div></td>
        </tr>   
        <tr bordercolor='#2D3740'>
          <td align='center'><strong>Server down</strong></td>";
     die();
    }
    
    $beginnen = "";
    
    do
    {
     $beginnen .= fread($s_con, 1);
     $status = socket_get_status($s_con);
    }
    while($status["unread_bytes"] != 0);
    
    fclose($s_con);
    
    $data = explode("\n", $beginnen);
    
    
    // Serverinfo
    
    $s_con = fsockopen("udp://".$s_ip, $s_port);
    fwrite($s_con, "ÿÿÿÿ". chr (0x02). "getstatus". chr (0x00));
    
    // bytes lezen en verbindingsopbouw
    
    fread($s_con, 4);
    $status = socket_get_status($s_con);
    
    if($status["unread_bytes"] == 0) 
    {
     echo "no info. sorry";
     die();
    }
    
    $beginnen = "";
    
    do
    {
     $beginnen .= fread($s_con, 1);
     $status = socket_get_status($s_con);
    }
    while($status["unread_bytes"] != 0);
    
    fclose($s_con);
    
    
    echo"
    <div align='left'>
      <table width='20%' border='1' cellpadding='0' cellspacing='0' bordercolor='#465461'>
        <tr> 
          <td colspan='3'> <div align='center'><strong>hier plaatje</strong></div></td>
        </tr>
       <tr> 
          <td colspan='3'> <div align='center'><strong>server
              status</strong></div></td>
        </tr>   
        <tr bordercolor='#2D3740'>
          <td align='center'><strong>Playing Mohaa or Spearhead</strong></td>";
    	
    ;
    ?>
    
    Code (markup):
     
    cyber2001, Oct 25, 2006 IP
  2. Nickwiz

    Nickwiz Peon

    Messages:
    9
    Likes Received:
    0
    Best Answers:
    0
    Trophy Points:
    0
    #2
    You can try some more error checks.
    Second: why do you do the same connect -> write -> read twice?


    
    <?php
    
      $s_port  = 12203;              // Serverport
      $s_ip    = "82.217.212.106";   // Server-IP
      $timeout = 30;
    
      // CONN WRITE READ [1]
      $s_con   = fsockopen("udp://".$s_ip, $s_port,$errno, $errstr, $timeout);
    
      // $s_con == false if fsockopen failed
      if(!$s_con)
           die(msg_server('Unable to connect with fsockopen [1];; '.$errstr));
    
      // fwrite return false on write error, else it return how many bytes written
      if(fwrite($s_con, "ÿÿÿÿ". chr (0x02). "getstatus". chr (0x00))===FALSE)
           die(msg_server('Unable to write to $_con [1]'));
    
      // fread return false on read error, else it return the read string
      if(($ffb = fread($s_con,4))===FALSE)
          die(msg_server('Unable to read from $_con after write. [1]'));
    
      // stream_get_meta_data is same as socket_get_status
      $meta_data = stream_get_meta_data($s_con);
    
      if($meta_data["unread_bytes"]==0)
          die(msg_server('No reply, or('.$ffb.')'));
    
      $beginnen = fread($s_con, $meta_data['unread_bytes']);
    
      fclose($s_con);
    
      $data = explode("\n", $beginnen);
    
      // Serverinfo
    
      // CONN WRITE READ [2]
      $s_con = fsockopen("udp://".$s_ip, $s_port,$errno, $errstr, $timeout);
    
      if(!$s_con)
           die(msg_server('Unable to connect with fsockopen [2];; '.$errstr));
    
      if(fwrite($s_con, "ÿÿÿÿ". chr (0x02). "getstatus". chr (0x00))===FALSE)
           die(msg_server('Unable to write to $_con [2]'));
    
      // bytes lezen en verbindingsopbouw
    
      if(($ffb = fread($s_con,4))===FALSE)
          die(msg_server('Unable to read from $_con after write. [2]'));
    
      $meta_data = stream_get_meta_data($s_con);
    
      if($meta_data["unread_bytes"] == 0)
          die(msg_server('No data, sorry. ('.$ffb.')'));
    
      $beginnen = fread($s_con, $meta_data['unread_bytes']);
    
      fclose($s_con);
    
      msg_server('Playing Mohaa or Spearhead');
    
      // Wrapped it up into a function instead.
      // Your table is badly formatted by the way
      // I have at least closed it for you
      function msg_server($server_status,$errmsg=''){
          echo "<div align='left'>
      <table width='20%' border='1' cellpadding='0' cellspacing='0' bordercolor='#465461'>
        <tbody>
          <tr>
            <td colspan='3' style='text-align:center;font-weight:700;'>Hier Plaatje</td>
          </tr>
          <tr>
            <td colspan='3' style='text-align:center;font-weight:700;'>Server Status</td>
          </tr>
          <tr>
            <td style='text-align:center;font-weight:700;border-color:#2D3740;'>".$server_status."</td>
            <td>Error: ".$errmsg."</td>
          </tr>
        </tbody>
      </table>\n</div>";
        }
    
    ?>
    
    PHP:
     
    Nickwiz, Oct 25, 2006 IP
  3. cyber2001

    cyber2001 Guest

    Messages:
    5
    Likes Received:
    0
    Best Answers:
    0
    Trophy Points:
    0
    #3
    Thank you sir !

    I have tried youre script, but i still get the same time out error on line 19.
    What can be wrong ?
     
    cyber2001, Oct 26, 2006 IP
  4. cyber2001

    cyber2001 Guest

    Messages:
    5
    Likes Received:
    0
    Best Answers:
    0
    Trophy Points:
    0
    #4
    anybody please ?
    how can i supress that error ?
     
    cyber2001, Oct 31, 2006 IP
  5. cyber2001

    cyber2001 Guest

    Messages:
    5
    Likes Received:
    0
    Best Answers:
    0
    Trophy Points:
    0
    #5
    Anybody has a solution for me please ?
     
    cyber2001, Nov 2, 2006 IP
  6. nico_swd

    nico_swd Prominent Member

    Messages:
    4,153
    Likes Received:
    344
    Best Answers:
    18
    Trophy Points:
    375
    #6
    Try setting this on top of your page.

    
    set_time_limit(0);
    
    PHP:
     
    nico_swd, Nov 2, 2006 IP
  7. cyber2001

    cyber2001 Guest

    Messages:
    5
    Likes Received:
    0
    Best Answers:
    0
    Trophy Points:
    0
    #7
    set_time_limit(0);
    error_reporting(0);

    This seems to work. I will keep it this way until i know another solution, or my knowledge of php is improved.

    Thank you very much !
     
    cyber2001, Nov 2, 2006 IP