ERLEDIGT
JA
JA
ANTWORTEN
13
13
ZUGRIFFE
4771
4771
EMPFEHLEN
-
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
-
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
-
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.
-
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 von Friedrich Nietzsche
-
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.
-
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 von Friedrich Nietzsche
-
Hast du schon Skript-Datenbanken wie etwa PHP-Classes.org oder Hot-Scripts.com durchsucht?
Markus Wulftange
-
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.
-
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
Und hier mal ein Beispiel: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;
}
}
?>
Ach ja, ich hab jetzt diese PHP4-Version nicht getestet, sondern nur kurz das PHP5-Version angepasst.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);
?>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 von Friedrich Nietzsche
-
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:
es einwandfrei.PHP-Code:[...]
class tar
{
var $filename="test.tar";
var $filelist;
[...]
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
-
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 von Friedrich Nietzsche
-
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)
-
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 von Friedrich Nietzsche
-
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
-
Dateien packen bzw. archivieren
Von Julian-w im Forum .NET DatenverwaltungAntworten: 4Letzter Beitrag: 18.09.07, 19:06 -
packen von Dateien
Von Eddymaniac im Forum Linux & UnixAntworten: 5Letzter Beitrag: 01.10.06, 22:56 -
Batch: Ordner mit Unterordnern und Dateien archivieren und per ftp uploaden!
Von Lethal_Dark im Forum Coders TalkAntworten: 9Letzter Beitrag: 15.04.06, 15:44 -
SP2 und Dateien Archivieren
Von Robert Steichele im Forum Microsoft WindowsAntworten: 0Letzter Beitrag: 12.08.04, 07:18 -
Dateien automatisch archivieren
Von met im Forum 3D Studio MaxAntworten: 0Letzter Beitrag: 13.02.03, 13:53





Zitieren

Login






[PHP][Snippet] Array zu XML konvertieren