Avatar billede t-johansen Juniormester
13. marts 2009 - 15:29 Der er 4 kommentarer og
1 løsning

Gentage function indtil der ikke er flere variabler

Jeg har en "ping" function jeg ønsker at gentage for hver $domain variabel der er tilstede, og udskrive resultatet.

Mit spørgsmål er så hvordan man gentager koden uden at skulle gentage den manuelt med ændrede variabler.


Jeg er ikke en haj til php, er i nybegynder stadie. Scriptet skal bruges på en intranet side, så sikkerhed/misbrug er ikke et problem.


Eksempel her (hvor koden gentages 2 gange):

<?php
// Function to check response time
function pingDomain1($domain1){
    $starttime = microtime(true);
    $file      = fsockopen ($domain1, 80, $errno, $errstr, 10);
    $stoptime  = microtime(true);
    $status1    = 0;

    if (!$file) $status2 = -1;  // Site is down
    else {
        fclose($file);
        $status1 = ($stoptime - $starttime) * 1000;
        $status1 = floor($status1);
    }
    return $status1;
}
function pingDomain2($domain2){
    $starttime = microtime(true);
    $file      = fsockopen ($domain2, 80, $errno, $errstr, 10);
    $stoptime  = microtime(true);
    $status2    = 0;

    if (!$file) $status2 = -1;  // Site is down
    else {
        fclose($file);
        $status2 = ($stoptime - $starttime) * 1000;
        $status2 = floor($status2);
    }
    return $status2;
}
?>

<?php   

$domain1 = "10.0.0.1";
$domain2 = "10.0.0.2";


       
        echo '<table>';
        echo '<tr><th>overskrift</th></tr>';

        $status1 = pingDomain1($domain1);
        if ($status1 > 0 && $status1<= 500) echo "<tr><td>http://$domain1 er <font color='#009607'>OK ($status1 ms)</font></td><tr>";
        elseif ($status1 > 501) echo "<tr><td>http://$domain1 kan være <font color='#ffc000'>langsom($status1 ms)</font></td><tr>";
        else  echo "<tr><td>http://$domain1 er <font color='#FF0000'>ude af drift </font></td><tr>";

      $status2 = pingDomain2($domain2);
      if ($status2 > 0 && $status2<= 500) echo "<tr><td>http://$domain2 er <font color='#009607'>OK ($status2 ms)</font></td><tr>";
      elseif ($status2 > 501)  echo "<tr><td>http://$domain2 kan være <font color='#ffc000'>langsom($status2 ms)</font></td><tr>";
      else  echo "<tr><td>http://$domain2 er <font color='#FF0000'>ude af drift </font></td><tr>";

echo '</table>';
   
?>
Avatar billede ksoren Nybegynder
13. marts 2009 - 15:42 #1
function pingDomain($domain){
    ...
}

$domains = array(
    "10.0.0.1",
    "10.0.0.2"
);

foreach($domains as $domain){
    $status = pingDomain($domain);
    ...
}
Avatar billede ksoren Nybegynder
13. marts 2009 - 15:50 #2
Funktioner er jo til at blive genbrugt.

function pingDomain1($domain1){

så vil $domain1 altid indeholde den værdi du sender med, når du kalder funktionen.

$status = pingDomain1($domain1);
$status = pingDomain1($domain2);
$status = pingDomain1("nullermænd);

etc
Avatar billede t-johansen Juniormester
15. marts 2009 - 11:30 #3
Super det virkede. Svar og du får point.

Resultat:

<?php
// Function to check response time
function pingDomain($domain){
    $starttime = microtime(true);
    $file      = fsockopen ($domain, 80, $errno, $errstr, 1);
    $stoptime  = microtime(true);
    $status    = 0;

    if (!$file) $status = -1;  // Site is down
    else {
        fclose($file);
        $status1 = ($stoptime - $starttime) * 1000;
        $status1 = floor($status);
    }
    return $status;
}
?>
<?php 
$domains = array(
    "192.168.0.1",
    "192.168.0.2",
    "192.168.0.3",
);
        echo '<table>';
        echo '<tr><th>overskrift</th></tr>';
          foreach($domains as $domain){
        $status = pingDomain($domain);
        if ($status > 0 && $status<= 500) echo "<tr><td>http://$domain er <font color='#009607'>OK ($status ms)</font></td><tr>";
        elseif ($status > 501) echo "<tr><td>http://$domain kan være <font color='#ffc000'>langsom($status ms)</font></td><tr>";
        else  echo "<tr><td>http://$domain er <font color='#FF0000'>ude af drift </font></td><tr>";}
        echo '</table>';
?>
Avatar billede t-johansen Juniormester
15. marts 2009 - 11:40 #4
lille tillægsspørgsmål hvis du har tid. hvordan undgår man at den viser "fejl" eks. i tilfælde af af at der ikke er forbindelse til en given adresse.  Dette script viser denne fejl hvis der ikke er forbindelse:

Warning: fsockopen() [function.fsockopen]: unable to connect to 192.168.0.1:8080 (Connection timed out) in ping.php on line 5
Avatar billede t-johansen Juniormester
09. november 2010 - 12:08 #5
lukket...

Ksoren2 skriv hvis du vil have point...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester