Как использовать PHP CLI в C # - PullRequest
2 голосов
/ 20 июня 2011

Я из Китая, поэтому мой английский может быть очень плохим.Я сделаю все возможное, чтобы вы поняли мой вопрос.Я хочу использовать PHP CLI в моем проекте C #.Я попробовал подобный код

Process p = new Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.Arguments = command;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;
try
{
    p.Start();
    p.StandardInput.WriteLine(command);
    p.StandardInput.WriteLine("exit");
    p.WaitForExit(1000);
    StreamReader reader = new StreamReader(p.StandardOutput.BaseStream, Encoding.GetEncoding("utf-8"));
    string text= reader.ReadToEnd();
    if (text.IndexOf(command) != -1)
    {
        int start = text.IndexOf(command) + command.Length;
        string endstring = rootpath + ">exit";
        int end = text.IndexOf(endstring);
        text = text.Substring(start, text.Length - start - endstring.Length).Trim();

        return text;
    }

    return "";
}
catch (System.Exception ex)
{
    return "";
}
finally
{
    p.Close();
}

Поскольку возвращаемая строка не то, что мне нужно, я использую подстроку для получения правильных результатов, но иногда я не могу получить то, что действительно хочу.Я думаю, что мой метод может быть неправильным, но я не могу найти какую-либо информацию в Интернете.

1 Ответ

1 голос
/ 20 июня 2011

Если я пойду по вашему примеру с кодом, вопрос не имеет смысла.Однако в соответствии с вашим вопросом вы можете выполнить PHP-скрипт из CLI и собрать вывод, используя что-то вроде следующего:

System.Diagnostics.Process proc = new System.Diagnostics.Process();
string sOutput = "";

proc.EnableRaisingEvents = false;
proc.StartInfo.FileName = "php.exe";
proc.StartInfo.Arguments = "-f file.php";
proc.StartInfo.RedirectStandardOutput = true;

System.IO.StreamReader hOutput = proc.StandardOutput;

proc.WaitForExit(2000);

if(proc.HasExited)
   sOutput = hOutput.ReadToEnd();           

Половина этого кода - моя собственная, а остальная часть - из фрагмент Я нашел через Google .

Надеюсь, это то, что вы ищете.

...