C#PHP-CGI - 调用phpinfo崩溃了webserver

时间:2012-01-08 13:43:05

标签: c# php cgi webserver

我创建了一个简单的小型网络服务器,仅用于处理GET请求。我还想添加PHP支持并管理它。但是有一个问题:

每当我尝试在.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使用了所有内容。任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

问题是StandardOutput具有一定的缓冲区大小。如果此缓冲区已满,则任何write()到stdout都将被阻止。现在,如果你致电p.WaitForExit(),你将无限期地等待。

解决方案是首先阅读StandardOutput中的所有内容,然后调用WaitForExit