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
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:
die inhalte der dateien sehen dabei folgender maßen aus:
my_extension.cpp:
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:
die inhalte der dateien sehen dabei folgender maßen aus:
my_extension.cpp:
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:
die inhalte der dateien sehen dabei folgender maßen aus:
my_extension.cpp:
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:
die inhalte der dateien sehen dabei folgender maßen aus:
my_extension.cpp:
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:
die inhalte der dateien sehen dabei folgender maßen aus:
my_extension.cpp:
um dieses modul zu erstellen, wechselt man in das verzeichnis mit dem Source und gibt
ein. Die so erstellten Dateien müssen danach mit
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:
Nun müssen wir das verfügbar gemachte modul noch mit enmod aktivieren:
mit php -m
grep my_extension kann man die funktionalität überprüfen (die ausgabe sollte ungefähr wie folgt aussehen):
um nun noch unser Modul zu testen, schreiben wir uns eine kleine php datei mit folgendem inhalt:
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:
die inhalte der dateien sehen dabei folgender maßen aus:
my_extension.cpp:
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:
die inhalte der dateien sehen dabei folgender maßen aus:
my_extension.cpp:
das lag daran, das ich ein veraltetes tutorial verwendete, wo man die funktion an PHP extension noch mit folgender syntax addete:
das ist deprecated und funktioniert so nicht mehr.
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.