tar und gzip mit exec() oder system()

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • tar und gzip mit exec() oder system()

    Hi,
    ich versuche auf meinem webspace einen bestimmten ordner mit tar und gzip zu archivieren, leider wird das "endprodukt" immer nur 20 bytes groß bzw. klein

    Vorabinfos:
    - PHP Version 4.3.9
    - exec = "erlaubt"
    - /etc/phpCgi/php.ini = phpCgi
    - safe_mode = Off
    - safe_mode_exec_dir = "no value"
    - _SERVER["HTTP_ACCEPT_ENCODING"] = gzip, deflate
    - max_execution_time = 30
    - /www/htdocs/xxxx/backup/files/ = chmod 777
    PHP-Code:
    <?php
    exec
    ("tar -c /www/htdocs/xxxx/_tmp/ | gzip > /www/htdocs/xxxx/backup/files/dir._tmp.tar.gz");

    echo 
    'fertig...'
    ?>
    Habe mir bereits gzip und tar angeschaut, aber bin nicht wirktlich schlauer

    Achja: das script läuft OHNE timeout durch, weil das verzeichnis "_tmp" eh erst um die 2 MB groß ist

    für Hilfe wär ich sehr dankbar


    LÖSUNG: PEAR Archive_Tar (da bei meinem provider TAR per exec nicht verfügbar ist)
    PHP-Code:
    <?php 
    require ("Archive/Tar.php");

    $files_to_add[0]="../_tmp";

    // ....tar.gz",""); < statt "" kann man auch "gz" oder "bz2" schreiben 
    // "" = die einzelnen Dateien und Ordner werden nicht-gepackt ins backuptest.tar.gz hinzugefügt (beispiel: testbild.jpg)
    // "gz" = die einzelnen Dateien und Ordner werden als gz-Datei ins backuptest.tar.gz hinzugefügt (beispiel: testbild.jpg.gz)
    // "bz2" = die einzelnen Dateien und Ordner werden als bz2-Datei ins backuptest.tar.gz hinzugefügt (beispiel: testbild.jpg.bz2)
    $tar = new Archive_tar("../backup/files/backuptest.tar.gz",""); 
    $tar -> add$files_to_add );
    $tar -> _Archive_Tar();

    if ( (
    $file_list $tar->ListContent()) != 0) {
      
    /**
      * Dateien sind enthalten
      */
      
    foreach ($file_list as $v) {
        
    printf('
        [ Name: <span style="color:#FF0000; font-family:Arial, Helvetica, sans-serif; font-size:12px;">%s</span> ]  
        [ <span style="color:#6666FF; font-family:Arial, Helvetica, sans-serif; font-size:12px;">%d</span> ]   
        [ modtime: %s ]   
        [ mode: %s ] <br>'
    ,
               
    $v['filename'],$v['size'],$v['mtime'],$v['mode']);
      }
    }

    // und wer den extract-befehl noch braucht:
    // $tar->extract('../backup/Archive/');

    echo '<br>fertig...'
    ?>
    MfG n_joy
    Zuletzt geändert von n_joy; 22.11.2004, 11:12.

  • #2
    Bitte helft mir, so langsam verzweifel ich
    (habe schon sehr viele befehls-varianten durch, aber nichts hat bisher geholfen)
    PHP-Code:
    exec("tar -czf /www/htdocs/xxxx/backup/files/testing.tar.gz /www/htdocs/xxxx/_tmp/");
    // wird nicht mal eine datei erstellt 

    Kommentar


    • #3
      versuch mal das


      Code:
      system("tar -czf /www/htdocs/xxxx/backup/files/testing.tar.gz  /www/htdocs/xxxx/_tmp/*");

      Kommentar


      • #4
        Moin
        PHP-Code:
        exec("tar -cf /Pfad zur Datei / Leerzeichen neuerDateiname | gzip neuer Dateiname 
        Das geht wohl auch mit z in einem. denke tar -cfz ??
        In Deinem zweiten Post sieht das aber so aus, als ob Du die gezippte Datei wieder auspacken willst?
        Dann musst Du erst mit gunzip oder gzip -d die Datei decomprimieren und dann tar anwenden.
        Das Leben ist kein Ponyhof.

        Kommentar


        • #5
          erstmal danke für die Antworten!

          @wendel: ich will eigendlich nur ein verzeichnis archivieren
          PHP-Code:
          // das alles geht nicht
          exec("tar -cf /www/htdocs/xxxx/_tmp/ testing.tar.gz | gzip /www/htdocs/xxxx/backup/files/testing.tar.gz");

          exec("tar -cf /www/htdocs/xxxx/_tmp/ /www/htdocs/xxxx/backup/files/testing.tar | gzip /www/htdocs/xxxx/backup/files/testing.tar.gz");

          chdir('/www/htdocs/xxxx/backup/files/');
          exec("tar -c /www/htdocs/xxxx/_tmp/ testing.tar | gzip /www/htdocs/xxxx/backup/files/testing.tar.gz");

          // ..und noch viele andere varianten / auch schon alle mit .../_tmp/* versucht, zwecklos :( 
          @Peacie: diese variante hatte ich auch schon, leider wird da keine file erstellt

          so langsam bekomme ich auch das gefühl, dass ich "TAR" garnicht anwenden kann/darf...
          kann man evtl. irgendwo nachschauen ob ich TAR überhaupt anwenden "darf" ?

          phpinfo hab ich nichts gefunden bis auf dies hier
          zlib
          ZLib Support enabled
          Compiled Version 1.2.1
          Linked Version 1.1.4
          aber das ist ja eigendlich nur für die ganzen gz...() funktionen zuständig :-/

          also: wo kann ich nachschauen ob ich rechte für tar habe ? ..oder gleich beim provider anrufen ? ^^ (ich ruf mal an)


          MfG
          Zuletzt geändert von n_joy; 19.11.2004, 13:32.

          Kommentar


          • #6
            Willst Du ale im Verzeichnis _temp vorhandenen Dateien archivieren?
            versuchs mal mit tar -cfr r für rekursiv also alles was da sonst noch so drin steht.
            In Deinem ersten Posting steht doch was von nem Endergebnis ?
            Wie sieht das denn aus bzw. was steht da drin? Name ?
            Ich dachte immer er hängt das .tar automatisch hinten dran
            Und noch was:
            /www/htdocs/xxxx/backup/files/ = chmod 777
            Das ist doch Dein Verzeichnis, indem Du das Ergebnis speichern willst, oder?
            mach auch mal chmod 777 /www/htdocs/xxxx/_tmp
            Wobei er da ja ne Meldung machen müsste:
            Permission denied oder so ähnlich wenn Du keine Recht hättest.
            Das Leben ist kein Ponyhof.

            Kommentar


            • #7
              @Wendel:
              ich wolte den Ordner ".../_tmp/" archivieren und in ".../backup/files/" speichern... ausserdem hat der ziel-ordner ".../backup/files/" schon die rechte 777, aber das ist jetzt eh egal weil ich ne antwort vom provider bekommen habe...

              Hallo,

              tar ist aus Sicherheitsgründen gesperrt. gzip ist aber zugänglich. Dieses können Sie per exec ansprechen.
              autsch ! ...wie bekomme ich jetzt nen gesammten Ordner in ein archiv ?!!?

              MfG n_joy

              Kommentar


              • #8
                vielleicht so:
                PHP-Code:
                exec("gzip -r /www/htdocs/xxxx/backup/files/testing.gz /www/htdocs/xxxx/_tmp"); 
                Das Leben ist kein Ponyhof.

                Kommentar


                • #9
                  Hi Wendel,
                  Original geschrieben von Wendel
                  vielleicht so:
                  PHP-Code:
                  exec("gzip -r /www/htdocs/xxxx/backup/files/testing.gz /www/htdocs/xxxx/_tmp"); 
                  ...schön wärs, leider packt/komprimiert gzip keine verzeichnisse bzw. ordner ! :-/

                  ...trotzdem danke für dein Bemühen mir zu helfen ^^

                  MfG n_joy

                  Kommentar


                  • #10
                    Red Hat sagt was anderes:
                    manual red hat
                    Aber o.k. ansonsten sollte Dir das hier weiterhelfen können:
                    PHP-Code:
                    <?php
                    $handle
                    =opendir('/www/htdocs/xxxx/_tmp/');
                    while (
                    $file readdir ($handle)) {
                       if (
                    $file != "." && $file != "..") {
                           
                    exec("gzip  /www/htdocs/xxxx/backup/files/testing.gz /www/htdocs/xxxx/_tmp/$file");

                       }
                    }
                    closedir($handle);
                    ?>
                    siehe dazu bei php.net readdir.
                    wie Du mit gzip Dateien anhängen kannst, musst Du selbst nochmal testen.
                    Ansonsten Erstellst du halt jedesmal in der Schleife ne neue Datei im selben Verzeichnis
                    (mit zähler i=1 bis ende i++) oder so ähnlich.
                    Sollte zumindest ein Ansatz sein. Viel Spass und melde Dich mal wie Du es gelöst hast.
                    ähem das exec musst Du natürlich überall davor setzen, sorry war etwas schnell dahingedengelt.
                    Zuletzt geändert von Wendel; 19.11.2004, 16:17.
                    Das Leben ist kein Ponyhof.

                    Kommentar


                    • #11
                      ich habs nun, dankt dem all-inkl.com - support, so gelöst(tar kann man bei denen über exec wegen sicherheitsgründen nicht ansteuern):

                      LÖSUNG: PEAR Archive_Tar
                      PHP-Code:
                      <?php 
                      require ("Archive/Tar.php");

                      $files_to_add[0]="../_tmp";

                      // ....tar.gz",""); < statt "" kann man auch "gz" oder "bz2" schreiben 
                      // "" = die einzelnen Dateien und Ordner werden nicht-gepackt ins backuptest.tar.gz hinzugefügt (beispiel: testbild.jpg)
                      // "gz" = die einzelnen Dateien und Ordner werden als gz-Datei ins backuptest.tar.gz hinzugefügt (beispiel: testbild.jpg.gz)
                      // "bz2" = die einzelnen Dateien und Ordner werden als bz2-Datei ins backuptest.tar.gz hinzugefügt (beispiel: testbild.jpg.bz2)
                      $tar = new Archive_tar("../backup/files/backuptest.tar.gz",""); 
                      $tar -> add$files_to_add );
                      $tar -> _Archive_Tar();

                      if ( (
                      $file_list $tar->ListContent()) != 0) {
                        
                      /**
                        * Dateien sind enthalten
                        */
                        
                      foreach ($file_list as $v) {
                          
                      printf('[ Name: <span style="color:#FF0000; font-family:Arial, Helvetica, sans-serif; font-size:12px;">%s</span> ]  [ <span style="color:#6666FF; font-family:Arial, Helvetica, sans-serif; font-size:12px;">%d</span> ]   [ modtime: %s ]   [ mode: %s ] <br>',
                                 
                      $v['filename'],$v['size'],$v['mtime'],$v['mode']);
                        }
                      }

                      // und wer den extract-befehl noch braucht:
                      // $tar->extract('../backup/Archive/');

                      echo '<br>fertig...'
                      ?>
                      Ausgegeben wird eine Liste mit allen Dateien und Verzeichnissen die Archiviert wurden...

                      MfG n_joy

                      Kommentar

                      Lädt...
                      X