SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Webseiten professionell erstellen

Webseiten professionell erstellen zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP Grundlagen

PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 29.04.2004, 15:23:31
Ernest Ernest ist offline
Anfänger
 
Registriert seit: Apr 2004
Beiträge: 22
Ordner nach dateinamen erstellen und sortieren

Hallo,
ich benötige eine script welches dateien in einem ordner ausliest, dann aus dem dateinamen einen ordner erstellt und alle dateine die ähnliche namen haben in das verzeichniss verschiebt.
Es gibt von jeder Datei mehrere versionen,
die namen sind bis zur ersten runden oder eckigen klammer gleich.

meine fotos (1 von 3) [mallorca].jpg

ihre fotos [mallorca] (1999).jpg

so das ich am ende einen ordner mit meine fotos habe und einen mit ihren.

Die Files liegen auf einem lokalen rechner, der apache auf einem anderen.


danke

Geändert von Ernest (29.04.2004 um 15:34:44 Uhr)
Mit Zitat antworten
  #2  
Alt 29.04.2004, 16:16:49
bazubi bazubi ist offline
Junior Member
 
Registriert seit: Jan 2004
Beiträge: 496
Das Posting "an alle User " hast Du ja bestimmt gelesen und da ist Dir folgender Satz bestimmt aufgefallen.

Zitat:
Srciptwünsche haben hier nichts verloren, dafür gibt es mehr als genug Scriptarchive im Web.
Folglich willst Du ja gar nicht das Dir jemand ein Script schreibt sondern hast schon selber eins geschreiben das auch beinahe funktioniert - nur eben noch nicht ganz.

Deshalb würde ich sagen poste doch mal Dein Script in seiner jetzigen Form!
Mit Zitat antworten
  #3  
Alt 30.04.2004, 00:15:09
Ernest Ernest ist offline
Anfänger
 
Registriert seit: Apr 2004
Beiträge: 22
ok, hast recht hab ich wohl übersehen, sorry.

Geändert von Ernest (30.04.2004 um 09:33:32 Uhr)
Mit Zitat antworten
  #4  
Alt 30.04.2004, 00:52:32
Ernest Ernest ist offline
Anfänger
 
Registriert seit: Apr 2004
Beiträge: 22
hiermit siehts besser.

PHP-Code:
<?PHP
$verz
=opendir ('/media/sda5/backup/test/1/');
while (
$file readdir ($verz)) {
    
    
    
$file ereg_replace ("([)(.*)","",$file);
    
$file ereg_replace ("(()(.*)","",$file);
    
mkdir("/media/sda5/backup/test/1/$file",0700);
    echo 
$file 
    echo 
"<br>";
    }
closedir($verz); 
?>
ich würd gerne einfügen das er nur dateien mit einer bestimmten endung nutzt und bei doppelten dateinamen er wirklich nur eins erstellen will.
jetzt die dateien noch verschieben dann ists super

Geändert von Ernest (30.04.2004 um 00:57:33 Uhr)
Mit Zitat antworten
  #5  
Alt 30.04.2004, 09:17:20
bazubi bazubi ist offline
Junior Member
 
Registriert seit: Jan 2004
Beiträge: 496
Dateien verschieben kannst Du nur indem Du sie zuerst kopierst (copy()) und anschließend löschst (unlink()) einen move() Befehlt gibts meines wissens nicht.

Die Dateiendung kannst Du folgendermaßen rausbekommen.

