sbsnewbie
Goto Top

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


<?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

Content-ID: 275538

Url: https://administrator.de/contentid/275538

Ausgedruckt am: 22.11.2024 um 10:11 Uhr

Arano
Arano 24.06.2015 um 20:01:39 Uhr
Goto Top
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 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';   
(Die absolute Pfadangabe bekommst du von deinem Anbieter oder aus der Ausgabe von phpinfo())

TIPP:
Lass dir beim nächstem mal doch einfach den Wert der vermeintlich fehlerhaften Variable ausgeben:
    echo 'VAR="'.print_r( $sourcePath, true ).'"';  


~Arano
sbsnewbie
sbsnewbie 25.06.2015 um 11:50:51 Uhr
Goto Top
hmm irgendwie funktioniert das nicht....

Vielleicht hab ich es aber nicht gut genug beschrieben.

Mal vom Ansatz her: Ich habe einen Managed-Server bei Strato. Auf dem ist eine Jommla und eine Magento Installation. Joomla liegt auf der Hauptdomain mit Weiterleitung auf den Ordner "joomala", die Magentoinstallation auf der subdomain magento.domain.de, mit der Weiterleitung auf den Ordner ""Magento"


Um die Ordner zu Backupen gibt es eben die subdomain zip.domain.de die auf den internen Ordner "Zip" weitergeleitet ist, mit entsprechender htacess.

Eigentlich wollte ich die Zip.php in den Ordner Zip legen und von dort aus die Verzeichniss packen...

Der absolute Pfad, wie ich der Fehlermeldung entnehmen konnte scheint dieser zu sein:

/pages/d0/cc/d0011065/home/htdocs/
Arano
Arano 26.06.2015 um 18:04:42 Uhr
Goto Top
Hi,

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 face-wink

  1. 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.
  2. Zugrifsrechte __könnten__ auch eine Rolle Spielen, ich meine aber, das die dann Kundenaccount weit gelten. Also gleicher Benutzer für Haupt- und Subdomains.
  3. Wie lautet die aktuelle Fehlermeldung ?


~Arano