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
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden |
29.04.2004, 15:23:31
|
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)
|
29.04.2004, 16:16:49
|
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!
|
30.04.2004, 00:15:09
|
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)
|
30.04.2004, 00:52:32
|
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)
|
30.04.2004, 09:17:20
|
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($file, strrpos('.'), 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($file, strrpos('.'), 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.
|
30.04.2004, 09:47:19
|
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)
|
30.04.2004, 12:31:59
|
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)
|
30.04.2004, 13:01:26
|
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).
|
30.04.2004, 14:05:41
|
Anfänger
|
|
Registriert seit: Apr 2004
Beiträge: 22
|
|
würde die zeile dann so aussehen?
PHP-Code:
$endung = strtolower(substr($file, strrpos($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
|
30.04.2004, 15:42:46
|
Junior Member
|
|
Registriert seit: Jan 2004
Beiträge: 496
|
|
Zitat:
PHP-Code:
$endung = strtolower(substr($file, strrpos($file'.'), strlen($endung)))
|
Fast. Da fehlt noch ein komma zwischen $file und '.' bei strrpos.
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
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.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 21:44:51 Uhr.
|