Facebook
Twitter
Google+
Kommentare
16

Process und Co.

Gestern hatte ich ja bereits kurz angesprochen, dass es aus Frankreich was neues gibt. Die Komponenten von Fabien Potencier haben gestern Abend also den Weg auf meinen Computer gefunden und wollten natürlich gleich ausprobiert werden. Tja dumm gelaufen, leider habe ich die Process-Klassen nicht zum Laufen bekommen.

Im ersten Schritt hat er meine PHP.exe nicht gefunden. Ja richtig ich arbeite mit Windows. Schade eigentlich, naja da habe ich ’nen Weg drumrum gefunden. Ich habe den Pfad einfach hard reinkodiert, kann man ja mal machen, wenn man was testen will. Soweit hat es dann auch funktioniert.

Dann lief auch alles durch. Nur leider ohne Effekt. Mein Code, der eigentlich klappen sollte, sah so aus:

<?php

include_once 'Process.php';
include_once 'PhpProcess.php';

use Symfony\Components\Process\PhpProcess;

$process = new PhpProcess('C:\Users\phm\websites\phphatesme\test\script.php');
$process->run();

echo $process->getOutput();

Leider bekomme ich als Output nur den Namen des Skripts, dass ich angegeben habe. Tja jetzt stehe ich hier und habe keinen richtigen Artikel. Ich kann aber ein wenig darüber erzählen, was ich eigentlich machen wollte. Im Prinzip ganz einfach. Das Skrtipt skript.php sollte nicht mehr machen, als „hallo welt“ ausgeben. Und damit wollte auch mein aufrufendes Skript einfach nur „hallo welt“ ausgeben.

Als nächstes hätte ich dann probiert, ob die getOutput Methode nur den endgültigen output des Prozess ausgibt oder auch schon was von der Methode zurückgegeben wird wenn das Skript zwischendurch mal mit flush seine Ausgabe schon mal auf die Kommandozeile pummt. Wäre auf jeden Fall ein cooles Feature, mit dem man bestimmt einiges machen könnte. Vielleicht auch irgendwas streamartiges. Viel Platz für Spielereien. Naja leider ist es dann gar nicht so weit gekommen und eine Doku gibt es auch noch nicht. Wir müssen also unser kleines Prozess-Abenteuer ein wenig verschieben. Falls einer von euch schon weiter gekommen ist, dann hoffe ich mal, dass ihr hier ein wenig Licht ins Dunkel bringt.

Über den Autor

Nils Langner

Nils Langner ist der Gründer von "the web hates me" und auch der Hauptautor. Im wahren Leben leitet er das Qualitätsmanagementteam im Gruner+Jahr-Digitalbereich und ist somit für Seiten wie stern.de, eltern.de und gala.de aus Qualitätssicht verantwortlich. Nils schreibt seit den Anfängen von phphatesme, welches er ebenfalls gegründet hat, nicht nur für diverse Blogs, sondern auch für Fachmagazine, wie das PHP Magazin, die t3n, die c't oder die iX. Nebenbei ist er noch ein gern gesehener Sprecher auf Konferenzen. Herr Langner schreibt die Texte über sich gerne in der dritten Form.
Kommentare

