/ einen Symlink "shared" // an, der auf ../../shared zeigt. // // Idempotent (bereits vorhandene Einträge werden übersprungen) und // CLI-only — niemals direkt per HTTP aufrufbar. // // Usage: // php Installation/add_shared_symlinks.php --dry-run // php Installation/add_shared_symlinks.php declare(strict_types=1); if (PHP_SAPI !== 'cli') { http_response_code(403); exit('CLI only'); } $dryRun = in_array('--dry-run', $argv, true); $postsDir = realpath(__DIR__ . '/../../../userdata/knowledgecenter_update/posts'); $sharedDir = realpath(__DIR__ . '/../../../userdata/knowledgecenter_update/shared'); if ($postsDir === false) { fwrite(STDERR, "FEHLER: posts/-Verzeichnis nicht gefunden\n"); exit(2); } if ($sharedDir === false) { fwrite(STDERR, "FEHLER: shared/-Verzeichnis nicht gefunden — bitte erst anlegen\n"); exit(2); } echo "Mode: " . ($dryRun ? 'DRY-RUN (keine Änderungen)' : 'LIVE') . "\n"; echo "Posts: $postsDir\n"; echo "Shared: $sharedDir\n\n"; $dirs = glob($postsDir . '/*', GLOB_ONLYDIR); if ($dirs === false) { fwrite(STDERR, "FEHLER: glob() lieferte false\n"); exit(2); } $created = 0; $skipped = 0; $collisions = 0; $failed = 0; foreach ($dirs as $dir) { $linkPath = $dir . '/shared'; $name = basename($dir); if (is_link($linkPath)) { $skipped++; continue; } if (file_exists($linkPath)) { // gleichnamiger echter Ordner/Datei — nicht überschreiben echo "[KOLLISION] $name/shared existiert bereits als Ordner/Datei — übersprungen\n"; $collisions++; continue; } if ($dryRun) { echo "[DRY-RUN] würde anlegen: $name/shared -> ../../shared\n"; $created++; continue; } if (@symlink('../../shared', $linkPath)) { $created++; } else { $err = error_get_last(); echo "[FEHLER] $name/shared konnte nicht angelegt werden: " . ($err['message'] ?? 'unbekannt') . "\n"; $failed++; } } echo "\n=== Zusammenfassung ===\n"; echo "Beitragsordner gesamt: " . count($dirs) . "\n"; echo "Symlinks " . ($dryRun ? 'geplant' : 'angelegt') . ": $created\n"; echo "Bereits vorhanden: $skipped\n"; echo "Kollisionen: $collisions\n"; echo "Fehlgeschlagen: $failed\n"; exit($failed > 0 ? 1 : 0);