Archiv verlassen und diese Seite im Standarddesign anzeigen : Suchen nach Dateien, schreiben in mysqlDB
Hallo,
mir stellt sich folgendes Problem:
Ich habe Dateien (*.vdr) in einem bestimmten Ordner /.../tv/
Die Pfade zu den Dateien würde ich gerne in eine Datenbank schreiben, sodass ich diese in einer Weboberfläche verwenden kann.
Ich möchte eine GUI bauen, die es vereinfacht die Filme in DVD, HALF-DVD, VCD, SVCD zu konvertieren. Der anwender soll außerdem einen Zeitpunkt für die Konvertierung der Files eingeben können.
Also: Wie kann ich die Pfade zu den Files in eine DB schreiben (am liebsten PHP) UND wie kann ich Systembefehle über PHP ausführen?
Hört sich nach einer Auftragsprogrammierung an, wo darf ich die Rechnung hinschicken ?:D
Ich würde es mal so starten:
find /pathtovdr -name "*.vdr" -print |
perl -e 'while(<>) {
chop;
print "insert into FilenameTable values (\047$_\047);\n";
}' |
mysql -p databasename
Leerzeichen oder Sonderzeichen im Pfad/Dateiname lasse ich mal als Hausaufgabe.
Heiko
Ne, das bekomme ich grade noch so hin. Mir fällt das jetzt nur mit dem Dateizugriff schwehr. Ich weiß trozdem jetzt nicht so recht, wie ich das nun in die DB bekomme...
Ausgabe sieht schonmal so aus:
/mnt/ftp/tv/Jackass#3A_The_Movie/2006-09-09.23.37.99.99.rec/001.vdr
/mnt/ftp/tv/Jackass#3A_The_Movie/2006-09-09.23.37.99.99.rec/002.vdr
Die Datenbank heißt vdr, die Tabelle recs und die Spalten recid,pfad
Das Script:
find /mnt/ftp/tv -name "0*.vdr" -print |
perl -e 'while(<>) {
chop;
print "insert into recs values (\047$_\047);\n";
}' |
mysql -p --user=******** --password=******** vdr
Das ist die Fehlermeldung: ERROR 1136 (21S01) at line 1: Column count doesn't match value count at row 1
Hm, das ist klar, woher soll ich aus wissen, wie Deine Datenbanktabelle ausschaut ...
Du mußt jetzt das kleine Perl-Skript so erweitern, das der SQL-Code, der da rauskommt mit der Datenbank verträglich ist. Vermutlich ist die "recid" eine "primary key / auto_increment" - Spalte, dann kann man "null" einfügen. Dann müßte folgendes schon klappen:
find /mnt/ftp/tv -name "0*.vdr" -print |
perl -e 'while(<>) {
chop;
print "insert into recs values (null, \047$_\047);\n";
}' |
mysql -p --user=******** --password=******** vdr
Heiko
Wolfgang
15.09.2006, 18:18
Hallo
Im Grunde geht das mit Perl direkt, was sicher schneller ist.
use DBI;
use strict;
use File::Find;
my $data = "dbi:mysql:database=db_name";
my $user = "user";
my $pass = "geheim";
my $db = DBI->connect($data, $user, $pass)
or die "Verbindung zur Datenbank fehlgeschlagen: " . $DBI::errstr;
....
Gruß Wolfgang
Ok, jetzt ergibt sich für mich noch die Frage, warum auf der Konsole nur einfache phpscripte (ohne SQL) aufrufen kann (echo "test"; klappt). Ein mqsqlpconnect aber nicht
@Wolfgang: Wie würdest du das jetzt weitermachen? Ich meine die "..." also den Inhalt in de db schreiben?
Wie bekomme ich es hin, das er nur das, was dazugekommen ist reinschreibt? und das was nicht mehr da ist rauswirft?
Eine Beschreibung der Module findest Du hier:
http://search.cpan.org/~timb/DBI-1.52/DBI.pm.
http://search.cpan.org/~nwclark/perl-5.8.8/lib/File/Find.pm
Gruss, Xanti
Sorry, aber ich steige da nicht hinter! Ich habe noch niemals Perl Programmiert. Kann mir nicht jemand erklären wie das in php geht und warum sich meine phpscripte auf der Konsole nicht richtig ausführen lassen im Browser schon? Nur SQL anweisugen laufen auf der Konsole auf den Hammer.
Powered by vBulletin® Version 4.2.0 Copyright ©2013 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.