Veraltete PHP-Befehle & Entfernung des 4D Built-in PHP Interpreters

PHP hat in der Webentwicklung eine entscheidende Rolle gespielt und wurde in 4D v12 eingeführt, um Funktionen zu bieten, die in der Muttersprache nicht ohne weiteres verfügbar sind, wie z. B. Zip-, Hash- oder LDAP-Funktionen. Im Laufe der Zeit hat 4D viele dieser PHP-Funktionen in seine Kernfunktionalität integriert. Daher haben wir uns entschlossen, den integrierten PHP-Interpreter in 4D v20 R3 zu entfernen und die PHP-Befehle in v21 zu verwerfen.

Wir werden die PHP-Befehle zwar nicht vollständig aus 4D entfernen, aber wir empfehlen Ihnen dringend, in Zukunft die System Worker zur Ausführung von PHP-Code zu verwenden.

Dieser Blog-Beitrag wird Sie durch diesen Übergangsprozess führen und Ihnen zeigen, wie Sie einen externen Interpreter über PHP Execute verwenden und wie Sie PHP-Code effektiv mit einem System Worker ausführen können.

Erster Schritt: Entfernung des in 4D integrierten PHP-Interpreters

Die erste Änderung erfolgt in 4D v20 R3 durch die Entfernung des in 4D integrierten PHP-Interpreters. PHP Execute wird weiterhin funktionieren, aber nur mit einem externen PHP-Interpreter. Wenn Sie mit der Verwendung eines externen PHP-Interpreters nicht vertraut sind, folgen Sie bitte dieser Anleitung.

Verwendung von PHP Execute mit einem externen PHP-Interpreter

Wenn Sie einen externen PHP-Interpreter verwenden, können Sie jederzeit auf neuere PHP-Versionen aktualisieren und Sicherheitspatches installieren, sobald diese veröffentlicht werden. Außerdem können Sie so mehr PHP-Module verwenden.

Erstellen Sie eine eigene php.ini-Datei

Die Datei php.ini wird verwendet, um den PHP-Interpreter zu initialisieren. Diese Datei wurde automatisch erstellt und verwendet, wenn Sie PHP Execute mit dem internen Interpreter aufrufen. Für den externen Interpreter muss diese Datei manuell erstellt und übergeben werden. Wenn Sie PHP Execute einmal aufrufen, wird die Datei im Ressourcen-Ordner Ihres Projekts erstellt: Wir empfehlen Ihnen dringend, diese Datei zur Initialisierung des externen PHP-Interpreters zu verwenden und sie gegebenenfalls zu ändern.

Führen Sie eine CGI-Version von PHP aus.

Es gibt 2 Möglichkeiten, PHP auszuführen: Mit einer Befehlszeilenschnittstelle (CLI) oder über das Common Gateway Interface (CGI). PHP Execute verwendet das Common Gateway Interface, Sie müssen also eine CGI-Version von PHP ausführen.
Für Windows können Sie PHP von der offiziellen PHP-Website herunterladen. Diese Version enthält sowohl die CLI- als auch die CGI-Version von PHP.
Derzeit lädt die Version auf der offiziellen Website das mbstring-Paket standardmäßig nicht. Um dies zu ändern, müssen Sie die folgenden Zeilen in die Datei php.ini einfügen:

extension_dir = "./ext/"
extension=mbstring

Auf dem Mac ist die Sache ein bisschen komplizierter. Apple hat die Auslieferung von macOS mit installiertem PHP eingestellt (aus ähnlichen Gründen haben wir die Auslieferung von macOS eingestellt). Die offizielle PHP-Website bietet keine vorgefertigte Version für Mac an. Sie können zwar auf einigen Websites vorgefertigte Versionen finden, aber in der Regel werden diese nicht gepflegt oder empfohlen. Um Ihnen den Umstieg zu erleichtern, stellt 4D sein in 4D v20 integriertes PHP als separates Binary auf der Produkt-Download-Seite zur Verfügung. Bitte beachten Sie, dass dieses Binary nicht von 4D gewartet wird. Wenn Sie in Zukunft PHP auf einem Mac aktualisieren möchten, müssen Sie es selbst entwickeln. Wie das geht, werde ich später in diesem Blog-Beitrag ausführlich beschreiben.

Anschließend müssen Sie PHP über das Terminal starten, indem Sie diesen Befehl im PHP-Verzeichnis aufrufen:

php-cgi -b <Adresse:Port> -c <Pfad_zur_php.ini_datei_im_projekt_resourcen_ordner>

Oder wenn Sie das in 4Dv20 eingebaute PHP verwenden:

php-fcgi-4d -b <Adresse:Port> -c <Pfad_zur_php.ini_datei_innerhalb_des_projekt_resourcen_ordners>
Vergessen Sie nicht, bei der Eingabe des Pfades Sonderzeichen (wie \ und „) durch ein \ voranzustellen (\\ und \“).
Da Sie PHP auf demselben Rechner wie 4D ausführen müssen, muss die Adresse 127.0.0.1 lauten. Der Standard-Port von PHP ist 8002, der auch von 4D verwendet wird. Wir empfehlen
Ihnen, dieSystemworker zuverwenden , um PHP zu starten und zu stoppen, damit Sie es nicht manuell starten müssen.