16 Comments

  1. Hi
    versuchs mal mit:

    $process = new PhpProcess(file_get_contents(‚C:\Users\phm\websites\phphatesme\test\script.php‘));

    das kleine ‚as a string‘ ist nicht ganz unwichtig… 😉

    Reply
  2. Ich bin ein wenig enttäuscht, dass der Prozess nicht parallel angestoßen wird, sondern die run-Methode die komplette Verarbeitung kapselt. So ist der Mehrwert eher überschaulich.

    Reply
  3. Ich habe in der Vergangenheit schon mehrfach versucht PHP Prozesse im Hintergrund zu starten um Jobs auszulagern. Das gab immer irgendwie unschöne Seiteneffekte. Mittlerweile würde ich eher zu Tools wie dropr, Gearman, … raten. Die Installation ist meist recht simpel und die Verwendung i.a.R. auch nicht wirklich kompliziert.

    Reply
  4. @Martin: Hätte auch eine asynchrone Verarbeitung erwartet… So macht das ganze doch nur ziemlich begrenzt Sinn.
    @Stephan: Sag‘ das mal dem Hoster des Kunden…

    Reply
  5. Würde mich mal interessieren, ob das nicht an Windows liegt. Die Komponenten im Zend_Framework laufen ja auch nur unter Unix :-/

    Reply
  6. Habe mir die Process.php nicht angeschaut aber die PHP proc*-Funktionen laufen nur auf posix-Systemen. Soweit mein letzter stand.

    Reply
  7. @Adrian: Das mit Windows habe ich mir schon gedacht, leider findet man in der Doku nirgends diese Einschränkung. Ich versuchs mal auf nem Linux System, vielleicht klappt es da. Oder erstmal mit den Tipps von red.

    Reply
  8. @Adrian: Nein, die proc*-Funktionen sind Plattformunabhängig. Du meinst die pcntl*-Funktionen, die sind Posix-Only.

    Reply
  9. Zum Thema Linux kann ich nur den VMWare Player empfehlen. Der ist komplett kostenlos und man kann damit nun sogar VMWares erzeugen. Dann schnell ein Ubuntu installiert und ab gehts. =)

    Reply
  10. @Sven ja, der ist echt nicht übel, habe früher auch viel mit der VirtualBox (sun) gearbeitet, ebenfalls kostenlos.

    Reply
  11. Also ich denke hier fehlt auch etwas „Know How“.
    Ein Prozess ist ein Programm das man ein mal startet und irgendwann endet.
    Ein Service ist ein Dienst der Permanent das gleiche tut.
    Im Gegensatz zum Prozess kann der Service einfach angehalten werden, jederzeit. Das muss allerdings auch schon natürlich so programmiert werden.

    Ich habe schon mehrere Dienste in PHP programmiert die teilweise Monate laufen, allerdings nur unter Linux 😉
    Btw. haben sowohl Dienste, als auch Prozesse eigentlich nur ein Log und keine Ausgabe, denn beide laufen im Hintergrund.

    Reply
  12. Auch nicht ganz richtig: Prozesse, wie auch Dienste, können (und viele: müssen) auch eine Ausgabe besitzen. Oft existiert dazu bloss keine aktive Konsole, die das anzeigen könnte 😉 (–> stdout/sterr gehn ins Leere), oder die Ausgabe wird umgeleitet. Alles andere würde bedeuten, dass man keine Programme entwickeln könnte, die man über Pipes verknüpft.

    Nebenbei können alle Prozesse auch jederzeit angehalten werden (Interrupts), oder man kickt einfach den Parent-Prozess. Sowieso sind Diense („Services“, „Daemons“) auch nur Prozesse, bloss das diese darauf ausgelegt sind, das sie immer ohne Terminal laufen und sich nicht selbstständig beenden. „Immer das Gleiche“ ist ebenso relativ. In den meisten Fällen warten sie auf Anfragen von anderen Prozessen (auch über Netzwerk, wie zB bei einem HTTP-Daemon) und reagieren darauf entsprechend.

    Prozesse sind die kleinste Einheit ausführbaren Codes des Betriebssystems. Ein Daemon ist eine spezielle Art von Prozess.

    Reply
  13. @KingCrunch: Besser hätte ich es nicht erklären können 😉
    Das mit den Triggern wollte ich fast auch schon mit rein schreiben, aber ich denke wiki’s gibs ja genug 🙂

    Reply

Leave a Comment.

Link erfolgreich vorgeschlagen.

Vielen Dank, dass du einen Link vorgeschlagen hast. Wir werden ihn sobald wie möglich prüfen. Schließen