system() sendet header

Alles, was PHP betrifft, kann hier besprochen werden.

system() sendet header

Postby Mätes » 25. February 2008 13:48

Moin,

ich will einen länger dauerndes Skript starten, ohne das der User auf das Ergebnis warten muss. folgendes klappt auch soweit:
Code: Select all
system("php script.php > log.txt & echo \$!");


Die Anweisung gibt einen INT-Wert aus, den ich abfangen/löschen kann:
Code: Select all
ob_start();
system("php script.php > log.txt & echo \$!");
ob_clean();


ABER leider sendet system() auch einen Header, den ich damit NICHT abfangen kann.
Da ich hier mit einem Framework und XAjax und Cookies arbeite, ist das gar nicht gut.
Hat jemand eine Idee, wie ich system() das abgewöhnen kann oder ich das senden eines Headers verhindern kann?

Habe schon mehrere Wege probiert, aber nichts hat gewirkt.
Auch der Verzicht auf ein Logfile, also
Code: Select all
system("php script.php > /dev/null & echo \$!");

brachte nichts.

Weiß jemand Rat?

Thanks,
ma
User avatar
Mätes
 
Posts: 142
Joined: 13. April 2006 09:34
Location: kölle

Postby Wiedmann » 25. February 2008 13:59

ABER leider sendet system() auch einen Header,

Eine Header sendet system() eigentlich keinen. Aber dein aufgerufenes PHP Script produziert wohl doch eine Ausgabe.

Kannst du nicht auch exec() verwenden, welches die Ausgabe des aufgerufenen Programmes erst gar nicht anzeigt/ausgibt?
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Scory » 25. February 2008 14:45

>system("php script.php > log.txt & echo \$!");

Wieso machst Du "echo $!" dahinter? Das produziert natürlich einen Output (und zwar die ProcessID des gestarteten PHP-Prozesses).

Richtig ist es so:

Code: Select all
system("php script.php >log.txt &");


Und falls Du auch die Fehlerausgabe umleiten willst, könntest Du sie auf /dev/null ausgeben:

Code: Select all
system("php script.php 1>log.txt 2>/dev/null &");


MfG
Scory
Scory
 

Postby Mätes » 25. February 2008 16:21

Danke Leute, alle drei Vorschläge funktionieren.

Muss dazu sagen, der system-Aufruf ist nicht auf meinem Mist gewachsen,
ab dem '>' hört mein Wissen auf.
Ansonsten habe ich viel mit system(), passthru() und exec() rumprobiert,
scheinbar habe ich die richtige Kombination nicht getestet ...
Und mittendrin waren wahrscheinlich noch andere Verzweifelungs-Fehler drin,
wie z.B. falschen Pfand angegeben (was nicht angezeigt wurde).

@ scory
Hatte es mal mit
system("php script.php > log.txt");
probiert (also ohne das ' &'), und das klappt auch nicht.
Das das echo \$! für den Auswurf der ID zuständig ist, ist ein guter Hinweis.

@ Wiedmann
bei mir hat XAjax immer gemeckert, das der Header schon raus ist,
und das schmeckte ihm gar nicht.

Nochmal danke, hat mir heute einiges an Kopfzerbrechen bereitet.

gruß
ma
User avatar
Mätes
 
Posts: 142
Joined: 13. April 2006 09:34
Location: kölle


Return to PHP

Who is online

Users browsing this forum: No registered users and 21 guests