我创建了一个简单的小型网络服务器,仅用于处理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使用了所有内容。任何想法如何解决这个问题?
答案 0 :(得分:0)
问题是StandardOutput
具有一定的缓冲区大小。如果此缓冲区已满,则任何write()
到stdout都将被阻止。现在,如果你致电p.WaitForExit()
,你将无限期地等待。
解决方案是首先阅读StandardOutput
中的所有内容,然后调用WaitForExit
。