How To - Eigene Module für PHP mit C++ schreiben

How To - Eigene Module für PHP mit C++ schreiben

Das ist nur eine kurze Zusammenfassung, um den Ablauf zu skizzieren, es soll noch ein umfangreicheres Tutorial folgen, in naher Zukunft.

Zu erst installieren wir die php development files:


[code lang=bash]
sudo apt-get install php-dev

zusätzlich für php 5.x:
sudo apt-get install php5-dev

oder für php 7.x
sudo apt-get install php7.0-dev
[/code]

Danach laden wir uns PHPCpp herunter unter PHPCpp auf Github.

dann gehen wir in das verzeichnis, erstellen die binaries und installieren es


BASH
cd PHP-CPP
make
sudo make install


make install kopiert dabei die erstellte libphpcpp.so datei in das notwendige verzeichnis des systems /usr/lib und alle include files nach /usr/include und /usr/include/phpcpp.

zum erstellen eines Modules brauchen wir mindestens 3 Dateien:

  • [LP]my_extension.cpp
  • [LP]my_extension.ini
  • [LP] natürlich eine Makefile


die inhalte der dateien sehen dabei folgender maßen aus:
my_extension.cpp:

CPP
#include "phpcpp.h"
cd PHP-CPP

make
sudo make install


make install kopiert dabei die erstellte libphpcpp.so datei in das notwendige verzeichnis des systems /usr/lib und alle include files nach /usr/include und /usr/include/phpcpp.

zum erstellen eines Modules brauchen wir mindestens 3 Dateien:

  • [LP]my_extension.cpp
  • [LP]my_extension.ini
  • [LP] natürlich eine Makefile


die inhalte der dateien sehen dabei folgender maßen aus:
my_extension.cpp:

CPP
#include "phpcpp.h"

cd PHP-CPP

make
sudo make install


make install kopiert dabei die erstellte libphpcpp.so datei in das notwendige verzeichnis des systems /usr/lib und alle include files nach /usr/include und /usr/include/phpcpp.

zum erstellen eines Modules brauchen wir mindestens 3 Dateien:

  • [LP]my_extension.cpp
  • [LP]my_extension.ini
  • [LP] natürlich eine Makefile


die inhalte der dateien sehen dabei folgender maßen aus:
my_extension.cpp:

CPP
#include "phpcpp.h"

cd PHP-CPP

make
sudo make install


make install kopiert dabei die erstellte libphpcpp.so datei in das notwendige verzeichnis des systems /usr/lib und alle include files nach /usr/include und /usr/include/phpcpp.

zum erstellen eines Modules brauchen wir mindestens 3 Dateien:

  • [LP]my_extension.cpp
  • [LP]my_extension.ini
  • [LP] natürlich eine Makefile


die inhalte der dateien sehen dabei folgender maßen aus:
my_extension.cpp:

CPP
#include "phpcpp.h"

cd PHP-CPP

make
sudo make install


make install kopiert dabei die erstellte libphpcpp.so datei in das notwendige verzeichnis des systems /usr/lib und alle include files nach /usr/include und /usr/include/phpcpp.

zum erstellen eines Modules brauchen wir mindestens 3 Dateien:

  • [LP]my_extension.cpp
  • [LP]my_extension.ini
  • [LP] natürlich eine Makefile


die inhalte der dateien sehen dabei folgender maßen aus:
my_extension.cpp:

CPP
#include "phpcpp.h"
            ${CP} ${INI} ${INI_DIR}

clean:
            ${RM} ${EXTENSION} ${OBJECTS}


um dieses modul zu erstellen, wechselt man in das verzeichnis mit dem Source und gibt

BASH
make


ein. Die so erstellten Dateien müssen danach mit

BASH
sudo make install


an die notwendigen Plätze kopiert werden. Dabei werden my_extension.so nach /usr/lib/php/20151012 kopiert und my_extension.ini nach /etc/php/7.0/mods-available:

BASH
(ausgabe von make install):
cp -f my_extension.so /usr/lib/php/20151012
cp -f my_extension.ini /etc/php/7.0/mods-available/


Nun müssen wir das verfügbar gemachte modul noch mit enmod aktivieren:

BASH
sudo phpenmod my_extension


mit php -m
grep my_extension
kann man die funktionalität überprüfen (die ausgabe sollte ungefähr wie folgt aussehen):

BASH
php -m 
grep my_extension

my_extension


um nun noch unser Modul zu testen, schreiben wir uns eine kleine php datei mit folgendem inhalt:

PHP

cd PHP-CPP
make
sudo make install


make install kopiert dabei die erstellte libphpcpp.so datei in das notwendige verzeichnis des systems /usr/lib und alle include files nach /usr/include und /usr/include/phpcpp.

zum erstellen eines Modules brauchen wir mindestens 3 Dateien:

  • [LP]my_extension.cpp
  • [LP]my_extension.ini
  • [LP] natürlich eine Makefile


die inhalte der dateien sehen dabei folgender maßen aus:
my_extension.cpp:

CPP
#include "phpcpp.h"
cd PHP-CPP

make
sudo make install


make install kopiert dabei die erstellte libphpcpp.so datei in das notwendige verzeichnis des systems /usr/lib und alle include files nach /usr/include und /usr/include/phpcpp.

zum erstellen eines Modules brauchen wir mindestens 3 Dateien:

  • [LP]my_extension.cpp
  • [LP]my_extension.ini
  • [LP] natürlich eine Makefile


die inhalte der dateien sehen dabei folgender maßen aus:
my_extension.cpp:

CPP
#include "phpcpp.h"
extension.add<"myFunction">;
^
Makefile:100: die Regel für Ziel „my_extension.o“ scheiterte
make: *** [my_extension.o] Fehler 1


das lag daran, das ich ein veraltetes tutorial verwendete, wo man die funktion an PHP extension noch mit folgender syntax addete:

CPP
extension.add("myFunction", myFunction);


das ist deprecated und funktioniert so nicht mehr.

Autor mastercad
Veröffentlicht 30.07.2017