Click here to Skip to main content
15,886,788 members
Articles / Programming Languages / PHP
Article

PHP4Apps: PHP Scripting from your application

Rate me:
Please Sign up or sign in to vote.
4.19/5 (9 votes)
20 Dec 20052 min read 85.3K   936   30   21
How to call the PHP engine from your application and receive the reply and any variables.

PHP Demo application

Introduction

Usually, running a PHP script in .NET involves shelling to the OS and piping the response back. With Serhiy Perevoznyk's PHP4Delphi, Delphi developers were able to utilize the Zend (PHP) engine without having to resort to the shell. Serhiy created an unmanaged DLL you can call from .NET to reap the benefits of using a scripting engine. If you are a Delphi developer, the full source of the wrapper is available from SourceForge under the PHP4Delphi project.

Background

If you are not familiar with PHP, it is a very popular web scripting language, similar to Perl and Python. Like those languages also, it has applications for the desktop as well as for the web.

This wrapper builds on the PHP engine, providing an interface to the php4ts.dll (for PHP version 4) or php5ts.dll. You will need this file in order to use the php4apps.dll. I included this file in the demo download, but the freshest version is available from the PHP project site.

Using the code

There are seven methods exposed in the wrapper DLL:

  • InitRequest - Initializes the engine.
  • ExecutePHP - Calls the engine with a file to run.
  • ExecuteCode - Calls the engine with a string to run.
  • GetResultText - Retrieves the result of the script from the engine.
  • RegisterVariable - Registers a variable with the engine, allowing you to retrieve the value later.
  • GetVariable - Retrieves the value of a registered variable after the engine has completed.
  • DoneRequest - Finalizes the engine.

A simple method to execute a file looks like this:

C#
// Initialize the Request
int RequestID = InitRequest();

// Execute the engine
ExecutePHP(RequestID, openFileDialog1.FileName);

// Create a buffer for the reply
StringBuilder builder = new  StringBuilder();

// Call it once to get the length
builder.Capacity = GetResultText(RequestID, builder, 0);

// Call it a second time to get the value
GetResultText(RequestID, builder, builder.Capacity + 1);

// Finalize the engine
DoneRequest(RequestID);

Similar to this, evaluating a string would be just a replacement of the ExecutePHP method for the ExecuteCode method:

C#
...
string code = "phpInfo();";
ExecuteCode(RequestID, code);
...

Notice that you did not need the <? ?> around the PHP code. You could include it if you wish.

Now, the interesting part comes when you can inject your own variables and retrieve the results. If the PHP code looks something like this:

PHP
$i="Hello ".$i;
print $i;

and if you want to change the value of $i without having to append your values to the script, you can do it with RegisterVariable to set the variable before execution:

C#
string code = "$i=\"Hello \".$i; print $i;";

// Initialize the Request
int RequestID = InitRequest();

// Execute the engine
ExecuteCode(RequestID, code);

// Register a variable with the engine
RegisterVariable(RequestID, "i", "World!");

Now the result will be the requisite "Hello World!" To retrieve the value of $i from the engine, you only need to call GetVariable.

C#
// Create a buffer for the variable reply
StringBuilder resultVariable = new StringBuilder();

// Call it once to get the length
resultVariable.Capacity = GetVariable(RequestID, "i", resultVariable, 0);

// Call it a second time to actually get the value
GetVariable(RequestID, "i", resultVariable, resultVariable.Capacity+1);

History

  • 1.0 - Initial release.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Web Developer
United States United States
Raised by wolves in the mean streets of Macintosh C/C++ for IBM and Motorola, moved on to Delphi and now C#. Ah, the mother's milk of Microsoft...

Comments and Discussions

 
GeneralPHP, Excel & MSSQL 2000 Pin
Shazz Rock16-Feb-09 0:22
Shazz Rock16-Feb-09 0:22 
QuestionArrays Pin
LordPadriac16-Mar-07 4:46
LordPadriac16-Mar-07 4:46 
AnswerRe: Arrays Pin
Daaron17-Mar-07 15:33
Daaron17-Mar-07 15:33 
To be candid, I don't know-- I have never tried. My knee-jerk response is that I do not believe the array is converted, but I may be wrong. Sorry I couldn't be of more help.

Cheers,
Daaron

GeneralRe: Arrays Pin
gabereiser20-Apr-07 5:19
gabereiser20-Apr-07 5:19 
GeneralPassing parameters to the PHP script Pin
mitDAS200114-Mar-07 0:01
mitDAS200114-Mar-07 0:01 
GeneralRe: Passing parameters to the PHP script Pin
Daaron14-Mar-07 3:55
Daaron14-Mar-07 3:55 
QuestionRe: Passing parameters to the PHP script Pin
mitDAS200114-Mar-07 21:32
mitDAS200114-Mar-07 21:32 
AnswerRe: Passing parameters to the PHP script Pin
gabereiser20-Apr-07 6:07
gabereiser20-Apr-07 6:07 
QuestionAdding an variable from to Adressline Pin
DreaDcYp8-Mar-06 9:45
DreaDcYp8-Mar-06 9:45 
AnswerRe: Adding an variable from to Adressline Pin
Daaron8-Mar-06 10:11
Daaron8-Mar-06 10:11 
GeneralRe: Adding an variable from to Adressline Pin
MaDcYp9-Mar-06 10:22
MaDcYp9-Mar-06 10:22 
GeneralRe: Adding an variable from to Adressline Pin
Daaron9-Mar-06 11:10
Daaron9-Mar-06 11:10 
GeneralRe: Adding an variable from to Adressline Pin
DreaDcYp9-Mar-06 22:40
DreaDcYp9-Mar-06 22:40 
AnswerRe: Adding an variable from to Adressline Pin
kekergood30-Apr-07 5:13
kekergood30-Apr-07 5:13 
Generalrunning php script from c# web application Pin
sharma sanjeev19-Jan-06 21:25
sharma sanjeev19-Jan-06 21:25 
GeneralRe: running php script from c# web application Pin
Daaron20-Jan-06 3:30
Daaron20-Jan-06 3:30 
GeneralRe: running php script from c# web application Pin
sharma sanjeev20-Jan-06 3:34
sharma sanjeev20-Jan-06 3:34 
GeneralRe: running php script from c# web application Pin
Daaron20-Jan-06 3:35
Daaron20-Jan-06 3:35 
GeneralRe: running php script from c# web application Pin
sharma sanjeev22-Jan-06 23:22
sharma sanjeev22-Jan-06 23:22 
GeneralPHP version Pin
Ashley van Gerven27-Dec-05 0:30
Ashley van Gerven27-Dec-05 0:30 
GeneralRe: PHP version Pin
Daaron27-Dec-05 7:04
Daaron27-Dec-05 7:04 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.