Sahra: copy bestimmte dateien ausschliessen

Hallo,

ich habe da mal eine Frage.

  
function copyall( $source, $target ){  
	if(is_dir($source)){  
		@mkdir($target,0775);  
		$old = umask(0);  
		chmod($target, 0777);  
		umask($old);  
		$d = dir( $source );  
		while(FALSE !== ($entry = $d->read())){  
			if ( $entry == '.' || $entry == '..' ){  
				continue;  
			}  
			$Entry = $source . '/' . $entry;  
			if (is_dir($Entry )){  
				copyall( $Entry,$target.'/'. $entry);  
				continue;  
			}  
			copy($Entry,$target.'/'.$entry);  
		}  
		$d->close();  
	}else{  
		copy( $source, $target );  
	}  
}  

geht sehr gut. Mache Dateien sollen aber nicht kopiert werden. Z.B. 1.jpg.over_13_44_57_07_10_09. Jetzt kann man allgemein sagen alle Dateien die zwei Punkte im Namen haben. copy scheint mir aber uneingeschränkt alles zu kopieren. Also wie kann ich vorgehen?

Bis dann
Sahra

  1. Hihi,

    ich nochmal. $entry enthält den Dateinamen. Also fix ne kleine Abfrage um das copy rum und das Ding rockt wieder.

    Cucu
    Sahra

  2. Hello Sahra,

    function copyall( $source, $target ){
    if(is_dir($source)){
    @mkdir($target,0775);
    $old = umask(0);
    chmod($target, 0777);
    umask($old);
    $d = dir( $source );
    while(FALSE !== ($entry = $d->read())){
    if ( $entry == '.' || $entry == '..' ){
    continue;
    }
    $Entry = $source . '/' . $entry;
    if (is_dir($Entry )){
    copyall( $Entry,$target.'/'. $entry);
    continue;
    }
    copy($Entry,$target.'/'.$entry);
    }
    $d->close();
    }else{
    copy( $source, $target );
    }
    }

    
    >   
    > geht sehr gut. Mache Dateien sollen aber nicht kopiert werden. Z.B. 1.jpg.over\_13\_44\_57\_07\_10\_09. Jetzt kann man allgemein sagen alle Dateien die zwei Punkte im Namen haben. copy scheint mir aber uneingeschränkt alles zu kopieren. Also wie kann ich vorgehen?  
      
    Es wird eine längere Geschichte, also lies bitte genau und bis zum vorläufigen Ende:  
      
    Copy() kopiert immer nur genau die eine einzige Datei, die Du der Funktion in Auftrag gibst.  
    Das Problem liegt also bei der Selektion der Liste der zu kopierenden Dateien und der anzulegenden Verzeichnisse.  
      
    Deine Funktion soll rekursiv arbeiten. Das wirft in den hier üblichen Verzeichnissystemen von Windows und Linux schon mal ein Problem auf: Es gibt Links auf Verzeihnisse, die von der Funktion is\_dir() nicht gesondert erkannt werden. Dazu ist ein zusätzliches is\_link() notwendig. Links können zur unendlichen Rekursion (Zyklischer Verlauf) führen.  
      
    Du solltest also Deine bisher kompakt erscheinende unbrauchbare Funktion in mehrere Funktionen oder, aufgrund des beschränkten Sprachumfanges von PHP (bezüglich privater Funktionen...), in mehrere (private) Methoden einer eigenen Klasse, zerlegen.  
      
    Lass ein Array bilden oder eine Datei, wenn es zuviele Elemente werden:  
      
    - Eine Methode sammelt die Verzeichnisse ein und verhindert zyklische Verläufe  
    - Eine Methode prüft die Lesbarkeit und entfernt alle nicht lesbaren Verzeichnisse  
      unter Erzeugung eines Logs, das eine andere Methiode schreibt  
    - eine Methode sammelt alle Dateien jedes gelisteten verzeichnisses ein  
    - eine Mehtode prüft die Lesbarkeit dieser Dateien  
    - eine Methode legt die anzulegenden Verzeichnisse an  
      (unter ständiger Berücksichtigng der Beschreibbarkeit des Datenträögers)  
    - eine Methode legt die anzulegenden dateien in den Verzeichnisse an  
      (unter ständiger Berücksichtigng der Beschreibbarkeit des Datenträögers)  
      
      
    So ungefähr kann es funktionieren.  
      
    Siehe dazu auch:  
      
    <http://forum.de.selfhtml.org/archiv/2008/10/t177687/#m1170792>  
    <http://forum.de.selfhtml.org/archiv/2007/12/t163759/#m1066568> und Folegepostings  
      
      
      
      
      
      
    Liebe Grüße aus dem schönen Oberharz  
      
      
    Tom vom Berg  
    ![](http://selfhtml.bitworks.de/Virencheck.gif)  
      
    
    -- 
    Nur selber lernen macht schlau  
    <http://bergpost.annerschbarrich.de>