perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 27
Click for quality!




11.02.2012 / 13:05

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Suchanfragen für Scripts/Programmierung zur Themenübersicht Themensuche Themenansicht in Thread-Modus


Beitrag6500 Bilder aufteilen und Zippen?
Seitenanfang
Hallo

Bin hier nach Langer Suche gelandet ;) und hoffe dass ihr weiterwisst.

Es geht darum dass ich in eine Gallery BIlder hochladen möchte.

Die begrenzung beim Hochladen der Bilder liegt bei etwa 50 Bilder pro Zip. Wenn man mehr in die Zip macht bricht der Server die Verbindung ab.

Jetzt hab ich die 6500 Bilder und würde sie gerne Zippen! Jede Zip sollte ca. 50 Bilder beinhalten.

img1.zip a 50 bilder
img2.zip a 50 bilder
img3.zip a 50 bilder
...usw

Es würde ja schon eine grosse Hilfe sein wenn die Bilder in Ordner aufgeteilt würden. Wenn das mit den Zippen unmöglich ist.

Danke & Gruss

Datum: 15.01.2009-00:19

Beitragre: 6500 Bilder aufteilen und Zippen?
Seitenanfang
Keine Ahnung was genau du gesucht hast (Hilfestellung oder Script), normalerweise wuerde ich die Dokumentationen zu den Modulen auflisten und ein paar kleine Hinweise zum Umgang geben.
Archive::Zip ist aber fuer einen Perl-Beginner nicht unbedingt leicht zu verstehen, deshalb hier ein schnell zusammengehacktes Beispielscript.

#!/usr/bin/perl

use strict;
use warnings;

use DirHandle;

use Archive::Zip qw( AZ_OK );

my $image_dir_path = "/path/to/images";

my $image_dir_h = DirHandle->new;

if($image_dir_h->open($image_dir_path))
{
chdir($image_dir_path) or die $!;

my $zip = Archive::Zip->new;

my $item_counter = 0;
my $zip_counter = 0;

while(defined(my $dir_item = $image_dir_h->read)) {
next unless $dir_item =~ m/\.jpg$/;

$zip->addFile($dir_item);

$item_counter++;

if(($item_counter % 50) == 0) {

$zip = Archive::Zip->new;
$zip_counter++;
}
}

unless( $zip->writeToFileNamed("tmp_${zip_counter}.zip") == AZ_OK ) {
die "Can't write zip file\n";
}

$image_dir_h->close() or warn $!;
}
else
{
die "Can't open directory '$image_dir_path': $!\n";
}

Datum: 15.01.2009-01:39

Beitragre: 6500 Bilder aufteilen und Zippen?
Seitenanfang
Moin

Wenn es das ist was ich such dann hops ich in die luft :)))

da ich aber keen plan habe was das ist und nur das dumme html und etwas php kann. ist hier echt nachdenken angesagt;)

gut ich hab mich gleich auf die suche gemacht wie man ein perl script startet.

1. bin hier gelandet www.activestate.com
2. installier hab ich > ActivePerl-5.10.0.1004-MSWin32-x86-287188.msi
3. das script in eine txt gepackt > umbennant in imgzip.pl und in das .../perl/bin/ verzeichniss kopiert.
4. my $image_dir_path = "c:\images"; (angepasst und in ordner c:\images die bilder reingeschoben)
5. perl.exe gestartet und imgzip.pl eingetragen und ENTER

passiert nix ^^ .. so viel zu meinen versuch das erste script zum laufen zu bekommen.

-----------------------------------

C:\Perl\bin\wperl.exe -x "C:\Perl\bin\ppm.bat"

das der pfad der verknüpfung auf meinem desktop.

da mir das aber nicht so recht gefällt.. hab ich die perl.exe in verzeichniss gestartet.

Datum: 15.01.2009-10:02

Beitragre: 6500 Bilder aufteilen und Zippen?
Seitenanfang
bin mir nicht sicher was man machen muss..

aber über cmd hab ich es versucht.

----------------------------------------------

Microsoft Windows [Version 6.0.6001]
Copyright (c) 2006 Microsoft Corporation. Alle Rechte vorbehalten.

C:\Users\kkk>cd..

C:\Users>cd..

C:\>cd perl

C:\Perl>cd bin

C:\Perl\bin>perl imgzip.pl
Unrecognized escape \i passed through at imgzip.pl line 10.

C:\Perl\bin>

Datum: 15.01.2009-10:12

Beitragre: 6500 Bilder aufteilen und Zippen?
Seitenanfang
>> C:\Perl\bin>perl imgzip.pl
>> Unrecognized escape \i passed through at imgzip.pl line 10.

Bei Pfaden musst du aufpassen, ein Backslash hat eine besondere Bedeutung, er leitet eine Escapesequenz ein (\n => Newline, \t => Tab).
Ein Backslash dem ein Backslash vorangestellt ist wird wie ein einzelner Backslash behandelt.


my $image_dir_path = "C:\\images";
# oder
my $image_dir_path = "C:/images";

Die Datei "imgzip.pl" muss nicht im \Perl\bin\ Verzeichnis liegen, die kannst du zum Beispiel auch auf'm Desktop haben. In der Eingabeaufforderung wechselst du dann einfach zum Desktop-Verzeichnis und startest perl gefolgt vom Scriptdateinamen als Argument.


C:\> cd C:\Dokumente und Einstellungen\Benutzer\Desktop

C:\Dokumente und Einstellungen\Benutzer\Desktop\> perl imgzip.pl

>> C:\Perl\bin\wperl.exe -x "C:\Perl\bin\ppm.bat"

