将内存中的数据从PHP传递到.Net程序

时间:2009-09-25 08:56:13

标签: .net php

如何将内存中的数据从PHP传递到.Net程序?我将使用Process来调用 php.exe ,并传入脚本名称(* .php)和参数。

现在的问题是如何将数据从PHP传递回.Net?

具体来说,我正在研究PHP可以传递数据的方式,以便.Net可以拦截它。我的.Net代码与此类似:

Process p = new Process();
StreamWriter sw;
StreamReader sr;
StreamReader err;
ProcessStartInfo psI = new ProcessStartInfo("cmd");
psI.UseShellExecute = false;
psI.RedirectStandardInput = true;
psI.RedirectStandardOutput = true;
psI.RedirectStandardError = true;
psI.CreateNoWindow = true;
p.StartInfo = psI;
p.Start();
sw = p.StandardInput;
sr = p.StandardOutput;
var text1 = sr.ReadToEnd();  // the php output should be able to be read by this statement
sw.Close();

编辑:有人建议使用XML,这很好。但XML是一个基于文件的系统;我希望以一种方式将数据交互传递到内存中,以防止意外写入同一XML文件。

4 个答案:

答案 0 :(得分:3)

你可以使用带有PHP的流来STDOUT:

<?php
$stdout = fopen('php://stdout', 'w');

然后在.NET中捕获输出。我对.NET没有多少经验,但这似乎可以让你捕获进程的输出:

http://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardoutput.aspx

答案 1 :(得分:1)

将数据传递到不同应用程序的首选方法是XML。无论是文件形式,还是ArsenMkrt通过网络服务提到的。

使用这种技术,您确信几乎所有技术都能够处理您的数据。

答案 2 :(得分:0)

我不知道PHP,但我认为它将具有使用Web服务的功能,在.net中编写与您的网络程序一起使用的Web服务并将数据从您的php服务器传递到该服务

答案 3 :(得分:-2)

改进Inspire's solution,这是完整的代码:

<强> PHP:

<?php

$stdout = fopen('php://stdout', 'w');
$writeString ="hello\nme\n";
fwrite($stdout, $writeString);
fclose($stdout);

这是.Net代码:

[Test]
public void RunConsole()
{
    Process p = new Process();

    p.StartInfo.UseShellExecute = false;
    p.StartInfo.RedirectStandardOutput = true;
    p.StartInfo.FileName = @"C:\Program Files\PHP\php.exe";
    p.StartInfo.Arguments = "\"C:\\Documents and Settings\\test\\My Documents\\OurPHPDirectory\\OutputData.php\"";
    p.Start();
    string output = p.StandardOutput.ReadToEnd();
    p.WaitForExit();
    Assert.AreEqual(0, p.ExitCode);
    Assert.AreEqual("hello\nme\n", output);

}