Hallo,
ich programmiere gerade was in php,
bin aber eher ein amateur und stehe vor einem problem.
ich arbeite gerade an einer php funktion, welche
mit ordnerbasiert zip files von jpg files ausgibt.
besonderheit ist, das es nur bestimmte ordner sein sollen (siehe script).
die funktion durchsucht rekursiv eine ordnersturktur,
und gibt mir per echo die filenames alle sauber aus.
nun möchte ich die filenames an ein aaray übergeben,
welches außerhalb der function liegt.
da ich die ordnerdurchsuch funktion jedoch rekursiv nutze,
kann ich die outputs auch icht mit einem return machne da sonst di funktion ja aufhört
das ecterne array soll dann portionsweise inhalt
an eine zipfunktion übergeben kann um
ordnerbasiert zip-files zu erhalten.
(in den gesuchten ordner liegen immer 32 jpgs)
für jeden hinweis wäre ich sehr dankbar!
besten gruß,
marc
CODE:
<?php ############################################################################################################## required functions // trims off x chars from the front of a string // trims off y chars from the end of a string // replace "" by "" function trimString( $x, $y, $str ) { $edit = substr( $str, $x ); $edit1 = substr( $edit, 0, strlen( $edit ) - $y ); $return = str\_ireplace('','',$edit1); return $return; } // returns true if $str begins with $sub function beginsWith( $str, $sub ) { return ( substr( $str, 0, strlen( $sub ) ) == $sub ); } // return tru if $str ends with $sub function endsWith( $str, $sub ) { return ( substr( $str, strlen( $str ) - strlen( $sub ) ) == $sub ); } ############################################################################################################# # MAIN SCRIPT ############################################################################################################# // SETTINGS $fileDir = './SHAKE\_IMAGES/'; ############################################################################################################# // READOUT-DIRs - COLLECT FILEPATHs to an ARRAY $i=0; // schleifen-count $filearray = array("Banane","Apfel"); function getDirectory( $path = '.', $level = 0 ){ $ignore = array( 'cgi-bin', '.', '..', 'Step\_01', 'Step\_02', 'Thumbs.db', '.DS\_Store' ); // Directories to ignore when listing output. $dh = @opendir( $path ); // Open the directory to the handle $dh while( false !== ( $file = readdir( $dh ) ) ){ // Loop through the directory if( !in\_array( $file, $ignore ) ) // Check that this file is not to be ignored { if( is\_dir( "$path/$file") ) { // Its a directory, so we need to keep reading down... if( is\_dir( "$path/$file") && endsWith($file, "1150x423")) { #echo "**$file -\> folder matched 1150x423 resolution "; echo " directorylevel = $level "; getDirectory( "$path/$file", ($level+1) ); // Re-call this same function but on a new directory. // this is what makes function recursive. } elseif( is\_dir( "$path/$file") && endsWith($file, "2300x846")) { #echo "$file -\> folder matched 2300x846 resolution "; echo " directorylevel = $level "; getDirectory( "$path/$file", ($level+1) ); // Re-call this same function but on a new directory. // this is what makes function recursive. } else { echo "$file "; echo " directorylevel = $level "; getDirectory( "$path/$file", ($level+1) ); // Re-call this same function but on a new directory. // this is what makes function recursive. } } elseif ($level==3 && endsWith( $file, ".jpg" )) // $levels == 3 verhindert jpgs aufzunehmen die in überordnern vorkommen { echo "$file "; // Just print out the filename array\_push($filearray, $file); $i++; } } } #return($filearray); closedir( $dh ); // Close the directory handle } getDirectory($fileDir); array\_push($filearray, "peter"); echo " "; echo "ARRAY-CONTENT: "; for($e=0;$e";} foreach($filearray as $key =\> $value) { echo " "; print\_r("".$filearray[$key]." - ".$value." - ".$files[$key]." - ".$files[$value]); echo " "; } ############################################################################################################# // ZIPPING-FILES from Array // Archivklasse einbinden: require\_once ('archive.php'); // Objekt erzeugen. Das Argument bezeichnet den Dateinamen $zipfile= new zip\_file('test/Zipdatei.zip'); // Die Optionen $zipfile-\>set\_options(array ( # 'name' =\> "peter", 'storepaths' =\> "0", 'basedir' =\> "/", // Das Basisverzeichnis. Sonst wird der ganze Pfad von / an im Zip gespeichert. 'followlinks' =\> 0, // Symlinks sollen berücksichtigt werden 'inmemory' =\> 0, // Die Datei nur im Speicher erstellen 'level' =\> 9, // Level 1 = schnell, Level 9 = gut 'overwrite' =\> 1,// rw 'prepend' =\> "", // ordnerstruktur innerhalb der zip file erstellen e.g. "blub/bla/" -\> extracts to blub/bla/files.x 'recurse' =\> 1, // In Unterverzeichnisse wechseln // Wenn zu grosse dateien verarbeitet werden, kannes zu einem php memory error kommen // Man sollte nicht über das halbe memory\_limit (php.ini) hinausgehen 'maxsize' =\> 12\*1024\*1024 // Nur Dateien die add\_files(array("SHAKE\_IMAGES/Vito\_Kawa\_A1\_LH1/C01\_Brillantsilber/JPEG\_aus\_Shake\_1150x423/\*.jpg")); // Archiv erstellen #$zipfile-\>create\_archive(); ?\> ############################################################################################################### ############################################################################################################### ############################################################################################################### ############################################################################################################### gibt mir folgendes aus: "..." Vito\_Kawa\_A1\_LH1 directorylevel = 0 C01\_Brillantsilber directorylevel = 1 directorylevel = 2 Vito\_Kawa\_A1\_LH1\_C01\_Brillantsilber\_001.jpg Vito\_Kawa\_A1\_LH1\_C01\_Brillantsilber\_002.jpg Vito\_Kawa\_A1\_LH1\_C01\_Brillantsilber\_003.jpg Vito\_Kawa\_A1\_LH1\_C01\_Brillantsilber\_004.jpg Vito\_Kawa\_A1\_LH1\_C01\_Brillantsilber\_005.jpg Vito\_Kawa\_A1\_LH1\_C01\_Brillantsilber\_006.jpg . . . Vito\_Kawa\_A1\_LH1\_C01\_Brillantsilber\_032.jpg "..." ARRAY-CONTENT: Banane Apfel peter sdfsdf Banane - Banane - - Apfel - Apfel - - peter - peter - - sdfsdf - sdfsdf - - - - - ############################################################################################################### ############################################################################################################### ############################################################################################################### ############################################################################################################### ich kann das array bearbeiten, ausßerhalb der funktion, aber nicht innerhalb der funktion, was ist den falsch ? thx in advance.**