Graviton
Graviton

Reputation: 83294

Pass Data In Memory from PHP to a .Net Program

How to pass data in memory from PHP to a .Net program? I will use Process to call the php.exe, and pass in the script name (*.php) and the arguments.

The issue now is how do I pass back the data, from the PHP to the .Net?

Specifically, I am looking at the manner in which PHP can pass out the data so that .Net can intercept it. The .Net code I have are similar to this:

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();

Edit: Some suggest the use of XML, which is fine. But XML is a file based system; I would prefer a manner in which the interaction of data are passed in memory, just to prevent accidentally writing to the same XML file.

Upvotes: 3

Views: 229

Answers (4)

Graviton
Graviton

Reputation: 83294

Improving on Inspire's solution, here's the complete code:

PHP:

<?php

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

And here's the .Net code:

[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);

}

Upvotes: -2

NDM
NDM

Reputation: 6840

The preferred way of passing data to different applications is XML. be it in the form of a file, or as ArsenMkrt mentioned, through a webservice.

Using this technique you are sure that almost any technology will be able to handle your data.

Upvotes: 1

Arsen Mkrtchyan
Arsen Mkrtchyan

Reputation: 50752

I don't know PHP, but I think it will have the feature to work with web services, write web service in .net that works with your net program and pass data from your php server to that service

Upvotes: 0

Inspire
Inspire

Reputation: 2060

You could use a stream with PHP to STDOUT:

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

And then in .NET capture the output. I don't have much experience with .NET but this appears to allow you to capture the output of a process:

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

Upvotes: 3

Related Questions