rex_path und rex_file: Dateisystem-Pfade und Datei-Operationen
Verwende rex_path für sichere Pfadangaben und rex_file für Datei-Operationen.
rex_path - Pfade generieren
System-Pfade
| Methode |
Pfad zu |
Beispiel |
rex_path::base($file) |
REDAXO-Root |
/var/www/html/ |
rex_path::frontend($file) |
Frontend (Document Root) |
/var/www/html/ |
rex_path::backend($file) |
Backend |
/var/www/html/redaxo/ |
rex_path::src($file) |
Core-Source |
/var/www/html/redaxo/src/ |
rex_path::core($file) |
Core-Ordner |
/var/www/html/redaxo/src/core/ |
rex_path::data($file) |
Core-Data |
/var/www/html/redaxo/data/ |
rex_path::cache($file) |
Cache |
/var/www/html/redaxo/cache/ |
Addon/Plugin-Pfade
| Methode |
Pfad zu |
rex_path::addon($addon, $file) |
Addon-Ordner |
rex_path::addonData($addon, $file) |
Addon-Data |
rex_path::addonCache($addon, $file) |
Addon-Cache |
rex_path::addonAssets($addon, $file) |
Addon-Assets (öffentlich) |
rex_path::plugin($addon, $plugin, $file) |
Plugin-Ordner |
rex_path::pluginData($addon, $plugin, $file) |
Plugin-Data |
rex_path::pluginAssets($addon, $plugin, $file) |
Plugin-Assets |
| Methode |
Pfad zu |
|
rex_path::media($file) |
Medienpool |
/var/www/html/media/ |
rex_path::assets($file) |
Assets-Ordner |
/var/www/html/assets/ |
rex_path::coreAssets($file) |
Core-Assets |
/var/www/html/assets/core/ |
Hilfsmethoden
| Methode |
Zweck |
rex_path::basename($path) |
Dateiname ohne Pfad |
rex_path::absolute($path) |
Relativen Pfad in absoluten umwandeln |
rex_path::relative($path) |
Absoluten Pfad in relativen umwandeln |
rex_file - Datei-Operationen
Lesen/Schreiben
| Methode |
Zweck |
Rückgabe |
rex_file::get($file) |
Datei-Inhalt lesen |
string|null |
rex_file::getOutput($file) |
PHP-Datei ausführen und Output zurückgeben |
string |
rex_file::require($file) |
PHP-Datei einbinden und Rückgabewert |
mixed |
rex_file::put($file, $content) |
Inhalt in Datei schreiben |
bool |
rex_file::putCache($file, $content) |
PHP-Cache-Datei schreiben (mit opcache) |
bool |
Kopieren/Löschen
| Methode |
Zweck |
rex_file::copy($src, $dest) |
Datei kopieren |
rex_file::move($src, $dest) |
Datei verschieben |
rex_file::delete($file) |
Datei löschen |
Erweiterung/Mime-Type
| Methode |
Zweck |
rex_file::extension($file) |
Datei-Erweiterung |
rex_file::mimeType($file) |
MIME-Type |
Praxisbeispiele
Addon-Data-Pfad
// Datei in AddonData speichern
$file = rex_path::addonData('my_addon', 'config.json');
rex_file::put($file, json_encode($config));
// Später auslesen
$config = json_decode(rex_file::get($file), true);
$media = rex_media::get('logo.png');
if ($media) {
$filePath = rex_path::media($media->getFileName());
$fileSize = filesize($filePath);
$mimeType = rex_file::mimeType($filePath);
}
Cache-Datei schreiben
// PHP-Array als Cache speichern
$cacheFile = rex_path::addonCache('my_addon', 'data.cache');
$data = ['items' => [1, 2, 3], 'count' => 3];
rex_file::putCache($cacheFile, '<?php return ' . var_export($data, true) . ';');
// Cache laden
$cachedData = rex_file::require($cacheFile);
Template/Fragment einbinden
// Fragment mit Output
$fragment = new rex_fragment();
$fragment->setVar('title', 'Test');
$html = $fragment->parse('my-fragment.php');
// PHP-Template direkt ausführen
$templatePath = rex_path::addon('my_addon', 'views/template.php');
$output = rex_file::getOutput($templatePath);
Datei-Upload in Addon-Data
$file = rex_files('upload', 'array');
if (!empty($file['tmp_name'])) {
$filename = rex_string::normalize($file['name']);
$destination = rex_path::addonData('my_addon', 'uploads/' . $filename);
rex_file::copy($file['tmp_name'], $destination);
}
Config-Datei aus Addon laden
$configFile = rex_path::addon('my_addon', 'config/settings.php');
if (file_exists($configFile)) {
$settings = rex_file::require($configFile);
}
Log-Datei schreiben
$logFile = rex_path::addonData('my_addon', 'logs/app.log');
$logEntry = date('Y-m-d H:i:s') . ' - ' . $message . PHP_EOL;
rex_file::put($logFile, $logEntry, FILE_APPEND);
Temporäre Dateien
// In Cache schreiben (wird bei Cache-Clear gelöscht)
$tempFile = rex_path::addonCache('my_addon', 'temp_' . uniqid() . '.txt');
rex_file::put($tempFile, $data);
// Später aufräumen
rex_file::delete($tempFile);
Datei-Extension prüfen
$filename = 'document.pdf';
$ext = rex_file::extension($filename); // 'pdf'
$allowed = ['jpg', 'png', 'gif'];
if (!in_array($ext, $allowed)) {
throw new Exception('Invalid file type');
}
Assets-Pfade für Frontend
// CSS/JS im Template
<link href="<?= rex_url::addonAssets('my_addon', 'styles.css') ?>" rel="stylesheet">
<script src="<?= rex_url::addonAssets('my_addon', 'script.js') ?>"></script>
// Dateipfad prüfen
$cssFile = rex_path::addonAssets('my_addon', 'styles.css');
if (file_exists($cssFile)) {
$lastModified = filemtime($cssFile);
}
Export-Datei generieren
$csv = "Name;Email\n";
$csv .= "Max;max@example.com\n";
$exportFile = rex_path::addonData('my_addon', 'exports/users_' . date('Y-m-d') . '.csv');
rex_file::put($exportFile, $csv);
// Download-Link
$downloadUrl = rex_url::addonData('my_addon', 'exports/' . basename($exportFile));
Relative/Absolute Pfade
$absolute = '/var/www/html/media/image.jpg';
$relative = rex_path::relative($absolute); // 'media/image.jpg'
$relative = 'media/logo.png';
$absolute = rex_path::absolute($relative); // '/var/www/html/media/logo.png'
Datei von URL herunterladen
$response = rex_socket::factoryUrl('https://example.com/data.json')->doGet();
if ($response->isOk()) {
$file = rex_path::addonData('my_addon', 'downloaded.json');
rex_file::put($file, $response->getBody());
}
Backup erstellen
$originalFile = rex_path::addonData('my_addon', 'important.json');
$backupFile = rex_path::addonData('my_addon', 'backups/important_' . date('Ymd_His') . '.json');
rex_file::copy($originalFile, $backupFile);
Alte Cache-Dateien löschen
$cacheDir = rex_path::addonCache('my_addon');
$files = glob($cacheDir . '*.cache');
foreach ($files as $file) {
if (filemtime($file) < strtotime('-1 day')) {
rex_file::delete($file);
}
}
PHP-Konfiguration generieren
$config = [
'api_key' => 'secret123',
'endpoint' => 'https://api.example.com',
'timeout' => 30,
];
$configFile = rex_path::addonData('my_addon', 'config.php');
$content = '<?php' . PHP_EOL;
$content .= 'return ' . var_export($config, true) . ';';
rex_file::put($configFile, $content);
// Laden
$loadedConfig = rex_file::require($configFile);
Sicherheit
Immer rex_path::*() verwenden statt manuellen Strings:
// ✅ RICHTIG
$file = rex_path::addonData('my_addon', $userInput);
// ❌ FALSCH (Path Traversal möglich!)
$file = '/var/www/data/' . $userInput;
Dateien in data/ oder cache/ speichern, nicht im Addon-Ordner:
// ✅ RICHTIG
rex_path::addonData('my_addon', 'config.json')
// ❌ FALSCH (wird bei Updates überschrieben)
rex_path::addon('my_addon', 'config.json')
rex_dir - Verzeichnis-Operationen
| Methode |
Zweck |
rex_dir::create($dir) |
Verzeichnis rekursiv erstellen |
rex_dir::delete($dir) |
Verzeichnis rekursiv löschen |
rex_dir::copy($src, $dest) |
Verzeichnis kopieren |
rex_dir::deleteFiles($dir, $recursive) |
Nur Dateien löschen |
// Verzeichnis erstellen
rex_dir::create(rex_path::addonData('my_addon', 'uploads'));
// Verzeichnis komplett löschen
rex_dir::delete(rex_path::addonCache('my_addon'));