HTTP-Request (an SMS-Gateway) per Ajax

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • HTTP-Request (an SMS-Gateway) per Ajax

    Hallo Coder,

    ich stehe mal wieder vor einem Problem.
    Ein Kunde hat eine MySql-Datenbank mit ca. 5.000 Mitgliedern. Nun möchte er über einen HTTP-Request (an ein SMS-Gateway) eine SMS an alle versenden.
    Hierbei stellte sich schnell heraus, dass die Scriptlaufzeit von 90 Sec schnell überschritten war. Die Scriptlaufzeit ist vom Provider fest begrenzt und läst sich nicht abschalten (auf 0 Sec).
    Dann dachte ich, ich könnte das Problem mit Ajax umgehen, in dem ich die Gateway-Requests einzeln per Ajax aufrufe und somit die Scriptlaufzeit nicht überschreite. (Evtl. liegt hier schon mein denkfehler?)
    Leider hat das auch nichts gebracht. nach ca. 80 Datensätze pasiert nichts mehr.

    Hat sich von euch schon mal jemand mit diesem Thema befasst? Kann mir vielleicht jemand weiterhelfen?

    Hier mal mein Script (Snippet):

    Quellcode

    1. <script type="text/javascript">
    2. <!--
    3. function sendRequest(encoded_message,datensatz_telefon,cnt)
    4. {
    5. var req;
    6. try
    7. {
    8. req = window.XMLHttpRequest?new XMLHttpRequest():
    9. new ActiveXObject("Microsoft.XMLHTTP");
    10. }
    11. catch (e)
    12. {
    13. // Kein AJAX-Support
    14. }
    15. req.onreadystatechange = function()
    16. {
    17. if ((req.readyState == 4) && (req.status == 200))
    18. {
    19. document.getElementById('inhalt'+cnt).innerHTML = req.responseText;
    20. }
    21. }
    22. req.open('post', 'ajax-sms2.php');
    23. req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    24. req.send('encoded_message='+encoded_message+'&datensatz_telefon='+datensatz_telefon);
    25. }
    26. //-->
    27. </script>
    Alles anzeigen

    Quellcode

    1. <?php
    2. // MySql-Datenbank öffnen
    3. $verbindung = @mysql_connect($mysql_server,$mysql_user,$mysql_passwort) or die("Keine Verbindung zur Datenbank m&ouml;glich");
    4. mysql_select_db($mysql_db_name) or die("Die Datenbank existiert nicht");
    5. // Startwert für numerische Auflistung
    6. $cnt = "1";
    7. // Daten aus MySql-Datenbank holen...
    8. $abfrage = mysql_query("SELECT telefon FROM ".$mysql_table_mitglieder." WHERE telefon != '' ORDER BY id ASC");
    9. while($row = mysql_fetch_object($abfrage))
    10. {
    11. $datensatz_telefon = $row->telefon;
    12. ?>
    13. Telefon: <?php echo $datensatz_telefon; ?> | Status: <span id="inhalt<?php echo $cnt; ?>"></span>
    14. <script type="text/javascript">sendRequest('<?php echo $encoded_message; ?>', '<?php echo $datensatz_telefon; ?>', '<?php echo $cnt; ?>')</script><br>
    15. <?php
    16. $cnt++;
    17. }
    18. // Datenbank-Verbindung schließen
    19. mysql_close($verbindung) or die("Die Datenbank-Verbindung konnte nicht beendet werden");
    20. ?>
    Alles anzeigen


    hier die Datei welche per Ajax aufgerufen wird:

    Quellcode

    1. <?php
    2. // Funktion für den SMS-Versand
    3. function getURLfopen($url)
    4. {
    5. $dh = fopen ($url, "r");
    6. $result = fread($dh,128);
    7. fclose($dh);
    8. return $result;
    9. }
    10. // Variablen per POST holen
    11. $encoded_message = $_POST['encoded_message'];
    12. $datensatz_telefon = $_POST['datensatz_telefon'];
    13. // HTTP-Request
    14. getURLfopen("http://gateway.xxxxxxxxx.com/smsc.php?user=xxxxx&pass=xxxxx&text=".$encoded_message."&to=".$datensatz_telefon."&sendsms=no");
    15. ?>
    Alles anzeigen

    Schon mal Danke an alle die sich gedanken darüber machen.

    Grüße KMD
  • Mach das nicht mit AJAX... da müsstest du ja theoretisch immer die Antwort abwarten und dann bei Erfolg den nächsten Request schicken.
    Stattdessen benutzt du eine Headerweiterleitung

    send.php?offset=0 macht die ersten 10
    Danach leitet das Script (das natürlich keine Ausgabe besitzt an send.php?offset=10 weiter)

    Quellcode

    1. header('location:send.php?offset='.($_GET['offset]+10));


    Eine Alternative, bei der du auch kein Problem hast, wenn das Script abbricht, wäre das Aufrufen der selben URL x-mal. Und für ein erfolgreiches Senden markierst du die Nutzer in der Datenbank. Und beim neuen Auslesen sendest du nur an unbearbeitet. Aber offset ist unkomplizierter.

    Wenn eine Ausgabe wichtig ist, machst du eben eine JavaScript Weiterleitung. Aber nach dem selben Schema.