Um PHP mit einem Systemworker zu starten, können Sie zum Beispiel folgenden Code verwenden:

var worker : 4D.SystemWorker
worker:=4D.SystemWorker.new("<Pfad_zu_php_cgi_ausführbar> -b <Adresse:Port> -c <Pfad_zu_php.ini_datei_im_projekt_resourcen_ordner>")

Und später beenden Sie PHP mit:

worker.terminate()

Konfigurieren Sie die 4D Einstellungen für die Verbindung zu Ihrem externen PHP

Öffnen Sie die Registerkarte PHP in den Struktureinstellungen und geben Sie die IP-Adresse und den Port Ihres PHP-Servers ein. Öffnen Sie dann Ihr Projekt erneut.

Standardoptionen auf der Registerkarte PHP der Struktureinstellungen.
8002 ist der Standard-PHP-Port, und da der PHP-Server auf demselben Rechner wie 4D laufen muss, müssen Sie die Adresse 127.0.0.1 verwenden.

PHP Execute aufrufen

Jetzt, da Ihr PHP-Server gestartet und 4D richtig konfiguriert ist, können Sie PHP Execute mit der gleichen Syntax wie bisher verwenden. Solange Sie 4D v20 R3 oder eine neuere Version verwenden, müssen Sie nichts an Ihrem Code ändern. Um das oben erläuterte Konzept in älteren Versionen zu nutzen, verwenden Sie SET DATABASE PARAMETER(PHP use an external interpreter;1) – das ist jetzt die Standardeinstellung für 4D. Beachten Sie, dass Sie mit demselben Befehl die PHP-IP oder den PHP-Port per Code einstellen können, wenn Sie dies nicht über die Schnittstelle tun wollen, wie oben erklärt.


Zweiter Schritt: ENTFERNEN von PHP Execute

Die zweite Änderung betrifft 4D v21: die Abschaffung von PHP Execute. Der Befehl wird weiterhin funktionieren, und wir haben nicht vor, ihn aus 4D zu entfernen. Wenn Sie sich entscheiden, PHP in Ihrer Anwendung zu verwenden, empfehlen wir Ihnen dringend, die System Worker zu verwenden, um Ihren PHP-Code auszuführen.

Verwendung von Systemworkern zur Ausführung von PHP-Code

PHP installieren oder bauen

Unter Windows können Sie PHP von der offiziellen PHP-Website herunterladen.
Auf dem Mac müssen Sie PHP als integrierten 4D-PHP-Interpreter bauen, der nur mit der schnellen CGI-Version geliefert wird, während Sie die CLI-Version von PHP benötigen. Ich werde später in diesem Blog-Beitrag detailliert beschreiben, wie man das macht.

Rufen Sie PHP mit Systemarbeitern auf.

Ich möchte Ihnen 2 Beispiele geben, wie Sie Ihren PHP-Code mit Systemworkern ausführen können.

Das erste Beispiel interpretiert eine PHP-Datei und ruft die Ausgabe in der Variablen $result ab.

var $worker : 4D.SystemWorker
var $result : Text

$worker:=4D.SystemWorker.new("<Pfad_zur_php_ausführbar> -f <Pfad_zur_php_datei> -c <Pfad_zur_php.ini_datei_inside_der_projekt_resourcen_ordner>")
$result:=$worker.wait().response

Das zweite Beispiel führt PHP als interaktive Shell aus, so dass wir es auffordern können, PHP-Code direkt zu interpretieren. Diese Art der Ausführung von PHP-Code ist optimaler, wenn Sie viele PHP-Aufrufe tätigen müssen, da Sie PHP nur einmal starten.

var $worker : 4D.SystemWorker
var data : Text

//Der onData-Callback fügt das Ergebnis der Ausführung an die Datenvariable an
var $options : Object
var $onData : 4D.Function
$onData:=Formel(data+=$2.data)
$options:=Neues Objekt("onData"; $onData)

$worker:=4D.SystemWorker.new("<Pfad_zur_php_ausführbar> -a -c <Pfad_zur_php.ini_file_inside_the_project_resources_folder>"; $options)
$worker.wait(1)
data:=""
$worker.postMessage("echo \"Hello World!\";\r\n")
$worker.wait(1)
$worker.terminate()

Das Ergebnis der Ausführung wird in der Datenvariablen abgerufen, in diesem Fall Hello World!


PHP auf dem Mac abrufen

Die einfachste Lösung, um PHP auf dem Mac abzurufen, ist die Verwendung von Homebrew. Leider bekommt man damit PHP nur auf den eigenen Rechner, und kann es nicht weitergeben. Wenn Sie PHP mit Ihrer Anwendung weitergeben wollen, müssen Sie es kompilieren.

Verwenden von Homebrew zum Erstellen von PHP

Homebrew installieren

Sie können ein Paket zur Installation von Homebrew auf GitHub finden.

Ansonsten können Sie es auch über das Terminal installieren. Zunächst benötigen Sie die Xcode-Tools. Rufen Sie diesen Befehl auf, um sie zu installieren:

xcode-select --install

Anschließend können Sie Homebrew mit diesem Befehl installieren:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

PHP installieren

Anschließend können Sie PHP mit folgendem Befehl installieren:

brew install php

PHP auf dem Mac kompilieren

Wenn Sie Ihre 4D Anwendung auf dem Mac vertreiben wollen, benötigen Sie eine eingebettete Version von PHP. Um diese zu erstellen, müssen Sie eine kompilieren. Hier finden Sie die vollständige Anleitung dazu:

Homebrew installieren

Um Homebrew zu installieren, benötigen Sie die Xcode-Tools. Rufen Sie diesen Befehl auf, um sie zu installieren:

xcode-select --install

Anschließend können Sie Homebrew mit diesem Befehl installieren:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Hilfsprogramme installieren

Um PHP zu kompilieren, benötigen Sie sowohl groff als auch pkg-config. Sie können sie mit den folgenden Befehlen installieren:

brew install groff
brew install pkg-config

Kompilieren Sie die OpenLDAP-Bibliothek

Laden Sie die OpenLDAP-Bibliothek herunter.
Entpacken Sie den Inhalt der komprimierten Datei:

tar -zxf <Name_des_Archivs>

Konfigurieren Sie für die Installation:

./configure --prefix="<Pfad_des_Zielordners>" --disable-backends --enable-ldap --without-fetch --without-cyrus-sasl --enable-shared=no --enable-static=yes

Kompilieren Sie die Abhängigkeiten:

make depend

Kompilieren Sie die Bibliothek:

make

Installieren Sie in den Zielordner:

make install

Kompilieren Sie die OpenSSL-Bibliothek

Laden Sie die OpenSSL-Bibliothek herunter.
Entpacken Sie den Inhalt der komprimierten Datei:

tar -zxf <Name_des_Archivs>

Konfigurieren Sie für die Installation:

./config --prefix="<Pfad_des_Zielverzeichnisses>"

Kompilieren Sie die Bibliothek:

make

Installieren im Zielordner:

make install

PHP kompilieren

Laden Sie PHP herunter.
Entpacken Sie den Inhalt der komprimierten Datei:

tar -zxf <Name_des_Archivs>

Für die Installation konfigurieren:

./configure --prefix="<Pfad_des_Zielordners>" --disable-all --enable-cgi --enable-shared=no --enable-static=yes --with-openssl="<Pfad_des_OpenSSL_Zielordners>" --with-ldap="<Pfad_des_OpenLDAP_Zielordners>" --enable-bcmath --enable-calendar --enable-exif --enable-ftp --enable-mbstring --disable-mbregex --enable-sockets --with-sqlite3 --disable-posix --enable-ctype --enable-fileinfo --enable-filter --enable-pdo --with-pdo-sqlite --enable-phar --enable-session --enable-tokenizer --disable-opcache

Kompilieren Sie die Bibliothek:

make

Installieren Sie sie in den Zielordner:

make install

Im PHP-Zielordner finden Sie sowohl eine schnelle CGI-Version von PHP als auch eine CLI-Version von PHP. Die schnelle CGI-Version kann als externer PHP-Server mit PHP Execute verwendet werden. Die CLI-Version kann mit den Systemworkern verwendet werden.

Nutzen Sie das Forum, wenn Sie Fragen haben

Wir möchten sicherstellen, dass der Übergang für Sie so reibungslos wie möglich verläuft. Wir verstehen, dass dies einige Anstrengungen erfordert, und wir sind hier, um Sie bei jedem Schritt des Weges zu unterstützen. Bitte zögern Sie nicht, sich mit Fragen oder Kommentaren an unser Forum zu wenden; wir geben Ihnen gerne Antworten und Hilfestellungen.

Wenn Sie eine neue Diskussion über PHP im Forum beginnen möchten, denken Sie bitte daran, den Tag „PHP“ zu verwenden. Das macht es für alle leichter, Ihr Thema zu finden und sich daran zu beteiligen.

Nicolas Brachfogel
Product Owner & Senior Developer - Nicolas Brachfogel kam 2017 als Senior Developer (4D Server und Netzwerke) zu 4D. Als Product Owner, der die Freigabe von Apple Silicon verwaltet, ist er für das Schreiben von User Stories und deren Umsetzung in funktionale Spezifikationen zuständig und stellt sicher, dass die Implementierungen der Funktionen den Kundenanforderungen entsprechen. Nicolas ist Absolvent des Institut Supérieur d'Informatique Appliquée (INSIA) und begann seine Karriere als Softwareentwickler im Jahr 2001. Nachdem er mehrere Jahre in Java und C++ programmiert hatte, spezialisierte er sich auf die Client-Server-Entwicklung für Videospielunternehmen. Als Server-Entwickler/Architekt arbeitete er erfolgreich an den Server-Architekturen vieler Spiele (Dofus Arena, Drakerz, Trivial Pursuit Go!).