tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
13
ZUGRIFFE
4771
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    RealScorp RealScorp ist offline Mitglied Silber
    Registriert seit
    Apr 2004
    Beiträge
    55
    Hallo,

    ich habe im Augenblick ein Projekt laufen, bei dem u.a. eine recht gut benutzte Gallerie vorhanden ist (1800 Bilder mittlerweile).
    Die Gallerie ist selbst geschrieben, und dahher auch nichts hochgestochenes, sondern eben nur ein einfaches Galleriescript.
    Die Bilder die hochgeladen wurden werden halt mit den Attributen wie Titel/Dateiname/Kategorie usw in einer mysqlDB gespeichert.

    Mein eigentliches Problem kommt jetzt:
    Ich müsste es irgendwie hinbekommen die Dateien nach entsprechender Kategorie zu komprimieren (notfalls reicht auch ein Archiv, also ohne Kompression), und zum DL bereitzustellen.

    Leider habe ich auf die Schnelle mit Suchfunktion etc nichts gefunden.

    vielen Dank im vorraus

    gruß Scorp
     

  2. #2
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.806
    Blog-Einträge
    5
    Hallo,

    folgende Klasse sollte dir da weiterhelfen: http://pear.php.net/package/File_Archive

    Grüße,
    Matthias
     
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

  3. #3
    RealScorp RealScorp ist offline Mitglied Silber
    Registriert seit
    Apr 2004
    Beiträge
    55
    Hi,

    danke für die schnelle Antwort, allerdings hätte ich erwähnen müssen, dass ich nicht die Möglichkeit habe, die PHP Installation auf meinem Webspace zu ändern, ich kann also keine Module installieren bzw neu kompilieren.
     

  4. #4
    Avatar von Dennis Wronka
    Dennis Wronka Dennis Wronka ist offline Soulcollector
    Registriert seit
    Apr 2002
    Ort
    Hong Kong
    Beiträge
    12.296
    Blog-Einträge
    231
    Fuer die PEAR-Komponenten musst Du in der Regel nichts aendern, da das eigentlich nur Klassen sind. Es kann aber sein, dass die PHP-Version dort ohne PEAR installiert wurde was dazu fuehren koennte, dass Du keine PEAR-Komponenten nutzen kannst.
    Ich hab mal eine Klasse geschrieben mit denen Du Dateien in ein TAR-Archiv packen kannst, falls Dir dann noch gZip-Kompression zur Verfuegung steht koenntest Du dieses dann auch noch komprimieren. .tar.gz-Archive sind zwar eher unter Linux ueblich, aber lassen sich, nach meiner Erfahrung, auch mit den gaengigen Pack-Programmen unter Windows entpacken.
     
    PHP Class Collection - PHP-Klassen fuer PHP 5 (und Teilweise auch fuer PHP 4)
    Updates: Catcher 1.1, FTPConnection 1.2, MultiSQL 1.1, RSS2 1.1, SMTPConnection 1.4
    __________________
    EasyLFS - Hintergrundinformationen, Installationsanleitung, Softwareliste und Download
    EasyLFS Projektthread - Informationen, Status und Diskussion zu meiner Linux-Distribution
    __________________
    Ich bin die Schildkroete, mein Sohn. Ich habe das Universum erschaffen, aber bitte mach mir daraus keinen Vorwurf; ich hatte Bauchschmerzen.
    __________________
    Zitat Zitat von Friedrich Nietzsche
    Man muss noch Chaos in sich haben, um einen tanzenden Stern gebaeren zu koennen.

  5. #5
    RealScorp RealScorp ist offline Mitglied Silber
    Registriert seit
    Apr 2004
    Beiträge
    55
    Meine PHP installation scheint keine PEAR unterstüzung zu haben, zumindest taucht das nirgendwo bei phpinfo() auf.

    Wie gesagt, ein Script oder eine Funkrion die die Dateien archivieren kann (auch ohne Kompression) würde mir sehr weiterhelfen.
     

  6. #6
    Avatar von Dennis Wronka
    Dennis Wronka Dennis Wronka ist offline Soulcollector
    Registriert seit
    Apr 2002
    Ort
    Hong Kong
    Beiträge
    12.296
    Blog-Einträge
    231
    Ich kann Dir meine Klasse ja gern mal posten, ist zwar noch nicht ganz ausgetestet (darum gibt's die hier auch noch nicht), aber funktioniert soweit.

    Uebrigens, hast Du da PHP 4 oder 5?
     
    PHP Class Collection - PHP-Klassen fuer PHP 5 (und Teilweise auch fuer PHP 4)
    Updates: Catcher 1.1, FTPConnection 1.2, MultiSQL 1.1, RSS2 1.1, SMTPConnection 1.4
    __________________
    EasyLFS - Hintergrundinformationen, Installationsanleitung, Softwareliste und Download
    EasyLFS Projektthread - Informationen, Status und Diskussion zu meiner Linux-Distribution
    __________________
    Ich bin die Schildkroete, mein Sohn. Ich habe das Universum erschaffen, aber bitte mach mir daraus keinen Vorwurf; ich hatte Bauchschmerzen.
    __________________
    Zitat Zitat von Friedrich Nietzsche
    Man muss noch Chaos in sich haben, um einen tanzenden Stern gebaeren zu koennen.

  7. #7
    Registriert seit
    Dec 2002
    Ort
    Trier
    Beiträge
    17.502
    Blog-Einträge
    10
    Hast du schon Skript-Datenbanken wie etwa PHP-Classes.org oder Hot-Scripts.com durchsucht?
     
    Markus Wulftange

  8. #8
    RealScorp RealScorp ist offline Mitglied Silber
    Registriert seit
    Apr 2004
    Beiträge
    55
    Ich habe wie gesagt über Google bzw die Suche hier mein Glück versucht, bin aber nicht Fündig geworden.
    Wenn du deine Klasse posten könntest fände ich das super. Auf meinem Webserver ist PHP 4.3.10 installiert.
     

  9. #9
    Avatar von Dennis Wronka
    Dennis Wronka Dennis Wronka ist offline Soulcollector
    Registriert seit
    Apr 2002
    Ort
    Hong Kong
    Beiträge
    12.296
    Blog-Einträge
    231
    Brauchst Du auch die entsprechende Klasse um die Daten wieder auszupacken oder reicht es Dir wenn Du packen kannst?
    So, hier mal die PHP4-Version meiner Tar-Klasse. Es fehlen zwar noch ein paar Checks, aber im Grunde ist sie funktionsfaehig.
    tar.php4class.php
    PHP-Code:
    <?php
    /*
    tar.class.php for PHP4
    Version 0.8

    Soon part of the PHP class collection
    http://www.sourceforge.net/projects/php-classes/

    Written by: Dennis Wronka
    License: LGPL
    */
    class tar
    {
        var 
    $filename;
        var 
    $filelist;

        function 
    tar($filename)
        {
            
    $this->filename=$filename;
            
    $this->filelist=array();
        }

        function 
    addfile($filename)
        {
            
    $this->filelist[]=$filename;
        }

        function 
    write()
        {
            
    $tarfile=fopen($this->filename,"w");
            for (
    $x=0;$x<count($this->filelist);$x++)
                {
                    
    $filename=$this->filelist[$x];
                    while (
    strlen($filename)<100)
                        {
                            
    $filename.=chr(0);
                        }
                    
    $permissions=sprintf("%o",fileperms($this->filelist[$x])).chr(0);
                    while (
    strlen($permissions)<8)
                        {
                            
    $permissions='0'.$permissions;
                        }
                    
    $userid=sprintf("%o",fileowner($this->filelist[$x])).chr(0);
                    while (
    strlen($userid)<8)
                        {
                            
    $userid='0'.$userid;
                        }
                    
    $groupid=sprintf("%o",filegroup($this->filelist[$x])).chr(0);
                    while (
    strlen($groupid)<8)
                        {
                            
    $groupid='0'.$groupid;
                        }
                    
    $filesize=sprintf("%o",filesize($this->filelist[$x])).chr(0);
                    while (
    strlen($filesize)<12)
                        {
                            
    $filesize='0'.$filesize;
                        }
                    
    $modtime=sprintf("%o",filectime($this->filelist[$x])).chr(0);
                    
    $checksum="        ";
                    if (
    is_dir($this->filelist[$x]))
                        {
                            
    $indicator=5;
                        }
                    else
                        {
                            
    $indicator=0;
                        }
                    
    $linkname="";
                    while (
    strlen($linkname)<100)
                        {
                            
    $linkname.=chr(0);
                        }
                    
    $ustar="ustar  ".chr(0);
                    
    $user=posix_getpwuid(octdec($userid));
                    
    $user=$user['name'];
                    while (
    strlen($user)<32)
                        {
                            
    $user.=chr(0);
                        }
                    
    $group=posix_getgrgid(octdec($groupid));
                    
    $group=$group['name'];
                    while (
    strlen($group)<32)
                        {
                            
    $group.=chr(0);
                        }
                    
    $devmajor="";
                    while (
    strlen($devmajor)<8)
                        {
                            
    $devmajor.=chr(0);
                        }
                    
    $devminor="";
                    while (
    strlen($devminor)<8)
                        {
                            
    $devminor.=chr(0);
                        }
                    
    $prefix="";
                    while (
    strlen($prefix)<155)
                        {
                            
    $prefix.=chr(0);
                        }
                    
    $header=$filename.$permissions.$userid.$groupid.$filesize.$modtime.$checksum.$indicator.$linkname.$ustar.$user.$group.$devmajor.$devminor.$prefix;
                    while (
    strlen($header)<512)
                        {
                            
    $header.=chr(0);
                        }
                    
    $checksum=0;
                    for (
    $y=0;$y<strlen($header);$y++)
                        {
                            
    $checksum+=ord($header[$y]);
                        }
                    
    $checksum=sprintf("%o",$checksum).chr(0).' ';
                    while (
    strlen($checksum)<8)
                        {
                            
    $checksum='0'.$checksum;
                        }
                    
    $header=$filename.$permissions.$userid.$groupid.$filesize.$modtime.$checksum.$indicator.$linkname.$ustar.$user.$group.$devmajor.$devminor.$prefix;
                    while (
    strlen($header)<512)
                        {
                            
    $header.=chr(0);
                        }
                    
    fwrite($tarfile,$header);
                    if (
    $indicator==0)
                        {
                            
    $contentfile=fopen($this->filelist[$x],"r");
                            
    $data=fread($contentfile,filesize($this->filelist[$x]));
                            while (
    strlen($data)%512!=0)
                                {
                                    
    $data.=chr(0);
                                }
                            
    fwrite($tarfile,$data);
                        }
                }
            
    fclose($tarfile);
            return 
    true;
        }
    }
    ?>
    Und hier mal ein Beispiel:
    PHP-Code:
    <?php
    require("tar.php4class.php");
    $tarfile=new tar("test.tar");
    $tarfile->addfile("untartest.php");
    $tarfile->addfile("browser.php");
    $tarfile->addfile("linkcheck.php");
    $tarfile->write();
    unset(
    $tarfile);
    ?>
    Ach ja, ich hab jetzt diese PHP4-Version nicht getestet, sondern nur kurz das PHP5-Version angepasst.
     
    PHP Class Collection - PHP-Klassen fuer PHP 5 (und Teilweise auch fuer PHP 4)
    Updates: Catcher 1.1, FTPConnection 1.2, MultiSQL 1.1, RSS2 1.1, SMTPConnection 1.4
    __________________
    EasyLFS - Hintergrundinformationen, Installationsanleitung, Softwareliste und Download
    EasyLFS Projektthread - Informationen, Status und Diskussion zu meiner Linux-Distribution
    __________________
    Ich bin die Schildkroete, mein Sohn. Ich habe das Universum erschaffen, aber bitte mach mir daraus keinen Vorwurf; ich hatte Bauchschmerzen.
    __________________
    Zitat Zitat von Friedrich Nietzsche
    Man muss noch Chaos in sich haben, um einen tanzenden Stern gebaeren zu koennen.

  10. #10
    RealScorp RealScorp ist offline Mitglied Silber
    Registriert seit
    Apr 2004
    Beiträge
    55
    Hallo,

    zuerst mal vielen Dank für die Klasse, allerdings habe ich noch ein paar Probleme damit
    Zuerst scheint die Übergabe des Dateinamens beim Erstellen einer neuen Instanz der Klasse nicht zu funktionieren, wenn ich z.B. das Beispiel ausprobiere gibt er mir für jede Datei die ich versuche hinzuzufügen folgende Fehlerzeeilen:

    Code :
    1
    2
    3
    
    Warning: fwrite(): supplied argument is not a valid stream resource in <path>/tar.php4class.php on line 121
     
    Warning: fwrite(): supplied argument is not a valid stream resource in <path>/tar.php4class.php on line 130

    Wenn ich in der Klasse den Dateinamen direkt zuweise, also sowas hier mache:

    PHP-Code:
    [...]
    class 
    tar 

        var 
    $filename="test.tar"
        var 
    $filelist
    [...] 
    es einwandfrei.

    Wäre nett wenn du da nochmal kurz drüberschaun könntest, da ich vor allem bei PHP mit Klassen nur in der Theorie etwas vertraut bin, und nicht genau weiss, wo ich da bei der Fehlersuche anfangen sollte.

    Ansonsten schonmal wie schon gesagt vielen Dank für die Klasse, sie scheint soweit mit php4 prima zu .

    gruß Scorp
     

  11. #11
    Avatar von Dennis Wronka
    Dennis Wronka Dennis Wronka ist offline Soulcollector
    Registriert seit
    Apr 2002
    Ort
    Hong Kong
    Beiträge
    12.296
    Blog-Einträge
    231
    So, hab den Code oben etwas angepasst. Hatte noch vergessen den Konstruktor umzubenennen, bei PHP4 heisst dieser wie die Klasse selbst und nicht __construct.
    Jetzt sollte die Klasse funktionieren.
     
    PHP Class Collection - PHP-Klassen fuer PHP 5 (und Teilweise auch fuer PHP 4)
    Updates: Catcher 1.1, FTPConnection 1.2, MultiSQL 1.1, RSS2 1.1, SMTPConnection 1.4
    __________________
    EasyLFS - Hintergrundinformationen, Installationsanleitung, Softwareliste und Download
    EasyLFS Projektthread - Informationen, Status und Diskussion zu meiner Linux-Distribution
    __________________
    Ich bin die Schildkroete, mein Sohn. Ich habe das Universum erschaffen, aber bitte mach mir daraus keinen Vorwurf; ich hatte Bauchschmerzen.
    __________________
    Zitat Zitat von Friedrich Nietzsche
    Man muss noch Chaos in sich haben, um einen tanzenden Stern gebaeren zu koennen.

  12. #12
    RealScorp RealScorp ist offline Mitglied Silber
    Registriert seit
    Apr 2004
    Beiträge
    55
    Jup wunderbar!

    Vieeeelen Dank nochmal für die Klasse, hatte auch bei verwendung innerhalb einer Schleife überhaupt keine Probleme mehr

    Nur WinRAR gibt einen Fehler beim entpacken jedes Archivs aus, die Dateien werden allerdings trotzdem entpackt und sind fehlerfrei darstellbar.

    /problem solved!
    Geändert von RealScorp (19.05.06 um 09:42 Uhr)
     

  13. #13
    Avatar von Dennis Wronka
    Dennis Wronka Dennis Wronka ist offline Soulcollector
    Registriert seit
    Apr 2002
    Ort
    Hong Kong
    Beiträge
    12.296
    Blog-Einträge
    231
    Wie gross sind die Archive? <10KB?
    Normalerweise blaeht tar die Archive mindestens auf 10KB auf, warum auch immer. Das macht meine Klasse (noch?) nicht. Hatte bisher noch keine Probleme, wenn ich sie mit tar ausgepackt hab dann kam auch kein Fehler.
    Werde mal schauen was ob sich da was machen laesst. Wie gesagt, ist halt noch nicht ganz ausgetestet. Aber wenigstens werden die Daten ja fehlerfrei gesichert und wiederhergestellt.
     
    PHP Class Collection - PHP-Klassen fuer PHP 5 (und Teilweise auch fuer PHP 4)
    Updates: Catcher 1.1, FTPConnection 1.2, MultiSQL 1.1, RSS2 1.1, SMTPConnection 1.4
    __________________
    EasyLFS - Hintergrundinformationen, Installationsanleitung, Softwareliste und Download
    EasyLFS Projektthread - Informationen, Status und Diskussion zu meiner Linux-Distribution
    __________________
    Ich bin die Schildkroete, mein Sohn. Ich habe das Universum erschaffen, aber bitte mach mir daraus keinen Vorwurf; ich hatte Bauchschmerzen.
    __________________
    Zitat Zitat von Friedrich Nietzsche
    Man muss noch Chaos in sich haben, um einen tanzenden Stern gebaeren zu koennen.

  14. #14
    RealScorp RealScorp ist offline Mitglied Silber
    Registriert seit
    Apr 2004
    Beiträge
    55
    Wie gesagt die Fehler kamen nur beim entpacken mit Winrar, mit tar kann ich es leider nicht Probieren da auf meinem home rechner windoof läuft.
    Die Archive sind alle zwischen 500kb und 30mb groß gewesen, aber wie gesagt die Dateien waren alle drin und ließen sich nach dem entpacken fehlerfrei betrachten.

    Leider gibt winrar auch keine genaueren Fehler aus, ausser "Error reading from file", also keine Fehlercodes oder genaueren Beschreibungen.
     

Ähnliche Themen

  1. Dateien packen bzw. archivieren
    Von Julian-w im Forum .NET Datenverwaltung
    Antworten: 4
    Letzter Beitrag: 18.09.07, 19:06
  2. packen von Dateien
    Von Eddymaniac im Forum Linux & Unix
    Antworten: 5
    Letzter Beitrag: 01.10.06, 22:56
  3. Antworten: 9
    Letzter Beitrag: 15.04.06, 15:44
  4. SP2 und Dateien Archivieren
    Von Robert Steichele im Forum Microsoft Windows
    Antworten: 0
    Letzter Beitrag: 12.08.04, 07:18
  5. Dateien automatisch archivieren
    Von met im Forum 3D Studio Max
    Antworten: 0
    Letzter Beitrag: 13.02.03, 13:53