SgtIgram: simple php funktion geht nicht!

ahoi-hoi!

ich komm einfach nicht dahinter warum folgende funktion den gefordeten wert nicht zurückgibt.

es soll eigentlich nur ein zufallscode generiert werden der später von der anderen seite zurückgegeben werden soll(PingPong - also wie beim IRC)^^

<?php  
function ping() {  
	$pool = "qwertzupasdfghkyxcvbnm";  
	$pool .= "WERTZUPLKJHGFDSAYXCVBNM";  
	$pool .= "1234567890";  
	srand ((double)microtime()*1000000); for($i = 0; $i < 8; $i++) { $ping1 .= substr($pool,(rand()%(strlen ($pool))), 1);  
	}  
	srand ((double)microtime()*1000000); for($i = 0; $i < 8; $i++) { $ping2 .= substr($pool,(rand()%(strlen ($pool))), 1);  
	}  
	srand ((double)microtime()*1000000); for($i = 0; $i < 8; $i++) { $ping3 .= substr($pool,(rand()%(strlen ($pool))), 1);  
	}  
	  
	$ping = $ping1;  
	$ping .= $ping2;  
	$ping .= $ping3;  
	return $ping;  
	}  
	  
ping();  
echo $ping;  
?>

wenn ich den $pool innerhalb der funktion aufführe, wird die funktion garnicht erst ausgeführt. wenn ich den pool allerdings außerhalb der funktion aufführe(bevor die funktion ausgeführt wird versteht sich) funktioniert das simple return $ping; nicht.

mfg sgtigram

  1. Hello,

    ich komm einfach nicht dahinter warum folgende funktion den gefordeten wert nicht zurückgibt.

    es soll eigentlich nur ein zufallscode generiert werden der später von der anderen seite zurückgegeben werden soll(PingPong - also wie beim IRC)^^

    versuch doch mal, das Funktionsergebnis nicht einfach in den Mülleimer zu schmeißen, sondern auch eteas damit zu machen. (Die Funktion selbst habe ich jetzt nicht näher betrachtet.)

    <?php

    function ping() {
    $pool = "qwertzupasdfghkyxcvbnm";
    $pool .= "WERTZUPLKJHGFDSAYXCVBNM";
    $pool .= "1234567890";
    srand ((double)microtime()*1000000); for($i = 0; $i < 8; $i++) { $ping1 .= substr($pool,(rand()%(strlen ($pool))), 1);
    }
    srand ((double)microtime()*1000000); for($i = 0; $i < 8; $i++) { $ping2 .= substr($pool,(rand()%(strlen ($pool))), 1);
    }
    srand ((double)microtime()*1000000); for($i = 0; $i < 8; $i++) { $ping3 .= substr($pool,(rand()%(strlen ($pool))), 1);
    }

    $ping = $ping1;
    $ping .= $ping2;
    $ping .= $ping3;
    return $ping;
    }

    $ping = ping();
      echo htmlspecialchars($ping);
      ?>

      
      
      
      
      
      
    Liebe Grüße aus dem schönen Oberharz  
      
      
    Tom vom Berg  
    ![](http://selfhtml.bitworks.de/Virencheck.gif)  
      
    
    -- 
     ☻\_  
    /▌  
    / \ Nur selber lernen macht schlau  
    <http://bergpost.annerschbarrich.de>
    
    1. ahoi!

      versuch doch mal, das Funktionsergebnis nicht einfach in den Mülleimer zu schmeißen, sondern auch eteas damit zu machen. (Die Funktion selbst habe ich jetzt nicht näher betrachtet.)

      ich idiot^^. ja hab die nacht durchgemacht und ich fürchte da kann man schonmal sowas offensichtliches übersehen*schäm/ausrede such*

      mfg sgtigram

  2. Lieber SgtIgram,

    schau mal:

    <?php

    function ping() {
    ...
    return $ping;
    }

    ping();
    echo $ping;
    ?>

      
    Fällt Dir was auf?  
      
    Liebe Grüße,  
      
    Felix Riesterer.
    
    -- 
    ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
    
  3. Hi!

    ich komm einfach nicht dahinter warum folgende funktion den gefordeten wert nicht zurückgibt.

    Was gibt sie denn zurück und an welcher Stelle genau weichen die Inhalte der Variablen von deinen Vorstellungen ab? Überprüfe das bitte mit var_dump().

    wenn ich den $pool innerhalb der funktion aufführe, wird die funktion garnicht erst ausgeführt.

    Aufführen heißt die Variablendefinition zu notieren? Das Nichtausführen hast du wie überprüft?

    wenn ich den pool allerdings außerhalb der funktion aufführe(bevor die funktion ausgeführt wird versteht sich) funktioniert das simple return $ping; nicht.

    "Funktioniert nicht" funktioniert nicht als Fehlerbeschreibung. Schau genau hin, es gibt immer ein Ergebnis, das man sich mit var_dump() anzeigen lassen kann, und wenn es NULL ist. error_reporting und display_errors sind auch so gesetzt, dass man alles sieht?

    Und nun noch ein paar allgmeiene Bemerkungen.

    srand ((double)microtime()*1000000);

    microtime() kennt schon seit langem einen Parameter, mit dem sich das Ergebnis als float zurückgeben lässt. Zudem ist die Initialisierung des Zufallszahlengenerators nicht mehr notwendig. Ihn mit der aktuellen Zeit zu initialisieren ist sogar für kryptografische Zwecke schädlich, weil man nun einen relativ bekannten Parameter hat, mit dem sich das Ergebnis viel besser vorhersagen lässt.

    Warum nimmst du nicht uniqid()? Wenn dir die Nicht-Vorhersagbarkeit am Herzen liegt, beachte den Parameter $more_entropy.

    Lo!