Wie kommst du denn dazu?
PPM ist der Perl Package Manager, den brauchst du wenn du Module wie Archive::Zip installieren moechtest.
Gestartet werden die Batchdatein aber einfach durch Aufruf der Datei, dazu benoetigst du kein Perl


C:\> C:\Perl\bin\ppm.bat
# oder einfach nur
C:\> ppm

>> da ich aber keen plan habe was das ist und nur das dumme html und etwas php kann. ist hier echt nachdenken angesagt;)

Bei PHP ist das mit dem Zippen aehnlich: http://de3.php.net/zip

Das Script von oben koennte man auch leicht nach PHP umschreiben, da wuerde sich nicht allzuviel aendern.

Datum: 15.01.2009-12:52

Beitragre: 6500 Bilder aufteilen und Zippen?
Seitenanfang
Hallo

hab jetzt echt rumversucht ..

blick es aber doch nicht :D

es wird NUR eine tmp_4.zip erstellt mit einem bild drin ..

hab ein screenshot gemacht :)

http://kjno.net/perl.jpg

www.kjno.net/perl.jpg

danke dir :))))))))) bis jetz schon

Datum: 16.01.2009-14:58

Beitragre: 6500 Bilder aufteilen und Zippen?
Seitenanfang
>> es wird NUR eine tmp_4.zip erstellt mit einem bild drin ..

Da sind 4 Zeilen beim Kopieren abhanden gekommen


if(($item_counter % 50) == 0) {

unless( $zip->writeToFileNamed("delete_${zip_counter}.zip") == AZ_OK ) {
die "Can't write zip file\n";
}

$zip = Archive::Zip->new;
$zip_counter++;
}
}

Datum: 17.01.2009-11:24

Beitragre: 6500 Bilder aufteilen und Zippen?
Seitenanfang
:))) .. wer hätte das wissen können *g*

hab den code ganz unten eingefügt bekomm aber fehler.

-------------------------------------------

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\Dokumente und Einstellungen\Administrator>cd..

C:\Dokumente und Einstellungen>cd..

C:\>cd perl

C:\perl>cd bin

C:\perl\bin>perl zip.pl
Global symbol "$item_counter" requires explicit package name at zip.pl line 50.
Global symbol "$zip" requires explicit package name at zip.pl line 52.
Global symbol "$zip_counter" requires explicit package name at zip.pl line 52.
Global symbol "$zip" requires explicit package name at zip.pl line 56.
Global symbol "$zip_counter" requires explicit package name at zip.pl line 57.
Unmatched right curly bracket at zip.pl line 59, at end of line
syntax error at zip.pl line 59, near "}"
Execution of zip.pl aborted due to compilation errors.

HIER HAB ICH DAS } GANZ UNTEN WEGGEMACHT.

C:\perl\bin>perl zip.pl
Global symbol "$item_counter" requires explicit package name at zip.pl line 49.
Global symbol "$zip" requires explicit package name at zip.pl line 51.
Global symbol "$zip_counter" requires explicit package name at zip.pl line 51.
Global symbol "$zip" requires explicit package name at zip.pl line 55.
Global symbol "$zip_counter" requires explicit package name at zip.pl line 56.
Execution of zip.pl aborted due to compilation errors.

C:\perl\bin>

-----------------------------------

#!/usr/bin/perl

use strict;
use warnings;

use DirHandle;

use Archive::Zip qw( AZ_OK );

my $image_dir_path = "C:\\images";

my $image_dir_h = DirHandle->new;

if($image_dir_h->open($image_dir_path))
{
chdir($image_dir_path) or die $!;

my $zip = Archive::Zip->new;

my $item_counter = 0;
my $zip_counter = 0;

while(defined(my $dir_item = $image_dir_h->read)) {
next unless $dir_item =~ m/\.jpg$/;

$zip->addFile($dir_item);

$item_counter++;

if(($item_counter % 50) == 0) {

$zip = Archive::Zip->new;
$zip_counter++;
}
}

unless( $zip->writeToFileNamed("tmp_${zip_counter}.zip") == AZ_OK ) {
die "Can't write zip file\n";
}

$image_dir_h->close() or warn $!;
}
else
{
die "Can't open directory '$image_dir_path': $!\n";
}

if(($item_counter % 50) == 0) {

unless( $zip->writeToFileNamed("delete_${zip_counter}.zip") == AZ_OK ) {
die "Can't write zip file\n";
}

$zip = Archive::Zip->new;
$zip_counter++;
}
}

Datum: 17.01.2009-12:48

Beitragre: 6500 Bilder aufteilen und Zippen?
Seitenanfang
Der sollte nicht ans Ende sondern mitten in den Code, vergleiche vorhergenden Code mit dem hinzuzufuegenden.

Datum: 17.01.2009-13:14

Beitragre: 6500 Bilder aufteilen und Zippen?
Seitenanfang
PERFEKT !!!

delete_0.zip
delete_1.zip
delete_2.zip
delete_3.zip
tmp_4.zip ( die restlichen werden hier aufgelistet)

sonst hat jede zip 50 bilder :)

TOP TOP .. danke sehr :))))

ist das geil .. freu mich riesig !!

daumenhoch! .. da haben echt so viel dran versagt in anderen foren ;)

Datum: 17.01.2009-13:24

Beitragre: 6500 Bilder aufteilen und Zippen?
Seitenanfang
hab mir erlaubt ein faq zu dem script zu schreiben ^^ ist für neulinge wie mich mit dem theme perl ;) .. vll. findet das der eine oder andere gut.

http://kjno.net/bilder-teilen-und-zippen

Datum: 18.01.2009-23:41

-






-
-