C#PHP-CGI,支持cookie

时间:2016-08-10 15:05:33

标签: c# php cookies server cgi

我正在尝试创建一个WebServer,它正在使用HTML,Images ... 但我想实现PHP,我有一个PHP-CGI的工作实现,但它不能用于'file_get_contents'和cookies之类的东西。 我想知道是否有办法解决这个问题?

private string ProcessPHP(string phpPath, CookieCollection cookies)
{
    Process CGI = new Process();
    CGI.StartInfo.FileName = "php\\php.exe";
    CGI.StartInfo.CreateNoWindow = true;
    CGI.StartInfo.Arguments = "-q \"" + phpPath + "\"";
    CGI.StartInfo.RedirectStandardOutput = true;
    CGI.StartInfo.UseShellExecute = false;
    CGI.Start();

    string OutputText = CGI.StandardOutput.ReadToEnd();

    CGI.WaitForExit();
    CGI.Close();

    return OutputText;
}

我知道我没有对CookieCollection做任何事情,但我想知道如何使用它。

谢谢!

1 个答案:

答案 0 :(得分:0)

这是一个老问题,但目前 php 的 windows 版本带有单独的 php-cgi.exe。这是您必须运行的可执行文件。

使用CGI,脚本信息和请求头通过环境变量发送,即:

CGI.StartInfo.info.EnvironmentVariables["SCRIPT_FILENAME"] = @"c:/wwwroot/index.php";

更详细的例子见https://en.wikipedia.org/wiki/Common_Gateway_Interface

诸如 cookie 之类的 HTTP 标头也通过环境变量发送。它们以 'HTTP_' 为前缀,破折号转换为下划线:

CGI.StartInfo.info.EnvironmentVariables["HTTP_COOKIE"] = ...

如果您的请求正文包含数据,您必须设置 CONTENT_LENGTH 环境变量,并在启动进程后将数据写入 CGI.StandardInput