Jörg Reinholz: Moment!

Beitrag lesen

Moin!

Ich sags mal so. Programmieren ist

  • "englisch für arme"
  • nicht "spannend"
  • eine Sache für "in Verwaltung" talentierte Heinis.
  • nichts für den der eher ein Künstler ist.
<?php
function specialJnnboCopy($sourceDirAndFileName, $targetDir=false, $errorType=E_USER_ERROR) {

   # Prüfungen und Fehlerbehandlung
   if (!  file_exists($sourceDirAndFileName) ) {
      trigger_error ( "Eine nicht existierende Datei $sourceDirAndFileName kann nicht kopiert werden." , $errorType );
      return false; # Falls  trigger_error mit E_USER_NOTICE erfolgt.
   }

   if (!  is_readable($sourceDirAndFileName) ) {
      trigger_error ( "Eine nicht lesbare Datei $sourceDirAndFileName kann nicht kopiert werden." , $errorType );
      return false; # Falls  trigger_error mit E_USER_NOTICE erfolgt.
   }


   if (! $targetDir) { # Wurde es gesetzt? Wenn nicht ist target-Dir = source-Dir:
      $targetDir=dirname($sourceDirAndFileName); # gleiches Zielverzeichnis wie Quelle
   }

   # Prüfung, ob $targetDir existiert und beschreibbar ist:

   if (! file_exists($targetDir) ) {
      trigger_error ( "In ein nicht existierendes Verzeichnis $sourceDirAndFileName kann nicht kopiert werden." , $errorType );
      return false; # Falls  trigger_error mit E_USER_NOTICE erfolgt.
   }

   if (!  is_writable($targetDir) ) {
      trigger_error ( "In ein nicht beschreibbares Verzeichnis $sourceDirAndFileName kann nicht kopiert werden." , $errorType );
      return false; # Falls  trigger_error mit E_USER_NOTICE erfolgt.
   }


   $fileExt = array_pop( exlode('.', $sourceDirAndFileName) ); # Dateinamens"erweiterung"
   $bol = true;

   while ( $bol ) {
      $targetDirAndFileName = $targetDir . '/' . microtime(true) . '.' . $fileExt ; #Zeit als float)
      if (! file_exists( $targetDirAndFileName ) ) {
      # So lang es den Name schon gibt holen wir einfach einfach einen neuen ...
         $written = copy ( $sourceDirAndFileName,  $targetDirAndFileName);
         $bol = false;
      }
   }

   if ($written) {
      # Du willst den Name?
      return $targetDirAndFileName;
      # alternativ: Array aus Name und Größe
      # return array($targetDirAndFileName, filesize ($targetDirAndFileName);
   } else {
      trigger_error ( "Das Kopieren von $sourceDirAndFileName nach $targetDirAndFileName schlug aus einem nicht berücksichtigtem Grund fehl." , $errorType);
      return false; # Falls  trigger_error als Notice erfolgt.
   }
}

Jörg Reinholz