Andreas Korthaus: Die Lösung

Beitrag lesen

Hi!

Ja, das wäre die einfachste Idee die ich hätte. Eine weitere wären named pipes (mit mkfifo) die in dem Doku-Ausschnitt erwähnt wurden.
Bei einer richtigen[tm] Programmiersprache würde man an dieser Stelle zwei verbundene Pipes (pipe()-Bibliotheksfunktion iirc) erzeugen, einen fork machen (mit fork()), im Kindprozess je ein Ende der beiden Pipes mit Stdin bzw. Stdout verbinden (das andere Ende schliessen; im Elternprozess ebenfalls das andere Ende schliessen) und dann mit exec() das gewünschte Kommando aufrufen. Mit exec() wird dein Programm (im Kindprozess) aus dem Speicher entfernt und das neue Programm an dessen Stelle geladen, aber die umgeleiteten Stdin/out bleiben erhalten. (Perl hat für diesen Zweck übrigens extra open2 und open3-Funktionen.)

Hm, sowas mit fork hat auch in der Apache Error-Log gestanden, aber das muß ich mir mal in Ruhe angucken, das mit den Prozessen ist doch  nicht so einfach wie es sich anhört ;-)

Also, wenn du die Möglichkeit hast, das PHP upzudaten: http://www.php.net/manual/en/function.proc-open.php.

Hätte ich wohl, aber wie komme ich da ran? Habe im CVS geguckt, da nur alle möglichen "wirren" Dateien gefunden, wie soll das funktionieren?

Ansonsten: PHP ist fast eine richtige Programmiersprache und die erwähnten fork() und exec()-Funktionen, allerdings nicht unter Windows und nicht defaultmäßig aktiviert: http://www.php.net/manual/en/ref.pcntl.php. Solltest du diesen Weg wählen (das ist übrigens der richtige[tm]), solltest du dir aber wirklich was Gutes zum Lesen über Prozesskontrolle und Interprozesskommunikation besorgen.

Oh weh, das mit Prozessen muß ich auf alle Fälle mal machen, aber jetzt nicht ;-)

Ich weil ja den Dump übertragen, wo wir vorher mit Mühe und Not die \n´s reinbekommen haben - die sind wieder weg ;-) Aber nicht nur das, der kpomplette Dump ist irgendwo durch eine Art addslashes() gegangen, vor jedem '"\ usw. steht jetzt ein , daher sind vermutlioch jetzt 3 Slashes vor dem n, also \\n und schon ergibt das für die Ausgabe einen \ und einen Umbruch ;-) OK, das bekomme  ich mit stripslashes wieder weg, würde mich nur mal interesieren, wo die Dinger bitte herkommen!

Naja, für das PHP-Skript sieht es ja so aus als wären die Daten über POST reingekommen (sind sie ja auch). Wenn du die Rückrichtung meinst, schau mal nach magic_quotes_runtime.

Das komische, wenn ich das ganze durch stripslashes schicke, ist alles wieder normal, nur das die Absätze sich von \n in echte Absätze geändert haben ;-) also nochmal die regExpr drüber ;-)

Ansonsten kann ich sagen, dass die Dateilösung halbwegs befriedigend ist, wenn darin keine vertraulichen Daten kommen und du dich vor evt. Problemen mit dem Überschreiben vorhandener Dateien hütest. Siehe http://www.php.net/manual/en/function.tmpfile.php.

Ich verstehe nicht, was da der Unterschied ist, die Daten in einer Variable zwischenzuspeichern? Ob ich das temporär zur Laufzeit in einer Datei oder einer Variable speichere, da ist die Variable bestimmt erheblich schneller!
Außerdem bringt das hier nicht viel, denn mein Problem ist ja, das ich die Ausgabe nicht lesen kann, ich schreibe die Datei ja direkt aus der Shell, daher bringt das hier eh nichts!

Vielen Dank jedenfalls!

Grüße
Andreas