Threads via php

  • Threads via php

    Hi,

    also es geht um Threads in PHP ich möchte gerne wissen ob man so etwas irgendwie realisieren kann ich hab mal ein wenig google benutzt und ein paar Sachen gefunden so wirklich verstehe ich die nicht bzw glaube ich nicht mehr das die funktionieren die sind nämlich schon ein paar Jahre alt! ;)

    Es geht schließlich um folgendes ...

    User trägt was in ein Formular ein und klickt auf einen Button, dann soll diese Eingabe in einer Datenbank gespeichert werden und hiernach soll gesagt werden "führe Skript xyz mit den Parametern xy und z aus und warte nicht auf das Ergebnis sprich leite sofort auf Seite xyz weiter" ...

    Der User soll nämlich nichts von den Aktionen im Hintergrund (Daten auslesen aus einem Quelltext) mitbekommen weil das je nach dem auch etwas länger dauern kann ...

    Gibt es da irgendwie Möglichkeiten oder hat jemand Ideen?

    Also es gab mal irgendwie ne Idee wegen der Weiterleitung ob wohl das Skript läuft aus Javascript Weiterleitung und dem PHP Befehl flush() aber ich glaube das ist keine saubere Lösung ...

    Cronjob war eine Idee aber da gibt es auch Probleme ...

    Meine Idee noch war so eine Art Socket Server den könnte man Bescheid geben das der irgend eine Aufgabe erfüllen muss weiß hier nicht ob das Skript sofort weiterleitet oder erst auf irgend eine Meldung vom Socket Server wartet und btw ist das nicht schön wenn da ein Skript in einer Endlosschleife im Hintergrund rennt ...

    Grüße ^^
  • Threads via php funktionieren im Webserver nur, wenn php als CGI von Apache verwendet wird.
    Ich würde aber keine PHP Threads im Webserver Betrieb nutzen.

    Allgemein: Wenn du PHP Kommandozeilentools programmierst, funktionieren die Forks zuverlässig! (zumindest unter UNIX Systemen)
    Ich habe hier eine Anleitung veröffentlicht wie man einen Linux Daemon erstellt, der auch forks nutzt: [wiki]PHP Linux Daemon erstellen[/wiki]

    Für dein Vorhaben kannst du mit system Calls arbeiten, die im Hintergrund abgearbeitet werden.

    Hinweis: Output Stream nutzen
    Note: If a program is started with this function, in order for it to continue running in the background, the output of the program must be redirected to a file or another output stream. Failing to do so will cause PHP to hang until the execution of the program ends.


    Beispiel:

    Quellcode

    1. system('/tmp/foo.php >/dev/null &');


    Unter Windows musst du dir aber was anderes überlegen.
  • Hey,

    du verwirrst mich ein wenig mit deinen ganzen xyz's... könntest du da ein wenig expliziter werden?

    User gibt Daten ein: username123oderso?
    PHP soll auf eine Seite weiterleiten: Welche Seite? wieder deine Seite oder eine externe (google.de oder was auch immer)
    PHP frägt etwas ab? Die Seite, auf die weiter geleitet wird? Ein Programm? Was genau?

    Dann währe noch interessant, was du für eine Umgebung hast. Einen eigenen rootserver? kannst du die php.ini ändern? Und so weiter...
    Ich hab mich mal vor 1-2 Jahren mit so einer Art Daemon der unter Apache läuft beschäftigt und auch einige Erfolge erzielt. (Lief sicher im Hintergrund und hat testweise alle halbe Stunde etwas in eine Datei geschrieben)

    Gruß,
    Dominic
    My lovely mister singing club...
  • Hat sich normal so weite erledigt!

    Es ging darum das ein User in ein Textarea ein oder mehre Url(s) eingibt auf einen Button klickt und die Url(s) in einer Datenbank gespeichert werden, dann sollen aus dem Quelltext der Url(s) bestimmte Daten abgerufen werden die dann auch wieder in einer Datenbank gespeichert werden sollen / sollten ...

    Per Cronjob war das bis gestern zu problematisch aber jetzt hab ich dank einem netten User aus diesem Forum eine Idee wie ich das doch mit Hilfe von Cronjobs regeln kann ...

    Man könnte die Daten natürlich direkt abfragen wenn die Url(s) in die Datenbank eingetragen werden aber das würde unter Umständen mehre Sekunden in Anspruch nehmen und den User stören ...

    Naja Rootserver hab ich keinen aber der für den das ist nutzt einen VServer ^^
  • Hey,

    das schreit doch nach AJAX.
    Du klickst auf Absenden und die URLs werden im Hintergrund an den Server geschickt. Du kannst ja auch zwei Parallele Requests starten. Einen für die DB, wo du auf eine Antwort wartest (Eintrag erfolgreich) und einen den du einfach absendest und vergisst - die URLs. Das PHP-Script kann ja im Hintergrund ohne Probleme weiter arbeiten und zur Kontrolle (das es funktioniert hat) in ein Logfile schreiben.

    Gruß,
    Dominic
    My lovely mister singing club...