PHP-Script um Online zu zippen
Hallo Admins, folgende Frage, die bestimmt easy ist, bei der ich aber gerade ein Brett vor dem Kopf habe:
Ich habe das untere PHP Script gefunden mit dem ich online zippen kann:
Ich hab mir eine Subdomain eingerichtet mit zip.domain.de und die zip.php reingelegt.
Ich möchte damit meine joomalordner packen und habe in der Ziele "realpath" die Eingabe ('./') durch ('/joomla/') ersetzt.
Das Homeverzeichnis der zip.domain und das Homeverzeichniss befinden sich jeweils direkt im Htdocs-Folder.
Ich bekomme aber beim Ausführen des Scripts ständig diese Fehlermeldung:
Fatal error: Uncaught exception 'RuntimeException' with message 'Directory name must not be empty.' in /pages/d0/cc/d0011065/home/htdocs/zip/zip.php:6 Stack trace: /pages/d0/cc/d0011065/home/htdocs/zip/zip.php(6): RecursiveDirectoryIterator->__construct('') #1 {main} thrown in /pages/d0/cc/d0011065/home/htdocs/zip/zip.php on line 6
Also ganz offensichtlich ist die Pfadangabe falsch, aber ich komm nicht drauf, wie sie richtig heissen muss...
Ich freue mich, wenn Ihr mir den entscheidenden Tip geben könnt.
Hier, wie geschrieben das Script
Danke schonmal
Greetz
Ich habe das untere PHP Script gefunden mit dem ich online zippen kann:
Ich hab mir eine Subdomain eingerichtet mit zip.domain.de und die zip.php reingelegt.
Ich möchte damit meine joomalordner packen und habe in der Ziele "realpath" die Eingabe ('./') durch ('/joomla/') ersetzt.
Das Homeverzeichnis der zip.domain und das Homeverzeichniss befinden sich jeweils direkt im Htdocs-Folder.
Ich bekomme aber beim Ausführen des Scripts ständig diese Fehlermeldung:
Fatal error: Uncaught exception 'RuntimeException' with message 'Directory name must not be empty.' in /pages/d0/cc/d0011065/home/htdocs/zip/zip.php:6 Stack trace: /pages/d0/cc/d0011065/home/htdocs/zip/zip.php(6): RecursiveDirectoryIterator->__construct('') #1 {main} thrown in /pages/d0/cc/d0011065/home/htdocs/zip/zip.php on line 6
Also ganz offensichtlich ist die Pfadangabe falsch, aber ich komm nicht drauf, wie sie richtig heissen muss...
Ich freue mich, wenn Ihr mir den entscheidenden Tip geben könnt.
Hier, wie geschrieben das Script
<?php
$sourcePath = realpath('/joomla/');
$archiv = new ZipArchive();
$archiv->open('joomla.zip', ZipArchive::CREATE);
$dirIter = new RecursiveDirectoryIterator($sourcePath);
$iter = new RecursiveIteratorIterator($dirIter);
foreach($iter as $element) {
/* @var $element SplFileInfo */
$dir = str_replace($sourcePath, '', $element->getPath()) . '/';
if ($element->isDir()) {
// Ordner erstellen (damit werden auch leere Ordner hinzugefügt
$archiv->addEmptyDir($dir);
} elseif ($element->isFile()) {
$file = $element->getPath() .
'/' . $element->getFilename();
$fileInArchiv = $dir . $element->getFilename();
// Datei dem Archiv hinzufügen
$archiv->addFile($file, $fileInArchiv);
}
}
// Einen Kommentar mitspeichern
$archiv->setArchiveComment('Backup von ' . $sourcePath);
$archiv->close();
Danke schonmal
Greetz
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 275538
Url: https://administrator.de/contentid/275538
Ausgedruckt am: 22.11.2024 um 10:11 Uhr
3 Kommentare
Neuester Kommentar
Hallo Sbsnewbie.
Kennst du den unterschied zwischen __relativen__ und __absolute__ Pfadangaben !?
In Zeile 3 hast du eine absolute Pfadangabe verwendet !
Also sinngemäß: "HDD:/joomla"
Aber tatsächlich wird auch dein httpdocs-Verzeichnis in weiteren Verzeichnissen liegen, vielleicht "HDD:/var/www/vhosts/sbsnewble/httpdocs". Und dein Joomla-Ordner dann in HDD:/var/www/vhosts/sbsnewble/httpdocs/joomla".
Woher soll also PHP wissen ob du nun absolute oder relativ meinst !? Vielleicht meintest du ja auch mit Absicht den absoluten Pfad (mal so, mal so).
Du musst einfach noch eine Punkt vor deine Pfadangabe setzten "./joomla/", der bedeutet soviel wie "dieses Verzeichnis" (in dem sich die ausführende PHP-Datei befindet !!!). Und wenn dann
Du könntest die Variable in Zeile 3 aber auch wie folgt setzen:
(Die absolute Pfadangabe bekommst du von deinem Anbieter oder aus der Ausgabe von
TIPP:
Lass dir beim nächstem mal doch einfach den Wert der vermeintlich fehlerhaften Variable ausgeben:
~Arano
Kennst du den unterschied zwischen __relativen__ und __absolute__ Pfadangaben !?
In Zeile 3 hast du eine absolute Pfadangabe verwendet !
Also sinngemäß: "HDD:/joomla"
Aber tatsächlich wird auch dein httpdocs-Verzeichnis in weiteren Verzeichnissen liegen, vielleicht "HDD:/var/www/vhosts/sbsnewble/httpdocs". Und dein Joomla-Ordner dann in HDD:/var/www/vhosts/sbsnewble/httpdocs/joomla".
Woher soll also PHP wissen ob du nun absolute oder relativ meinst !? Vielleicht meintest du ja auch mit Absicht den absoluten Pfad (mal so, mal so).
Du musst einfach noch eine Punkt vor deine Pfadangabe setzten "./joomla/", der bedeutet soviel wie "dieses Verzeichnis" (in dem sich die ausführende PHP-Datei befindet !!!). Und wenn dann
realpath()
versucht diesen Pfad aufzulösen, wird das nach "/var/www/vhosts/sbsnewble/httpdocs/joomla" aufgelöst. WENN die ausführende PHP-Datei in dem httpdocs-Verzeichnis liegt !. Halt relativ von der ausführenden Datei gesehen.Du könntest die Variable in Zeile 3 aber auch wie folgt setzen:
$sourcePath = '/var/www/vhosts/sbsnewbie/httpdocs/joomla';
phpinfo()
)TIPP:
Lass dir beim nächstem mal doch einfach den Wert der vermeintlich fehlerhaften Variable ausgeben:
echo 'VAR="'.print_r( $sourcePath, true ).'"';
~Arano
Hi,
Sorry, hatte auf der Arbeit gelesen das du geschrieben hast, habe es dann im laufe des Tages aber doch wieder vergessen.
~Arano
Sorry, hatte auf der Arbeit gelesen das du geschrieben hast, habe es dann im laufe des Tages aber doch wieder vergessen.
hmm irgendwie funktioniert das nicht...
Das ist natürlich doof, aber auch keine gültige Fehlerbeschreibung - Subdomains __können__ (muss nicht) einen anderen absoluten Pfad haben. Ich meine bei Plesk ist das so, das für Subdomains ein separates Verzeichnis verwendet wird, z.B.:
/pages/d0/cc/d00xxxxx/home/ subdomains / subdomainAAA /httpdocs/
. Da musst du dir also sicher sein wie es bei dir ist. - Zugrifsrechte __könnten__ auch eine Rolle Spielen, ich meine aber, das die dann Kundenaccount weit gelten. Also gleicher Benutzer für Haupt- und Subdomains.
- Wie lautet die aktuelle Fehlermeldung ?
~Arano