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