Avatar billede asgrone Nybegynder
10. februar 2004 - 15:17 Der er 11 kommentarer

et script der sammeligner en database med et bibliotek

jeg har efterhånden fyldt min server op med overflødige filer. Min side er bygget op sådan at folk kan ulpoade forskellige typer filer til en database og til et bibliotek på webserveren. I databasen bliver bl.a. gemt hvad hver enkel fil heddder. Jeg har indtil nu været doven og kun slettet henvisningerne i databasen og ikke filerne i biblioteket, hvilket desvære har gjordt at jeg har fyldt min server op...
Så jeg tænkte på om man kunne lave et script der sammenligner en database med et bibliotek, og så sletter alle de filer der ikke er henvisning til fra databasen?
Er der nogen de har et bud??
Avatar billede detox Nybegynder
10. februar 2004 - 15:42 #1
En mulighed er at lave to array's med hhv. filer på serveren og filnavne fra databasen og så bruge array_diff() til at finde dem der ikke er i databasen. Dem kan du jo så slette med unlink().
Avatar billede detox Nybegynder
10. februar 2004 - 15:52 #2
En anden mulighed kunne være at lave et array med filnavne fra databasen og så slette dine filer i biblioteket med:

if (!in_array($entry, $array)) unlink($sti . "/" . $entry);
Avatar billede asgrone Nybegynder
10. februar 2004 - 16:22 #3
sletter jeg så ikke de filer der er i databasen?
Avatar billede detox Nybegynder
10. februar 2004 - 16:25 #4
Nej, der er jo et udråbstegn foran der betyder "ikke", men det var nok en idé først at lave en:

if (!in_array($entry, $array)) print($sti . "/" . $entry);

for at tjekke at det nu er de rigtige filer.
Avatar billede detox Nybegynder
10. februar 2004 - 16:31 #5
Skal jo nok være med <br />:

if (!in_array($entry, $array)) print($sti . "/" . $entry . "<br />");
Avatar billede asgrone Nybegynder
10. februar 2004 - 17:06 #6
jeg er ikke så hård til php, men er det så ikke noget i stil med <?
while($data = mysql_fetch_array($billeder))
                {
                if (!in_array($entry, $data)) unlink($sti . "/" . $entry);
                }
               
                ?>
Avatar billede asgrone Nybegynder
10. februar 2004 - 17:07 #7
skal det ikke være unlink istedet for print?
Avatar billede asgrone Nybegynder
11. februar 2004 - 04:03 #8
jeg endte med det her, men det virker ikke helt... kan du se fejlen?

$sti = '../images/upload/billede_stor';
if ($handle = opendir('../images/upload/billede_stor')) {

echo "Directory handle:<br>";
echo "Files:<br>";

while (false !== ($file = readdir($handle))) {

/* This is the correct way to loop over the directory. */
while ($data = mysql_fetch_array($billeder)) {

if ($file !== $data[2]) print($sti . "/" . $file . "<br />");
if ($file !== $data[2]) unlink($sti . "/" . $file);
}}
}
Avatar billede detox Nybegynder
11. februar 2004 - 20:40 #9
Jeg tror du skal prøve sådan:


while ($data = mysql_fetch_array($billeder)) {
    $filarray[] = $data[2];
}
$sti = '../images/upload/billede_stor';
if ($handle = opendir($sti)) {
    while (false !== ($file = readdir($handle))) {
        if (!in_array($file, $filarray)) {
            print ($sti . "/" . $file . "<br />");
            //unlink($sti . "/" . $file);
        }
    }
}
closedir($handle);


og hvis den så viser de rigtige filer, kan du udkommentere linien med:
//unlink($sti . "/" . $file);
Avatar billede detox Nybegynder
11. februar 2004 - 20:47 #10
Der mangler lige en detalje der tjekker om det rent faktisk er en fil:

while ($data = mysql_fetch_array($billeder)) {
    $filarray[] = $data[2];
}
$sti = '../images/upload/billede_stor';
if ($handle = opendir($sti)) {
    while (false !== ($file = readdir($handle))) {
        if (is_file($sti . "/" . $file)) {
            if (!in_array($file, $filarray)) {
                print ($sti . "/" . $file . "<br />");
                //unlink($sti . "/" . $file);
            }
        }
    }
}
closedir($handle);
Avatar billede detox Nybegynder
23. februar 2004 - 15:25 #11
Hvordan går det?
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