Utilizzare l’estensione DOTNET di PHP

Il linguaggio PHP riserva sempre numerose sorprese tra cui estensioni poco note e/o con scarsa documentazione ed esempi. Una di queste si chiama COM and .Net e consente una incredibile interoperabilità ed espansione dei casi d’uso del linguaggio.

Questa estensione consente di utilizzare all’interno di uno script PHP le funzionalità messe a disposizione da un oggetto COM, che può essere una DLL scritta da noi stessi oppure da un’applicazione presente sul server, ad esempio Microsoft Word.

L’unico requisito è che il sistema operativo del server sia Windows.

Creare un documento Microsoft Word

<?php

// starting word
$word = new COM("word.application") 
         or die("Unable to instantiate Word");
echo "Loaded Word, version {$word->Version}\n";

//bring it to front
$word->Visible = 1;

//open an empty document
$word->Documents->Add();

//do some weird stuff
$word->Selection->TypeText("This is a test...");

$filename = dirname(__FILE__).'\\test.doc';
$word->Documents[1]->SaveAs($filename);

//closing word
$word->Quit();

//free the object
$word = null;

Lanciando questo script dalla console di Windows (Dos) verrà creato, scritto e salvato un documento Word.

Creazione di una DLL personalizzata in C#

E’ possibile creare una libreria in C# con funzionalità personalizzate ed utilizzarla all’interno di uno script PHP.
Ecco i passi da seguire:

  1. Aprire Visual Studio
  2. File > Nuovo > Progetto
  3. Scegliere Libreria di classi
  4. Creare una classe con un metodo pubblico (vedi esempio sotto)
  5. Nel menu principale di Visual Studio cliccare su “Progetto > Proprietà”
  6. Nella scheda “Applicazione”, alla voce “Framework di destinazione” scegliere “.NET Framework 4”
  7. Cliccare sul pulsante “Informazioni sull’assembly” e nella finestra che si apre selezionare “Rendi assembly visibile a COM”
  8. Compilare il progetto
  9. Aggiungere nel file php.ini la direttiva extension=php_com_dotnet.dll
  10. Copiare il file dll generato dalla compilazione nella cartella dove c’è php.exe (ad es.: c:\php)
  11. (Se si usa Apache) Copiare la dll nella cartella .\apache\bin\
  12. Lanciare il seguente comando da console: regasm nomefile.dll
    Il file eseguibile dovrebbe trovarsi nella cartella C:\Windows\Microsoft.NET\Framework\v4.0.30319

N.B. Ogni volta che si compila la DLL bisogna ripetere i passaggi 10-11-12

Sorgenti di esempio:

Codice C#

using System;
using System.Runtime.InteropServices;

namespace ClassPhp
{
    public class Class1
    {
        public string Hello()
        {
            return "Hello world";
        }
    }
}

Codice PHP

<?php

$obj = new COM('ClassPhp.Class1');
echo $obj->hello();

Download

Progetto .NET

Link

4 thoughts to “Utilizzare l’estensione DOTNET di PHP”

      1. Ciao Andrea,
        intanto grazie per questo articolo e vorrei sottolineare che funziona tutto.
        Anche io come Giorgio, inizialmente ho riscontrato problemi, ma facendo le 2 di notte 🙂 , ho capito dove sbagliavo… di seguito la procedura che ho seguito per far funzionare il tutto.
        1. Verificare che si abbia una versione di php compatibile, quindi consiglio almeno PHP7.4.x
        2. come segnalato da Andrea, abilitare nel php.ini la stringa: extension=com_dotnet
        NB: per php7 o superiore, ‘extension=php_com_dotnet.dll’ è deprecata
        3. create come da istruzioni riportate nell’articolo la dll, oppure usare quella messa a disposizione nel link
        Download -> Progetto .NET
        4. seguire il punto 10 e 11 (avendo Apache 2.4, ho copiato nella cartella bin)
        5. Attenzione al punto 12!!! Qui ho smadonnato!!!!! Giustamente viene riportata la cartella framework
        dove copiare la dll per REGISTRARLA tramite prompt del dos (avviato sempre come amministratore!!!),
        il percorso segnato è: C:\Windows\Microsoft.NET\Framework\v4.0.30319
        MA se abbiamo un sistema a 64bit dentro Microsoft.NET, avremo anche una cartella Framework64!!!!
        Ed è qui il punto, la dll va copiata nella cartella: C:\Windows\Microsoft.NET\Framework64\v4.0.30319
        6. avviare il prompt del dos (avviato sempre come amministratore!!!), digitare :
        cd\Windows\Microsoft.NET\Framework64\v4.0.30319 per raggiungere subito la cartella di
        destinazione, e digitare RegAsm ClassPhp.dll
        7. la registrazione avrà successo e basta lanciare lo script php descritto da Andrea e si vedrà a video la
        scritta ‘Hello World’
        8. la libreria può essere rimossa da tutte le cartelle tranne che dalla cartella bin di apache (o php se non
        avete apache), verrà raggiunta anche dopo vari riavvii fin a quando rimarrà registrata

        un saluto e grazie ancora per questo script, perchè a distanza di 3 anni da quando è stato scritto, mi ha salvato la vita :))))

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.