Avatar billede clemmesbmw Nybegynder
20. april 2002 - 23:53 Der er 12 kommentarer og
3 løsninger

Fil-tjek-script

Jeg skal have lavet et script som tjekker om de filer som er gemt i en mySQL database også ligger i mapperne. Og hvis der ligger filer som ikke er gemt i databasen skal den skrive navnet på dem... (Altså 2 funktioner)
Mine filer bliver gemt under (via upload) /download/ og kategoriseret i mapper som /download/dk/ osv..
Der er en tabel i mysql databasen som hedder 'fil_navn' som den skal sammenligne med mapperne... Mappernes kategori hedder 'kat' i mysql databasen...

Håber det ka lade sig gøre, der skulle i hvert fald være nok point :]
Avatar billede well_r Nybegynder
21. april 2002 - 00:03 #1
$res = mysql_query("SELECT * FROM fil_navn order by kat ASC");
while ($row = mysql_fetch_array($res)){
if(!exist("./$row[kat]")){ print "$row[kat] findes <br>\n";}
else { print "$row[kat] findes <u>ikke</u><br>\n";}
}

den er ikke tjekket for fejl
men det er vel en metode?
Avatar billede well_r Nybegynder
21. april 2002 - 00:03 #2
ups
Avatar billede well_r Nybegynder
21. april 2002 - 00:04 #3
$res = mysql_query("SELECT * FROM fil_navn order by kat ASC");
while ($row = mysql_fetch_array($res)){
if(exist("./$row[kat]")){ print "$row[kat] findes <br>\n";}
else { print "$row[kat] findes <u>ikke</u><br>\n";}
}
Avatar billede clemmesbmw Nybegynder
21. april 2002 - 00:06 #4
Jamen tjekker den alle filer i databasen om de ligger i den mappe eller undermappe?

og hvad hvis der er en fil som ikke er i databasen? Kan du lave en funktion til det?
Avatar billede Slettet bruger
21. april 2002 - 01:11 #5
Her er et forslag til en løsning, du selv kan arbejde videre med:

<?
function getFileArray($directory) {
    # Henter rekursivt samtlige filer i $directory
   
    GLOBAL $fileArray;

    $handle = opendir($directory);
    while ($file = readdir($handle))
            $retVal[] = $file;
    closedir($handle);
    while (list($key, $val) = each($retVal)) {
        if ($val != "." && $val != "..") {
            if (is_dir($directory.$val))
                getFileArray($directory.$val."/");
            else
                $fileArray[] = $directory.$val;
        }
    }
    return $true;
}

function databaseCompare($directory) {
    # Sammenligner indhold af $fileArray med databasen. Eksisterer en fil fra $fileArray ikke i tabellen
      udskrives denne.
   
    GLOBAL $fileArray;

    # Henter alle filer i et format så de er direkte sammenlignelige med det i $fileArray indeholdte
    $result = mysql_query("SELECT CONCAT($directory, '/', filename) AS file FROM fil_navn");
   
    while ($array = mysql_fetch_array($result))
        $databaseFileArray[] = $array['file'];
    if (!in_array($fileArray[$i],  $databaseFileArray))
        echo "Filen: ".$fileArray[$i]. " eksisterer ikke i databasen";
}

getFileArray("download/");
databaseCompare("download/");
?>

Bemærk - utestet kode.
Avatar billede Slettet bruger
21. april 2002 - 11:25 #6
Hov, åbenlys fejl i databaseCompare funktionen, så her får du lige en ny version:

function databaseCompare($directory) {
    # Sammenligner indhold af $fileArray med databasen. Eksisterer en fil fra $fileArray ikke i tabellen
      udskrives denne.
   
    GLOBAL $fileArray;

    # Henter alle filer i et format så de er direkte sammenlignelige med det i $fileArray indeholdte
    $result = mysql_query("SELECT CONCAT($directory, '/', filename) AS file FROM fil_navn");
   
    while ($array = mysql_fetch_array($result))
        $databaseFileArray[] = $array['file'];
   
    for ($i = 0; $i < count($fileArray); $i++) {
        if (!in_array($fileArray[$i],  $databaseFileArray))
            echo "Filen: ".$fileArray[$i]. " eksisterer ikke i databasen";
    }
}
Avatar billede clemmesbmw Nybegynder
21. april 2002 - 13:03 #7
Jeg er ikke mester i php, vil du ik hjælpe lidt?
URL'en skal vel defineres på en måde?
og filnavnet skal jo bare trækkes ud af databasen som 'fil_navn'...
Avatar billede Slettet bruger
21. april 2002 - 18:44 #8
Hjælpe? Det er forhåbentligt, det jeg gør.

URL'en? Du kalder begge funktioner med det bibliotek du vil løbe igennem - her er det "download/"

Filnavnet bliver trukket ud af databasen som en samlet streng bestående af kataloget for filen + "/" + fil navnet. Således kan det sammenlignes med det, vi henter, når vi løber filerne igennem fra getFileArray().
Avatar billede clemmesbmw Nybegynder
25. april 2002 - 14:54 #9
Er dette så koden jeg skal prøve ??
  ************* -- ************
<?
function getFileArray($directory) {
    # Henter rekursivt samtlige filer i $directory
   
    GLOBAL $fileArray;

    $handle = opendir($directory);
    while ($file = readdir($handle))
            $retVal[] = $file;
    closedir($handle);
    while (list($key, $val) = each($retVal)) {
        if ($val != "." && $val != "..") {
            if (is_dir($directory.$val))
                getFileArray($directory.$val."/");
            else
                $fileArray[] = $directory.$val;
        }
    }
    return $true;
}


function databaseCompare($directory) {
    # Sammenligner indhold af $fileArray med databasen. Eksisterer en fil fra $fileArray ikke i tabellen
      udskrives denne.
   
    GLOBAL $fileArray;

    # Henter alle filer i et format så de er direkte sammenlignelige med det i $fileArray indeholdte
    $result = mysql_query("SELECT CONCAT($directory, '/', filename) AS file FROM fil_navn");
   
    while ($array = mysql_fetch_array($result))
        $databaseFileArray[] = $array['file'];
   
    for ($i = 0; $i < count($fileArray); $i++) {
        if (!in_array($fileArray[$i],  $databaseFileArray))
            echo "Filen: ".$fileArray[$i]. " eksisterer ikke i databasen";
    }
}
getFileArray("download/");
databaseCompare("download/");
?>
Avatar billede Slettet bruger
25. april 2002 - 16:12 #10
Ja.
Avatar billede Slettet bruger
27. april 2002 - 22:32 #11
Skrider det frem?
Avatar billede clemmesbmw Nybegynder
30. april 2002 - 22:05 #12
Jeg vil lige prøve at se på det i denne her weekend ...
Avatar billede Slettet bruger
14. maj 2002 - 17:37 #13
Gør noget med det her spørgsmål nu.
Avatar billede Slettet bruger
27. juni 2002 - 17:13 #14
Vi prøver igen. LUK spørgsmålet.
Avatar billede clemmesbmw Nybegynder
12. november 2002 - 16:21 #15
Ja vi lukker sgu lige spørgsmålet ...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester