Nakov-Integrating-PHP-and-MS.NET-v1.0 - Svetlin Nakov

bubblesradiographerServers

Dec 4, 2013 (3 years and 11 months ago)

151 views

Integration between
PHP and .NET
Applications

Svetlin Nakov

National Academy for
Software Development

academy.devbg.org

Contents

1.
PHP Interoperability

2.
PHP and COM

3.
Writing WordPress Plug
-
in in C#

4.
Phalanger: Running PHP in .NET CLR

PHP Interoperability

PHP Interoperability


What is Interoperability?


Ability to work together with other products,
frameworks, languages and platforms


PHP Interoperability


Call external process


shell_exec()

function


Invoke native C/C++ code (
.so

/
.dll

libraries)


dl()

function in PHP (load extension library)


SWIG


http://www.swig.org/



COM operability (in Windows)


Web services (REST / SOAP)

PHP and COM

What is COM?


Component Object Model (COM)


Microsoft Windows built
-
in technology


Inter
-
process communication between
components and applications


Example: Display Adobe Acrobat PDF in
Internet Explorer


Object
-
oriented approach


Allows dynamic object creation and method
invocation and properties / events access


Language
-
neutral technology

Creating COM Component
in .NET Framework and C#


Define the COM dispatch interface:




Define the COM implementation class:

[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]

public interface ICalculator {


int Sum(int a, int b)

}

namespace PlayingWithCOM

{


[ComVisible(true)]


[Guid("38AADE7B
-
79B8
-
31A1
-
B365
-
22C6AAE5232C")]


public class Calculator : ICalculator {


public int Sum(int a, int b) { return a

+

b; }


}

}

Register COM Component
Assembly in the Registry


Sign the assembly with strong name:



Install the assembly in the Global
Assembly Cache (GAC):



Register the assembly as COM
component in Windows registry:

[assembly:AssemblyKeyFile(@"
secret
-
key
.snk")]

gacutil
-
i PlayingWithCOM.dll

regasm PlayingWithCOM.dll

Using COM Objects from
PHP Script


Creating COM object and invoking
method from PHP:

$
calc

= new

COM("PlayingWithCOM.
Calculator
");

$result = $calc
-
>Sum(5, 6);

echo $result;

Writing WordPress
Plug
-
ins in C#

WordPress on IIS


Running WordPress in IIS


Run PHP on IIS:


Install FastCGI ISAPI extension for IIS


Install and configure PHP for Windows


Alternatively use Web Platform Installer


Install and configure MySQL for Windows


Configure WordPress and URL rewriting:


ISAPI_Rewrite in IIS 5.1/6


Microsoft URL Rewrite for IIS 7

Creating WordPress Plug
-
in


We want to create WordPress plug
-
in for
downloading a blog post as PDF document


Converting HTML page to PDF is not
straightforward problem!


We prefer to implement this in C#


Use Internet Explorer through COM


Open the web page URL in Internet Explorer


Take the entire page as graphics image


Cut the image into pages and write them to
PDF document with PdfSharp


Invoke the C# class from PHP through COM

Creating WordPress Plug
-
in
(2)


We want to add a parameter "
?pdf
" to all
WordPress URLs to produce PDF output


We hook the WordPress action "
init
"



In the action handler invoke the C#
based Web2Pdf converter

add_action('init', 'init_action_handler');

$web2pdf =


new COM("Web2Pdf.WebPageToPDFGenerator");

$pdf_base64 = $web2pdf
-
>GeneratePdfFromWebPageAsBase64($url);

Creating WordPress Plug
-
In
in C#
-

Web2Pdf Converter

Live Demo

Phalanger

The PHP Language Compiler for .NET

Phalanger Project: Running
PHP in .NET Framework


Phalanger Project


Open source PHP compiler for .NET CLR


Web site:
http://www.php
-
compiler.net


Compiles PHP code to MSIL just like C#


Implements all standard PHP functions


Two modes of execution:


Classical PHP execution model


run existing
applications like phpBB, Drupal, etc.


ASP.NET mode


use ASP.NET with PHP
language


mix .NET and PHP functions

Integration between PHP
and .NET Applications

Questions?