corpirate: PHP Socket Script

Beitrag lesen

Hallo,
Ich habe seit einiger Zeit ein PHP Socket Script am laufen, das ich über einen Flash Client anspreche. Irgend etwas scheint an dem Script problematisch zu sein, bei dessen Benutzung füllt sich der RAM des Servers unheimlich schnell, dann muss er auslagern und irgendwann (alle 2-3 stunden) geht gar nix mehr.
Ich hoffe nun das hier im Forum der ein oder andere PHP Crack ist, der sich mit Sockets auskennt, und mir bei meinem Problem helfen kann.
Hier mal das Script:

  
#!/usr/bin/php -q  
<?php  
error_reporting(E_ALL);  
$endChar="\0";  
set_time_limit(0);  
ob_implicit_flush();  
  
$maxClients=128;  
  
$address = '85.13.134.25';  
//$address = '127.0.0.1';  
  
$port = 9007;  
  
function handle_client($allclient, $socket, $buf, $bytes , $targets) {  
 global $endChar;  
 $test=""; $loop=array();  
 if(ereg("target=",$buf)){  
  list($nix, $test)=explode(' target="', $buf);  
  list($test, $nix) = explode('"', $test);  
  $loop=explode(",", $test);  
 }  
 list($nix,$rd)=explode("#",$socket);  
 foreach($allclient as $client) {  
  list($nix,$rq)=explode("#",$client);  
  //if($test == "" || $test !=="" && in_array($rq, $loop)){  
   $test=socket_write($client,"<sock cl='$rd' />$buf");  
   print "<sock cl='$rd' />$buf\n$test\n\n";  
  //}  
 }  
}  
  
if (($master = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) {  
    echo "socket_create() failed: reason: " . socket_strerror($master) . "\n";  
}  
  
socket_set_option($master, SOL_SOCKET,SO_REUSEADDR, 1);  
  
if (($ret = socket_bind($master, $address, $port)) < 0) {  
    echo "socket_bind() failed: reason: " . socket_strerror($ret) . "\n";  
}  
  
if (($ret = socket_listen($master, $maxClients)) < 0) {  
    echo "socket_listen() failed: reason: " . socket_strerror($ret) . "\n";  
}  
  
$read_sockets = array($master);  
  
while (true) {  
    $changed_sockets = $read_sockets;  
    $num_changed_sockets = socket_select($changed_sockets, $write = NULL, $except = NULL, NULL);  
    foreach($changed_sockets as $socket) {  
        if ($socket == $master) {  
            if (($client = socket_accept($master)) < 0) {  
                echo "socket_accept() failed: reason: " . socket_strerror($msgsock) . "\n";  
                continue;  
            } else {  
    list($nix,$rd)=explode("#",$client);  
                array_push($read_sockets, $client);  
    $pr="<newclient value='$rd' />";  
    $allclients2 = array($client);  
    handle_client($allclients2, $client, "$pr$endChar", strlen("$pr$endChar") , "");  
    $allclients3 = $read_sockets;  
    array_shift($allclients3);    // remove master  
    $pw="<newclientjoins value='$rd' />";  
    handle_client($allclients3, $client, "$pw$endChar", strlen("$pw$endChar") , "");  
            }  
        } else {  
   $bytes = socket_recv($socket, $buffer, 2048, 0);  
   if ($bytes == 0) {  
    $index = array_search($socket, $read_sockets);  
    list($nix,$rd)=explode("#",$read_sockets[$index]);  
    $st="<disconnect value='$rd' />";  
  
    unset($read_sockets[$index]);  
    socket_close($socket);  
  
    $allclients2 = $read_sockets;  
    $so=array_shift($allclients2);    // remove master  
    handle_client($allclients2, $so, "$st$endChar", strlen("$st$endChar") , "");  
   } else {  
    $allclients = $read_sockets;  
    array_shift($allclients);    // remove master  
    handle_client($allclients, $socket, $buffer, $bytes, "");  
   }  
        }  
    }  
}  
?>  

Ich komme einfach nicht weiter und stehe kurz vor der Verzweiflung!
Vielen Dank schonmal und Gruss, Philipp