PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Suchen nach Dateien, schreiben in mysqlDB



heckmic
15.09.2006, 06:52
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?

hwj
15.09.2006, 09:41
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

heckmic
15.09.2006, 10:09
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

hwj
15.09.2006, 15:17
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

heckmic
15.09.2006, 19:04
Jau, das geht! Danke!

Wolfgang
15.09.2006, 19: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

heckmic
15.09.2006, 22:43
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?

Xanti
16.09.2006, 08:44
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

heckmic
16.09.2006, 09:53
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.