Probleme mit Weiterleitungen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
ansteuerung
aufgabe
aufruf
bot
browser
code
einrichten
header
job
minute
nachricht
sekunde
server
starten
text
tun
url
versuch
weiterleitung
zeitstempel
-
Hallo!
Ich bastel an einem Bot für telegram. Der soll eine große Menge an Text ausgeben, dh er soll 150-300 (das Schwankt) Nachrichten in einen Kanal pumpen. So aller 2 sek, zB, eine Nachricht, 300 mal. Dafür starte ich ein *.php, die ausführt und danach auf sich weiterleitet.
Wenn ich mit ...
sleep();
header();
...baue, dann geht das. Jedoch bricht die Verarbeitung beim Aufruf im Browser nach so und so viel Weiterleitungen ab (fern ab der 300).
Ich habe nun versucht, die Datei zu kopieren (mit Zeitstempel), und die kopierte Datei aufzurufen, aber auch da bricht er ab:
$zeit = (string)date("YmdHis"); //$trace .= "zeitstempel: ".$zeit."<br>";
$file = "orginal.php";
$newfile = "kopie_".$zeit.".php";
copy($file, $newfile);
sleep(10);
$weiterleitung = $newfile.".php?id=".$id;
Header("Location:".$weiterleitung);
Und - schwupps - bin ich mit meinem Latein am Ende. Weiß jemand Rat?
Würde es zB gehen, wenn ich die Datei auf zwei Domains hinterlege und dann zwischen diesen immer hin- und herwechsel?
Serverseitige, administrative Lösungen sind ebenso wie Javascript unbrauchbar in meinem Fall.
Danke für Lösungsansätze! -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hallo sonok,
unter den vorgegebenen Umständen schien mir dein Vorhaben zunächst schwierig, aber dann kam ich auf eine simple Idee:<?php header("Refresh: 2");
Der HTTP-Header weist den Browser an, in 2 Sekunden die Seite neu zu laden. Bleibt nur zu hoffen, dass die Anweisung in dem eingesetzten Browser beachtet wird. Falls nicht, kann man noch die Alternative per meta-Tag versuchen.
Du kannst auch eine andere Url angeben:<?php header("Refresh: 2; url=http://example.com/");
Und den Mechanismis zum Mitzählen bekommst du bestimmt selbst implementiert. -
Und das klappt mit cron-job-aufrufen?
-
Ok, dass dieses Skript aus einem Cronjob heraus aufgerufen wird, war mir nicht ganz klar, da du einmal "Browser" erwähnt hattest. Vermutlich funktioniert meine Lösung dann also nicht.
Wie und wo richtest du diese Cronjobs ein? Meist kann man die Aufrufe nämlich minütlich neu starten. Das wären für dich dann 30 Aktionen pro Cronjob. Zum einen kannst du wie bisher mit Weiterleitungen arbeiten, zum anderen kannst du auch mehrere Nachrichten in einen Skriptaufruf versenden. Dabei musst du nur auf das Limit der Ausführungszeit achten und vielleicht hat auch der Cronjob-Client ein eigenes Timeout. Das lässt sich durch Probieren feststellen.
Wenn du beispielsweise 6 Nachrichten auf einmal sendest, dauert das Skript 12 Sekunden. Dieses müsste dann noch 4 Mal weiterleiten. (für insgesamt 5 Aufrufe) An den Parametern kann man wie gesagt noch schrauben, aber eine Minute kannst du damit bestimmt überbrücken, bis dann (hoffentlich) der nächste Cronjob anläuft und die Aufgabe übernimmt. -
Das anlegen von Unmengen an Cronjobs will ich umgehen, daher der Versuch der Weiterleitungen.
Wenn bei den Cronjobs mal einer ausfällt ist der ganze Textblock futsch. Ich bräuchte außerdem eher eine ziemlich sekundengenaue Ansteuerung ... wenn mal der Server oder so einen schlechten Tag hat und die Cronjobs kommen genau rein ist das auch Mist.
Naja, von Server zu anderem Server umleiten geht auch nicht, inzwischen getestet. -
Gut, das was wir hier tun ist alles andere als sauber. Am besten wäre es, wenn ein PHP-Skript von der Kommandozeile ohne Zeitlimit gestartet wird und alleine die ganze Serie erledigt. Aber deinem Eröffnungspost nach ist das wohl nicht möglich.
Ich nehme an, du möchtest den Bot hier auf Lima-City zum Laufen bekommen, richtig?
sonok schrieb:
Dass ein Cronjob ausfällt, halte ich für eher unwahrscheinlich, im Gegensatz zu dem Risiko, dass die Weiterleitungskette abbricht. (z.B. durch ein Timeout)
Wenn bei den Cronjobs mal einer ausfällt ist der ganze Textblock futsch.
sonok schrieb:
Das bekommt man hin - durch entsprechend geregelte Verzögerungszeiten.
Ich bräuchte außerdem eher eine ziemlich sekundengenaue Ansteuerung ...
Eins ist mir auch noch nicht klar: Der Bot läuft einmal etwa 10 Minuten (300 Nachrichten im Abstand von 2s), aber wie oft muss er das tun? Stößt du ihn z.B. manuell an für die nächsten 10 Min. oder soll er täglich einmal für 10 Min. arbeiten? -
Nein, commandozeile hab ich nicht. Das wäre die aller letzte Option ... das ich mir einen kleinen Raspery kaufe und den 24/7 ans Netz hänge und von dem aus die .php immer aufrufen. Aber das mach ich erst wenn alles andere scheitert.
Bisher nutz ich für Cronjobs irgend so einen freien Service, da hab ich schon mal den ein oder anderen verloren ( der startet täglich 2 Stück ).
Naja, ich mag 1x täglich verschiedene Textblöcke anlegen, also Mo 150, Di 230, Mi 110 usw usf, wöchentliche Wiederholung, also das wäre schon eine Masse an Cronjobs zum einrichten.
Naja, ich versuch jetzt mal was anderes ... nämlich daß ein zweiter Bot den Raum überwacht und bei einer Nachricht des ersten Bots die *.php ausführt (webhook-Zeugs oder so) und ich so zu Potte komme. Mal sehen, bin nicht so'n Freund von high-end-Scripten schreiben :( -
Hallo sonok,
ich nutze auch einen "freien" Cron-Job-Anbieter, der es mir allerdings ermöglicht, meine Aufgaben unter anderem auch alle 2 Minuten zu starten. Vielleicht schaust du dir das Angebot mal an und findest doch auch die Lösung. -
Hallo!
Ich glaub bei dem bin ich auch ... naja, 2 min ist eh ein zu lange Spanne.
Aber ich hab's mit dem webhook des Bots hinbekommen \o/
So ein Bot kann darauf reagieren, daß irgendwer irgendwas schreibt, also sozusagen wird er ausgelöst wenn Text eingegeben wird.
Also, mein Bot schreibt was und dadurch wird ein weiterer Bot aufgerufen, der dann nach einem sleep dem ersten Bot wieder was zu schreiben gibt usw usf. Wenn alles geschrieben ist schreibt der Schreibbot nix mehr und die Kette ist unterbrochen. :)
Sicher kann man das auch mit einem Bot erledigen. Egal ^^
Jetzt muß ich nur noch einmal einen Cronjob einrichten, der einen ersten Beitrag schreibt :)
Trotzdem nochmal danke an die Leutchen, die versucht haben mir zu helfen. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage