Skip to content

MelisPhpinfo

Schreibgeschütztes Diagnosewerkzeug, das die native phpinfo()-Ausgabe von PHP im Melis-React-Backoffice darstellt. Paket melisplatform/melis-phpinfo.

Zweck

MelisPhpinfo ist ein Dev-Tools-Modul mit einem einzigen Bildschirm, das die Ausgabe von phpinfo() erfasst und im Melis-Administrationsbereich anzeigt. Es ermöglicht einem Administrator, die PHP-Version des Servers, die geladenen Erweiterungen, die php.ini-Direktiven, die Umgebungsvariablen und die Pfade ohne Shell-Zugriff zu überprüfen. Es besitzt weder eine Datenbank noch eine Service- oder Model-Schicht — lediglich einen Controller und drei View-Zonen. In v6 wird es als Iframe-Brick im React-Backoffice ausgeliefert: Die React-Seite bindet ein persistentes Iframe ein, das das bestehende Legacy-Werkzeug innerhalb der React-Shell lädt. Es gibt weder eine React-API-Schicht noch eine Capabilities-Datei.

Sicherheitshinweis

phpinfo() legt sensible Details offen — absolute Pfade, geladene Module, Umgebungsvariablen (potenziell Zugangsdaten/API-Schlüssel) und Build-Flags. Das Werkzeug befindet sich bewusst unter Dev Tools; beschränken Sie es auf vertrauenswürdige Administratoren und schwärzen Sie Geheimnisse, bevor Sie einen Screenshot weitergeben.

Aktivierung

Fügen Sie Folgendes zu config/melis.module.load.php hinzu:

php
return [
    'MelisPhpinfo',
];

Erfordert, dass MelisCore zuvor geladen wird. Der React-Brick erscheint nur, wenn das Modul aktiviert ist — die Brick-Erkennung (GET /melis/react-api/react-modules) listet aktive Module auf, die eine brick.manifest.json ausliefern; das Deaktivieren des Moduls entfernt den Menüknoten.

Backoffice (React)

Das Werkzeug erscheint in der linken Seitenleiste unter MelisCore → Dev Tools → PHP Info. Es öffnet sich als oberer Tab mit dem Namen PHP Info und zeigt den vollständigen phpinfo()-Bericht, der an das Melis-Administrationsdesign angepasst ist; beim erstmaligen Laden des Iframes erscheint kurz ein Ladeindikator. Der Bericht kann lang sein, scrollen Sie daher innerhalb des Werkzeugbereichs, um zu einem bestimmten Abschnitt zu gelangen (Core, Erweiterungen, Pfade, Umgebung). Es gibt eine einzige Ansicht — keinen Neu/Alt-Umschalter — und nichts ist bearbeitbar.

Brick-Aufbau

Die React-Präsenz ist ein Iframe-Brick: PhpinfoPage.tsx implementiert keine native React-Oberfläche. Es erstellt ein persistentes Iframe (id="melis-brick-frame-phpinfo"), dessen src auf /melis/react-tool-page?key=melis_phpinfo_tool verweist, hängt es einmalig an <body> an und positioniert/schaltet es anschließend bei Tab-Wechseln lediglich über ein Anker-<div>, sodass es niemals neu geladen wird. Das Iframe-Ziel — bereitgestellt von MelisReactOverride — rendert das klassische Legacy-PHP-Info-Werkzeug.

ElementWert
Brick-IDphpinfo
Manifest route/melis-core/phpinfo
labelPHP Info
forwardKeyMelisPhpinfo/List
melisKey (Iframe-Ziel)melis_phpinfo_tool
entrybrick.js
React-APIkeine (kein config/react-api.php)
Capabilitieskeine (kein config/react.capabilities.php) — Zugriff über das Recht melis_phpinfo_tool gesteuert

Manifest (public/ui-react/brick.manifest.json):

json
{
  "id": "phpinfo",
  "route": "/melis-core/phpinfo",
  "label": "PHP Info",
  "forwardKey": "MelisPhpinfo/List",
  "melisKey": "melis_phpinfo_tool",
  "entry": "brick.js"
}

Zugriff

Es gibt keine feingranularen Capabilities: Der Zugriff erfolgt nach dem Alles-oder-Nichts-Prinzip und ist an das Werkzeugrecht melis_phpinfo_tool gebunden. Das React-Menü gibt den Knoten nur aus, wenn der Benutzer canAccess('melis_phpinfo_tool') erfüllt (Super-Administratoren mit usr_admin=1 oder Benutzer, denen das Recht gewährt wurde). Die Legacy-Content-Ansicht überprüft dasselbe Recht serverseitig erneut, bevor phpinfo() ausgeführt wird, sodass selbst eine manuell erstellte Anfrage an die Content-Zone bei anderen eine leere Antwort ergibt.

php
// src/Controller/ListController.php — renderToolContentAction()
$view->accessAllowed = $this->isPhpinfoAccessAllowed(); // only then does the view run phpinfo()
// isPhpinfoAccessAllowed(): authenticated identity + MelisCoreRights::canAccess('melis_phpinfo_tool')

View-Zonen

Das Legacy-Werkzeug (im Iframe geladen) besteht aus drei Zonen, die in v6 unverändert sind:

ZonenbezeichnerRolle
melis_phpinfo_toolContainer — leitet weiter an MelisPhpinfo/List/render-tool
melis_phpinfo_headerTitelleiste (render-tool-header)
melis_phpinfo_contentDer phpinfo()-Bericht (render-tool-content)

Implementierungsdetail

Die phpinfo()-Ausgabe wird vollständig in der View-Schicht erzeugt. Die Actions des Controllers geben ein leeres ViewModel zurück, ohne dass Daten von PHP an die View übergeben werden; die Berichts-View erfasst die Ausgabe und bereinigt sie:

php
ob_start();
phpinfo();
$phpInfoContent = ob_get_clean();
// Strip phpinfo()'s own <style> so the page inherits Melis admin CSS
$filtredPhpInfoContent = preg_replace('/<style\b[^>]*>(.*?)<\/style>/is', '', $phpInfoContent);
echo $filtredPhpInfoContent;

Die Geschäftslogik verbleibt serverseitig: Der React-Brick ist lediglich das in die React-Shell eingebettete Legacy-PHP-Info-Werkzeug.

Wichtige Dateien

AspektPfad
Brick-Einstiegspunktui-react/src/brick.tsx (registriert ID phpinfoPhpinfoPage)
React-Seite (Iframe-Wrapper)ui-react/src/PhpinfoPage.tsx
Kompiliertes Bundle / Manifestpublic/ui-react/brick.js · public/ui-react/brick.manifest.json
Menü-/Zonenregistrierungconfig/app.toolstree.php
Werkzeugkonfigurationconfig/app.tools.php · config/app.interface.php
Route- + Controller-Registrierungconfig/module.config.php
Controller (3 schlanke Actions, zugriffsgesteuert)src/Controller/ListController.php
Berichts-Viewview/melis-phpinfo/list/render-tool-content.phtml

Siehe auch: MelisCore