Ergebnis 1 bis 4 von 4

Thema: create_code() funktioniert nicht zuverlässig

  1. #1
    Erfahrener Benutzer
    Registriert seit
    11.01.2007
    Beiträge
    278

    create_code() funktioniert nicht zuverlässig

    Hi zusammen.

    Ich hab ma wieder ein Problem, wo ich nicht weiter komme. Diesmal geht es um die ganz normalen Standard-Interfaces vom Autosurf.

    Das Problem ist, das der Cron ganz normal läuft und auch Kampagnen usw. einliest. Die Rückgabe vom Sponsor wird auch alles ganz normal zerlegt in Reload, Verdienst, Name usw... Klappt alles wunderbar.
    Ich würd hier allerdings nicht schreiben, wenn es kein dickes ABER geben würde^^ Und das ist, das alle Kampagnen dieselbe TAN haben. Oder sagen wir mal fast alle. Bei ca. 30 eingelesenen Kampagnen teilen sich jeweils 10 eine TAN.

    Die TAN ansich wird allerdings in der Schleife, wo die Rückgabe vom Sponsor zerlegt wird, für jede Kampagne erst zurückgesetzt :
    &int_tan = '';
    und erst dann neu erstellt :
    &int_tan = create_code(14);

    Also eigentlich kann das doch gar nicht sein, oder?

    Wenn ich jetzt statt :
    &int_tan = '';
    das hier verwende :
    unset(&int_tan);

    bringt das rein gar nix. Und da hört bei mir das Verstehen absolut auf. Die Variable &int_tan ist leer. Da kann eigentlich überhaupt nix drin sein. Wie kommt da die TAN, also der kreierte Code aus den vorangegangen Kampagnen rein? Zumal alles andere ja stimmt.

    Aber der Spass geht natürlich noch weiter. In anderen Interfaces wird die TAN ja als md5 generiert. Ungefähr so :
    &kamp_code = 'sponsor_werbeart_'.&kamp_id.'';
    &tan_code = md5(&kamp_code);
    Natürlich wird vorher auch hier zurückgesetzt :
    &tan_code = '';

    Aber das funktioniert einwandfrei. jede Kampagne hat ihre eigene TAN.

    Das heißt im Umkehrschluss, das das Leeren der Variablen funktioniert. Aber create_code liefert dieselbe TAN zurück, wie davor.

    Der einzig mögliche Schluß für mich ist also, das es an der Funktion create_code() liegen muß. Aber warum? Und was? Is vielleicht der Server zu langsam, das er nicht schnell genug auf die fuctionns.lib.php zugreifen kann? Aber warum schafft er es dann alles in die DB (db_connect) einzutragen?
    Ich verstehs halt echt nicht.

    Ich vermute mal, das es vielleicht durch irgendeine Einstellung, oder was auch immer, das Ergebniss, von rand() gecached wird, aber wissen tu ich es definitiv nicht. Und schon gar nicht wo, und an welcher Stelle.

    Hat vielleicht schonmal jemand etwas Ähnliches erlebt? Oder hat jemand eine leise Ahnung, wie so etwas zustande kommen kann?

    Gruß
    Marco


    *Edit: Habe gerade mal spasseshalber die TAN in dem Interface per md5 generiert und die alte TAN gar nicht erst zurückgesetzt, sondern direkt mit der neuen überschrieben. Funktioniert einwandfrei. Es liegt also definitiv nicht daran, das es nicht zurückgesetzt wird, sondern in irgendeiner mir unbekannten Weise an create_code(), bzw. rand().

    *Edit²: Noch ein Experiment. Ich hab das wieder zuückgebaut auf create_code() und dahinter einfach mal 1 Sekunde sleep() nach jedem Aufruf gesetzt. Siehe da, nun klappt es auch. Das Ganze ist natürlich keine Lösung, da auf dem Server (ist nicht meiner, versuche das Problem für jemand anderen zu lösen), ignore_user_abort nich hinhaut und die max. Ausführungszeit bei mehr Kampagnen überschritten würde. Also müßte
    Computer-Logik pur:
    Keyboard not found
    Press <F1> to continue...

  2. #2
    Benutzer
    Registriert seit
    16.08.2006
    Beiträge
    60
    Das problem an der create_code funktion ist wenn sie zu schnell abläuft erzeugt sie immer die selben reihe an Zufallszahlen
    ein. Ein schönes Beispiel dazu findest du hier.

    Ich habe die create_code funktion neu geschrieben ersetze die mal und schau mal ob das Problem so behoben ist.

    PHP-Code:
    function create_code($code_laenge) {
        
    $code="";
        while(
    strlen($code)<$code_laenge){
                
    $code.=md5 (uniqid ("xkncwbsvyfbuxughd"));
        }
        
    $code substr($coderand(0,(strlen($code)-$code_laenge)), $code_laenge);
        return 
    $code;

    mfg
    Aradiv

  3. #3
    Erfahrener Benutzer Avatar von jpwfour
    Registriert seit
    06.02.2008
    Beiträge
    3.717
    Mich verwirrt, dass du in deinen Codes in Beitrag #1 oft ein & anstelle des $ verwendest.

    Denke aber mal, dass da im Cron schon $ stehen, anonsten würde da kaum was funktionieren (oder was soll PHP mit den ganzen Referenzen anfangen?)

    Benutzt doch bspw. zusätzlich zu create code noch md5 und darin dann die Kampagnen ID und den sponsornamen/werbeart.

    somit sollte gewähleistet sein, dass es zu keinen Überschneidungen kommt (da ja generell jede KID bei jedem sponsor je werbeart nur einmal vorkommt)
    Kill one man, and you are a murderer.
    Kill millions of men, and you are a conqueror.
    Kill them all, and you are a god.
    - Jean Rostand, Thoughts of a Biologist (1939)

  4. #4
    Erfahrener Benutzer
    Registriert seit
    11.01.2007
    Beiträge
    278
    Das & verwende ich normalerweise anstelle des Dollarzeichens, wenn ich der Meinung bin, das die PHP oder CODE-Tags in einem Forum unangebracht sind^^
    Computer-Logik pur:
    Keyboard not found
    Press <F1> to continue...

Ähnliche Themen

  1. <? funktioniert nicht
    Von Gabriel im Forum Support zum VMSone
    Antworten: 5
    Letzter Beitrag: 05.01.2017, 17:50
  2. Script funktioniert nicht
    Von adventure im Forum Support zum VMSone
    Antworten: 4
    Letzter Beitrag: 24.03.2011, 18:13
  3. Einloggen funktioniert nicht
    Von gollum123 im Forum [HD] Programmieren
    Antworten: 0
    Letzter Beitrag: 09.03.2011, 23:32
  4. Startseite funktioniert nicht
    Von donmausi im Forum [HD] Programmieren
    Antworten: 2
    Letzter Beitrag: 30.01.2010, 13:00

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •