PHP proc_open Probleme bei Windows

8

Ich habe den folgenden Code

%Vor%

Und die Ausgabe, die ich bekomme, ist

%Vor%

Warum wird die Portoption ignoriert? Der Befehl funktioniert einwandfrei in der Befehlszeile.

    
Ed Heal 28.03.2012, 22:45
quelle

3 Antworten

3

Der Fehler, der gesehen wurde

%Vor%

wird von mysql ausgelöst, so dass der mysql-Prozess tatsächlich gestartet wurde.

Dieser Fehler entspricht CR_IPSOCK_ERROR und gibt die zugrunde liegende Ursache des Problems aus: 10106 .

Eine schnelle Suche gibt:

Ссылка

und insbesondere:

%Vor%

Ich glaube nicht, dass dies etwas damit zu tun hat, dass die Portnummer "ignoriert" wird und noch weniger Firewall-Probleme.

Es scheint, als wäre die von proc_open erzeugte Umgebung gut genug, um den mysql-Prozess zu starten, aber noch nicht vollständig genug, so dass Aufrufe von LoadLibrary aus diesem Prozess heraus fehlschlagen, um den Netzwerkcode zu laden.

Der gleiche Befehl funktioniert von der Befehlszeile aus, wahrscheinlich weil die Umgebung in der Befehlszeile viel mehr enthält.

    
Marc Alff 03.04.2012, 02:20
quelle
1

Das $ env-Argument von proc_open ersetzt die aktuelle Umgebung, aber wenn es NULL ist, wird die Umgebung des aktuellen Prozesses verwendet.

Eine mögliche Lösung wäre, putenv () zu verwenden, um die aktuelle Umgebung zu ändern, anstatt ein neues Array für $ env anzugeben. Lassen Sie die Vererbung der Umgebung funktionieren.

Ich habe dieses Problem mit der Symphony / Process-Komponente beim Start eines PHP-Prozesses festgestellt. In Linux hat alles funktioniert, aber der Prozess ist bei Windows-Servern ohne Netzwerkzugriff fehlgeschlagen. Die Verwendung von putenv () und NULL für $ env funktionierte in beiden Betriebssystemfällen einwandfrei und löste das Problem. Die Wirkung von putenv () hält nur für die Dauer der Anfrage an, die es ausgibt, also sollte es sicher sein, es sei denn, Ihre Änderungen verursachen Probleme mit dem Rest Ihres Skripts oder es gibt Sachen in Ihrer aktuellen Umgebung, die nicht gesehen werden sollten im geöffneten Prozess.

Ich habe meinen Weg hierher gegoogelt und nach Antworten gesucht, und die Informationen haben mir definitiv zu einer Lösung verholfen. Es war wahrscheinlich zu lange, um dem ursprünglichen Poster zu helfen, aber vielleicht kann es der nächsten Person helfen.

    
rgriff59 22.05.2014 19:37
quelle
0

Versuchen Sie, Ihre Firewall auszuschalten oder den Port zu aktivieren

    
danielpopa 02.04.2012 18:43
quelle

Tags und Links