Archiv verlassen und diese Seite im Standarddesign anzeigen : Zip entpacken ohne zip() ?!
tomtherock 15-09-2006, 09:41 Hi,
hab ein schönes uploadscript für eine Bildergalerie geschrieben,
das Bilder ohne Probleme schön über ftp() hochläd.
Nun habe ich eine Überprüfung eingebaut wenn man eine .zip datei
hochläd das dieser dann entpackt werden soll und in einer Schleife
jede Datei darin lesen soll und in ein bestimmtes verzeichnis entpacken
soll.
Mein Problem ist das ich nur
BZip2 Version 1.0.2, 30-Dec-2001
zur Verfügung hab :(
Wollte auch schon diese class benutzen:
http://www.php-resource.de/forum/showthread.php?s=&threadid=15186&perpage=15&highlight=zip%20entpacken&pagenumber=1
aber irgendwie bringt der mit
immer folgendes:
Fatal error: Call to a member function on a non-object in /homepages/3/d100725797/htdocs/tts_fussballschule/galerie/admin/inc_upload.php on line 16
Kennt von Euch jemand ne gute Klasse die ich benutzen könnte?
Gruß
Tom
Shurakai 15-09-2006, 09:57 Was steht denn auf Zeile 16...?
tomtherock 15-09-2006, 10:00 foreach ($_FILES as $file) {
// Wenn ein Zip File dann entpacken
IF(eregi("^.*(.zip)$", $file['name']))
{
echo $file['name']." ist eine zip Datei!";
require("inc_zipclass.php");
$example->extractfile($file['tmp_name']); // Zeile 16
printr ($example);
$ist_bild = "";
}
}[
Shurakai 15-09-2006, 10:04 Woher kommt denn $example? Du hast ja noch garkein Objekt erzeugt :)
Übrigens: Mach aus dem require mal ein require_once...
tomtherock 15-09-2006, 10:08 also das steht in der Anleitung der class:
SRY kenn mich mit klassen noch gar ned aus :(
/*------------------------------------------------------------
| To output files:
| $example->getdata();
| -returns file contents
|
| $example->filedownload($filename);
| -filename - the name to give the file that is being sent
|
| $example->filewrite($filename,$perms); // perms optional
| -filename - the name (including path) of the file to write
| -perms - permissions to give the file after it is written
+------------------------------------------------------------*/
/*------------------------------------------------------------
| To extract files (tar and gzip)
| $example->extract($data);
| -data - data to extract files from
| -returns an array containing file attributes and contents
|
| $example->extractfile($filename);
| -filename - the name (including path) of the file to use
| -returns an array containing file attributes and contents
|
| Both functions will return a string containing any errors
+------------------------------------------------------------*/
tomtherock 27-09-2006, 09:10 Also hab mich nach ein paar Tagen Pause mal wieder ranngehockt.
Wie es scheint muss ich die klasse irgendwie zum laufen bringen,
weil bei mir safemode aktiviert ist und daher exec, system nicht aktiviert....
das zip modul ist auch nicht installiert und kann auch nicht installiert
werden auf dem Webserver...
So ich hoffe mal ihr könnt mir bei dem ansprechen der zip_class ein
wenig helfen...
Mein Script macht im Moment nur folgendes schaut beim absenden des
Formulars nach ob es eine tar datei ist wenn ja, läd sie die datei in
meinen "img_import" Ordner...
so weit so gut jetzt soll er ja die datei da entpacken dazu benutz ich
folgenden Code:
foreach($_FILES as $file){
if(eregi(".*([.][tar])", $file['name']))
{
$ordner_img = "img"; // Orginalbilder
$ordner_import = "img_import"; // Tempordner für Bilder Import
$ordner_tmp = "img_tmp"; // Tempordner für Thumbnails
$serverroot = $_SERVER['DOCUMENT_ROOT'].'/bilder/galerie';
//Testfile heisst: test.tar
$pfad_put = $ziel_ftp.'/'.$ordner_import;
echo $file['name']." ist eine Zip-Datei!<br><br>";
//--------- FTP LOGIN & Upload -------
//herstellen der Verbindung
$connect = ftp_connect($host,$port);
IF(!$connect) die ("FTP Verbindungsaufbau gescheitert, ");
//Einloggen mit Benutzername und Kennwort
$log = ftp_login($connect, $user, $pass);
IF(!$log) die ("FTP Login gescheitert, ");
// Wenn die Verbindung & der Login geklappt hat dann ausführung des Skriptes
// Verzeichniswechsel
ftp_chdir($connect,$pfad_put);
// File Upload
$trans = ftp_put($connect,$file['name'],$file['tmp_name'],FTP_BINARY);
IF(!$trans) die ("FTP Upload gescheitert, ");
ftp_quit($connect);
require_once("inc_zipclass.php");
$gezippt= new gzfile();
$content = $gezippt->extractfile($serverroot.'/'.$ordner_img.'/'.$ordner_import.'/'.$file['name']);
$tar = new tarfile();
$content = $tar->extract($content['data']);
foreach($content as $file_new)
{
$fp=fopen($serverroot.'/'.$ordner_img.'/'.$ordner_import.'/'."{$file_new['filename']}",'wb');
fwrite($fp,"{$file_new['data']}");
fclose($fp);
}
$ist_bild = "";
}
Leider macht der gar nix außer mir mein File hochzuladen :(
habs grad noch mit dem .gz file probiert kam wenigstens ja schon mal ne Fehlermeldung :huep:
DB77667.gz ist eine gz/tar Datei!
Warning: gzinflate() [function.gzinflate]: data error in /home/www/htdocs/thomas-reichelt.net/bilder/galerie/admin/inc_zipclass.php on line 359
LINE 359: data = gzinflate(substr($data,$offset,strlen($data)-8-$offset));
tomtherock 27-09-2006, 12:40 hat bisher noch keiner diese zip_class zum laufen gebracht?
-> http://www.php-resource.de/forum/showthread.php?s=&threadid=15186&perpage=15&highlight=zip%20entpacken&pagenumber=1
Komm echt nicht weiter :(...
tomtherock 29-09-2006, 13:17 Soooo endlich geschafft zwar mit einem anderer Zipclass aber es funzt super und mit minimal Anforderungen!!! Und vorallem ohne exec oder system oder zip :).
zip Class-> http://www.phpconcept.net/
in der Zip Class hab ich folgendes geändert:
// Pfad des Root Verzeichnis der Webspace Beispiel: /home/www/htdocs/rd-network.de/test
// Für Verzeichnisscripte mit PHP Befehlen Beispiel: f_open, f_nlist
$serverroot = $_SERVER['DOCUMENT_ROOT'].'/test/galerie';
$ordner_img = "img"; // Orginalbilder
$ordner_import = "img_import"; // Tempordner für Bilder Import
$ordner_tmp = "img_tmp"; // Tempordner für Thumbnails
// define( 'PCLZIP_TEMPORARY_DIR', '/temp/' );
// define( 'PCLZIP_TEMPORARY_DIR', 'C:/Temp/' );
define( 'PCLZIP_TEMPORARY_DIR', $serverroot.'/'.$ordner_img.'/'.$ordner_import.'/' );
hier mein Code:
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< zip datei >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
IF($speichern){
$ist_bild = 1;
//zip datei werden über ein formular hochgeladen
foreach($_FILES as $file){
if(eregi(".*([.][zip])", $file['name']))
{
$ordner_img = "img"; // Orginalbilder
$ordner_import = "img_import"; // Tempordner für Bilder Import
$ordner_tmp = "img_tmp"; // Tempordner für Thumbnails
$serverroot = $_SERVER['DOCUMENT_ROOT'].'/bilder/galerie';
$pfad_put = $ziel_ftp.'/'.$ordner_import;
echo $file['name']." ist eine ZIP Datei!<br><br>";
//--------- FTP LOGIN & Upload -------
//herstellen der Verbindung
$connect = ftp_connect($host,$port);
IF(!$connect) die ("FTP Verbindungsaufbau gescheitert, ");
//Einloggen mit Benutzername und Kennwort
$log = ftp_login($connect, $user, $pass);
IF(!$log) die ("FTP Login gescheitert, ");
// Wenn die Verbindung & der Login geklappt hat dann ausführung des Skriptes
// Verzeichniswechsel
ftp_chdir($connect,$pfad_put);
// File Upload
$trans = ftp_put($connect,$file['name'],$file['tmp_name'],FTP_BINARY);
IF(!$trans) die ("FTP Upload gescheitert, ");
// ENTPACKEN
require_once('inc_zipclass2.php');
$archive = new PclZip($serverroot.'/'.$ordner_img.'/'.$ordner_import.'/'.$file['name']);
if ($archive->extract() == 0) {
die("Error : ".$archive->errorInfo(true));
}
$archive = new PclZip($serverroot.'/'.$ordner_img.'/'.$ordner_import.'/'.$file['name']);
if ($archive->extract(PCLZIP_OPT_PATH, $serverroot.'/'.$ordner_img.'/'.$ordner_import) == 0) {
die("Error : ".$archive->errorInfo(true));
}
// ENDE ENTPACKEN
//danach Archiv löschen!
$delete = ftp_delete($connect,$file['name']);
IF(!$delete) die ("($file['name'])FTP delete gescheitert.<br>");
echo "<b>".$file['name']." wurde entpackt und wieder gelöscht die Bilder werden nun verarbeitet...</b><br>";
danach liegen die Bilder in dem Ordner img_import...danach kann man sie
ja wie ich zb einlesen lassen und dann umbennen in db abspeichern und in
nen Ordner verschieben. Jeder wie er´s eben braucht :).
Ich hoffe das ich einige damit helfen kann und ne lange such erspare :).
Grüße
Tom
|
|