C# php-cgi mit c# starten.

lordfritte

Lieutenant
Registriert
Juli 2006
Beiträge
1.013
Hallo ich habe ein kleines Problem, ich möchte eine php datei über die php-cgi.exe mit c# parsen.
Code:
Process p = new Process();
p.StartInfo.FileName = "D:\\xampp\\php\\php-cgi.exe";
p.StartInfo.CreateNoWindow = true;
p.StartInfo.Arguments = "C:\\phptest.php";
p.Start();
if (!p.WaitForExit(10000))
{
   p.Kill();
   throw new Exception("Php TimeOut");
}
string res = p.StandardOutput.ReadToEnd();

bei "p.StandardOutput.ReadToEnd();" bekomme ich aber eine Exception:
Code:
StandardOut wurde nicht umgeleitet, oder der Prozess wurde noch nicht gestartet.
 
Das müsste helfen:
Zum Verwenden von StandardOutput müssen Sie ProcessStartInfo..::.UseShellExecute auf false und ProcessStartInfo..::.RedirectStandardOutput auf true festlegen. Andernfalls löst das Lesen aus dem StandardOutput-Stream eine Ausnahme aus.

Quelle: MSDN
 
Einfach das hinzufügen:
Code:
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
 
Also bei WaitForExit hängt er sich auf und nach 10 sekunden springt er dann in die if Verzweigung.
 
Die WaitForExit(Int32)-Überladung wird verwendet, damit der aktuelle Thread wartet, bis der zugeordnete Prozess beendet wird. Diese Überladung weist die Process-Komponente an, für eine begrenzte Zeit zu warten, bis der Prozess beendet wird. Wenn der zugeordnete Prozess am Ende des Intervalls nicht beendet wird, da die Anforderung zum Beenden verweigert wurde, wird für die aufrufende Prozedur false zurückgegeben.


Versuchs mal mit HasExited
Ergänzung ()

Außerdem schließt WaitForExit den aktuellen Prozess nicht. Das musst du schon selbst erledigen, sonst gibt p.WaitForExit immer false aus.
 
Also mit WaitForExit(1) läuft es, aber es kommt immer das zurück:
Code:
Status: 403 Forbidden
X-Powered-By: PHP/5.2.6
Content-type: text/html

Access denied.
 
Zuletzt bearbeitet:
ich denke du meinst CLI, und nicht CGI. Ein CGI-Interface wird vom Webserver aus aufgerufen, ein CLI aus der Befehlszeile.. also so wie du es hier gerade versuchst.
 
Es gibt im Php order aber keine exe mit CLI drin..

Kann es sein dass man die cgi-php.exe nicht aus einem Thread starten kann?
 
Zuletzt bearbeitet:
Ich denke auch, dass du die CLI brauchst.
 
Also ich habe mir jetzt mal XAMPP Windows 1.7.1 runter geladen und wie gesagt da gibt es keine *cli.exe
 
Was willst du denn mit PHP machen? Du kannst dir wie gesagt auch von php.net eine Windows Binary runterladen, dort ist die CLI Version normalerweise enthalten.

Wenn du den Webserver (Apache) nicht brauchst ist XAMPP überdimensioniert. Theoretisch reicht PHP5 und (falls benötigt) MySQL. Beides ist problemlos zu installieren.
 
Naja ich bin einen eignene Webserver am Programmieren und PHP unterstützung wäre nicht schlecht.
 
Du willst einen Webserver programmieren? Vermutlich in C# und würdest gerne PHP als Scriptsprache anbieten?

Dann kannst du:
  • Mit C# via FastCGI (so wie es der IIS macht) auf PHP zugreifen, weiß aber nicht ob und wie einfach das geht (edit: hier wurde das auch diskutiert)
  • Mit C# via PHP-CLI auf PHP zugreifen (am einfachsten)

Daher empfehle ich dir, erstmal einfach das PHP Package (meinetwegen auch den Installer) von php.net runterzuladen und dich damit einzuarbeiten (edit: PHP ist nichts besonderes, das liegt dann in einem Verzeichnis und kann via aufruf der php-cli.exe gestartet werden). Den XAMPP würde ich erstmal wieder deinstallieren, es sei denn du brauchst die ganzen Dienste (Xampp, MySQL, Filezilla Server usw.).

Wenn du die Basics dann hast kannst du noch einen MySQL Dienst in Betrieb nehmen (auch ganz einfach, Setup.exe, Weiter.. weiter... weiter... Passwort) und den dann mit PHP ansprechen. Voila, hast deinen eigenen Webserver.
 
Zuletzt bearbeitet:
... Ne auch bei dem Installer, es gibt keine PHP-CLI exe

Aber ich habe dem auch gesagt er soll mir alle extras installieren aber der Ordner ist so gut wie leer...
 
Beginnend mit PHP 5 wird das CLI im Hauptordner als php.exe ausgeliefert. Die CGI-Version heisst php-cgi.exe.
In PHP5 heißt die wohl einfach "php.exe" (Quelle).

D.h. in deinem Ordner müsste jeweils eine php.exe und php-cgi.exe sein.
 
ja bei php-cgi.exe bekomme ich eben diesen Fehler: "StandardOut wurde nicht umgeleitet, oder der Prozess wurde noch nicht gestartet."
und bei der php.exe bekomme ich einen leeren string.

Wenn ich php-cgi.exe in eine COnsolen-Anwendung einbaue geht es, in meinem Server nicht, kann es sein dass man die php-cgi.exe nicht aus einem Thread starten kann?
 
Zuletzt bearbeitet:
und bei der php.exe?
 
Zurück
Oben