2012-01-08 11 views
0

GETリクエストのみを処理するためのシンプルで小さなWebサーバーを作成しました。また、PHPサポートを追加したいと思っていました。しかし、1つの問題があります:C#PHP-CGI - phpinfoを呼び出すとwebserverがクラッシュする

私はいつも.phpファイルの中でphpinfo()を呼び出そうとしますが、私のサーバは "WaitForExit"プロセスで停止します。

class FastPHP 
    { 
     private string _phpPath = @"C:\\Program Files (x86)\\PHP\\php-cgi.exe"; 
     Process p; 

     public FastPHP(string filename) 
     { 
      p = new Process(); 
      p.StartInfo.FileName = this._phpPath; 
      p.StartInfo.CreateNoWindow = true; 
      p.StartInfo.Arguments = "-q \""+filename+"\""; 
      p.StartInfo.RedirectStandardOutput = true; 
      p.StartInfo.UseShellExecute = false; 
     } 

     public string getPHPOutput() 
     { 
      p.Start(); 
      p.WaitForExit(); 
      string sOutput = p.StandardOutput.ReadToEnd(); 
      p.Close(); 

      return sOutput; 
     } 
    } 

私のPHP.iniの設定はすばらしく、私はすべてのものをfastcgi用に調整しました。任意のアイデアどのようにこの問題を解決するには?

+0

PHPモジュールに問題がある可能性があります。すべてのモジュールを無効にして、それを1つずつ有効にしてください。 – rekire

+1

最初に 'string sOutput = p.StandardOutput.ReadToEnd();'と 'p.WaitForExit();'を実行するとどうなりますか? – vstm

+0

haha​​、thanks vstm!これはうまくいった!私はそれに私の頭を粉砕し、ソリューションはとてもシンプルです!ありがとう! – Live

答えて

0

問題は、StandardOutputに特定のバッファサイズがあることです。このバッファがいっぱいであれば、write()からstdoutまでブロックされます。今すぐp.WaitForExit()に電話をしたら、無期限に待っています。

解決策は、まずStandardOutputからすべてを読み取り、WaitForExitに電話することです。

関連する問題