C # PHP-CGI - вызов phpinfo приводит к сбою веб-сервера - PullRequest
0 голосов
/ 08 января 2012

Я создал простой и небольшой веб-сервер для обработки только запросов GET. Я также хотел добавить поддержку PHP и также справился с этим. Но есть одна проблема:

Каждый раз, когда я пытаюсь вызвать phpinfo () внутри файла .php, мой сервер останавливается в процессе «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 голосов
/ 09 января 2012

Проблема в том, что StandardOutput имеет определенный размер буфера.Если этот буфер заполнен, любой write() на стандартный вывод будет заблокирован.Теперь, если вы звоните p.WaitForExit(), вы ждете бесконечно.

Решение состоит в том, чтобы сначала прочитать все с StandardOutput, а затем вызвать WaitForExit.

...