PHP-Code:
$endung substr($filestrrpos('.'), strlen($endung)); 
Hab Dein Script mal etwas korrigiert. Hab ein paar kontrollen eingebaut (damit keine Ordner geöffnet werden und das die Dateien kopiert werden.

PHP-Code:
<?PHP

$erlaubte_endungen 
= array();
$erlaubte_endungen[] = 'jpg';

$verz=opendir ('/media/sda5/backup/test/1/');

while (
$file readdir ($verz)) {



if (
is_file('/media/sda5/backup/test/1/' $file) && $file != '.' && $file != '..') {

$endung strtolower(substr($filestrrpos('.'), strlen($endung)));

if (
in_array($endung$erlaubte_endungen)) {

    
$filenew file;
    
$filenew ereg_replace ("([)(.*)","",$filenew);

    
$file ereg_replace ("(()(.*)","",$filenew);

    
mkdir("/media/sda5/backup/test/1/$filenew",0700);

if(
copy('/media/sda5/backup/test/1/' $file'/media/sda5/backup/test/1/' $filenew '/' $filenew)) {

unlink('/media/sda5/backup/test/1/' $file);

echo 
'Datei: ' $file ' verschoben';

} else {

echo 
'Datei: ' $file ' nicht verschoben';

}

    echo 
"<br>";
}
}

    }

closedir($verz); 

?>
Allgemein könnte es problematisch werden da Du ja das Verzeichnis einerseits ausließt und gleichzeitig wieder hinschreibst und somit den auszulesenden Inhalt wieder änderst. Musst Du mal testen ob es trotzdem hinhaut.
Mit Zitat antworten
  #6  
Alt 30.04.2004, 09:47:19
Ernest Ernest ist offline
Anfänger
 
Registriert seit: Apr 2004
Beiträge: 22
sieht ganz gut aus,
krieg nur folgende meldung:
Warning: Wrong parameter count for strrpos() in /srv/www/htdocs/phpkram/test4.php on line 10

Wird das scipt alle in kleinschreibung umwandelnm wegen dem strtolower?

danke soweit

Edit: das mit dem selben verzeichniss muss nicht sein.
Kann man mit sowas auch lokale Ordner bearbeiten, eher unwahrscheinlich, oder?

Ich hab das erstmal ohne den endungscheck durchlaufen lassen und bei einer grossen datenmenge folgende meldung bekommen.

Fatal error: Maximum execution time of 30 seconds exceeded in test3.php on line 12.
ich kann das ja ohne probleme hochschrauben, ressourcen sidn genug da

Geändert von Ernest (30.04.2004 um 11:14:28 Uhr)
Mit Zitat antworten
  #7  
Alt 30.04.2004, 12:31:59
Ernest Ernest ist offline
Anfänger
 
Registriert seit: Apr 2004
Beiträge: 22
PHP-Code:
<?PHP
$pfad
="G:/grafik/#/";
echo 
$pfad;
$verz=opendir ($pfad);
while (
$file readdir ($verz)) {
    echo 
$file;

    
$file2 ereg_replace ("([)(.*)","",$file);
    
$file2 ereg_replace ("(()(.*)","",$file2);
    
$file2=trim($file2);
    
mkdir("$pfad$file2",0777);
    
copy($pfad $file$pfad $file2 '/' $file);
    
unlink($pfad $file);
    }
closedir($verz); 
?>
so isses schoen

Geändert von Ernest (30.04.2004 um 14:06:23 Uhr)
Mit Zitat antworten
  #8  
Alt 30.04.2004, 13:01:26
bazubi bazubi ist offline
Junior Member
 
Registriert seit: Jan 2004
Beiträge: 496
Der erste Fehler (wrong parameter count) lag daran, dass ich vergessen hatte $file noch als zusätzlichen Parameter an strrpos zu übergeben.

Das strtolower hatte ich eingebaut, damit der Vergleich auf die Endung jpg auch dann passt wenn die Datei z.B. xyz.JPG (also die Endung groß geschrieben) lautet.

Du kannst damit auch Ordner bearbeiten (also verschieben) allerdins wird das ein wenig komplizierter weil dann jeden Unterordner rekursiv verschieben musst (also alle Unterordner und Dateien in den Ordner mit verschieben).
Mit Zitat antworten
  #9  
Alt 30.04.2004, 14:05:41
Ernest Ernest ist offline
Anfänger
 
Registriert seit: Apr 2004
Beiträge: 22
würde die zeile dann so aussehen?
PHP-Code:
$endung strtolower(substr($filestrrpos($file'.'), strlen($endung))); 
$endung = strtolower(substr($file, strrpos($file'.'), strlen($endung)));

ich hab das ganze in eine a bis z schleife gepackt,
PHP-Code:
?PHP

foreach (range('a''z') as $letter) {

    
$pfad="G:/grafik/test/$letter/";
//    echo $pfad;
//    echo "<br>";
    
$verz=opendir ($pfad);
    while (
$file readdir ($verz)) 
    {
        
    
        
$file2 ereg_replace ("([)(.*)","",$file);
        
$file2 ereg_replace ("(()(.*)","",$file2);
        
$file2=trim($file2);
        
mkdir("$pfad$file2",0777);
        
copy($pfad $file$pfad $file2 '/' $file);
    
//    unlink($pfad . $file);
    //    echo $file;
    
    
}
    
}
closedir($verz); 
?> 
das einzige ist das man das ganze nur einmal ausführen darf sonst erstellt er dateien die den ordnernamen gleichen.
Daher ist das mit der endung schon vernünftig
Mit Zitat antworten
  #10  
Alt 30.04.2004, 15:42:46
bazubi bazubi ist offline
Junior Member
 
Registriert seit: Jan 2004
Beiträge: 496
Zitat:
PHP-Code:

$endung 
strtolower(substr($filestrrpos($file'.'), strlen($endung))) 
Fast. Da fehlt noch ein komma zwischen $file und '.' bei strrpos.
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:18:49 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt