Я из Китая, поэтому мой английский, возможно, очень беден. Я стараюсь, чтобы вы поняли мой вопрос. Я хочу использовать 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(); }
Поскольку возвращаемая строка не то, что мне нужно, я использую подстроку для получения правильных результатов, но иногда я не могу получить то, что хочу по правде. Я думаю, что мой метод может быть неправильным, но я не могу найти никакой информации из Интернета.
Вы можете мне помочь? Большое спасибо! Ждем Вашего ответа
Если я пойду по вашему примеру кода, вопрос не имеет смысла. Однако по вашему вопросу вы можете выполнить 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 .
Надеюсь, это то, что вы ищете.