Andreas Korthaus: Die Lösung

Beitrag lesen

Hallo nochmal.

Also das ganze habe ich mir ehrlich leichter vorgestellt.

Ich habe das Problem ein wenig eingekreist:

  • hat es evtl was damit zu tun das es sich um Windows handelt?

jedenfalls sollten bidirektionale Pipes nicht funktionieren! Das ist ein Bug in PHP, der auch nur in wenigen OS funtioniert, WIN anscheinend nicht(Zitat siehe unten: [1]).

Somit bin ich wieder am Anfang, ich bekomme die Daten jetzt vermutlich auf den Server, wie komme ich jetzt an die Ausgabe?

Vermutlich bleibt nir bei PHP  nur folgende Variante:

$dump = urlencode(get_table_data("s_objekte"));

$fp = popen("curl --data @- http://www.server.de/sync_master.php > curlausgabe.txt", "w");
fputs($fp, "test=".$dump);
pclose($fp);

Das funktioniert jetzt jedenfalls, in der Datei curlausgabe.txt stehen die ersehnten Daten ;-) Wenn Ihr noch ne Idee habet wie ich das ophne Umweg über eine externe Datei machen kann(und ohne auf eine andere Programmiersprachen umzusteigen;-)), dann her damit!

Ein kleiner Wehrmutstropfen:

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!

[1] Zitat von php.net:

Unfortunately many of these posting are wrong. First, you cannot use 'r+' or 'w+' in popen as it is defined to accept only reading or writing (unidirectional.) There does appear to be some kind of bug that returns the stdout into the page on pclose but this behavior can not be counted on. If you want a bi-directional popen, go to the bug database and lookup bug#9824. You can vote for a bi-directional popen there.

The post describing the two 'named' pipes approach is currently the only way I can simulate the bi-popen(). THIS HAS A PROBLEM. Writers and Readers will BLOCK on pipes so you could have many webprocess waiting on blocked pipes. Also, notice that there could be race conditions as well since you can't gaurantee that the correct reader and writer get on the pipe at the same time. One web process maybe reading the writings of the WRONG mate process.

I've tried every conceivable combo with popen, I even tried using popen in combo with only one named pipe for output. This hung though due to blocking behavior. Maybe if you compile in pcntl stuff you can get it to work, but that is not an option for me.

An dieser Stelle schonmal vielen Dank, Ihr habt mir sehr geholfen!

Viele Grüße
Andereas

PS: Bei meinen Versuchen ist mir der Apache mehrmals abgeschmiert ;-)