/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Tjekke filer mod db og evt slette dem
Fra : MooreHojer


Dato : 05-08-05 21:37

Hej NG

Er det muligt at lave noget kode i PHP der kan gå igennem alle filerne i
én specifik mappe og tjekke dem mod en database og i de tilfælde hvor de
ikke er i databasen så slette filerne?

Det drejer sig om en mappe på b-ones server og de kører med PHP4.

Jeg er ikke så hård i PHP endnu så lidt hjælp på vejen vil være fint
Evt. en skitse af et kodeforslag (behøver ikke at være testet)

På Forhånd Tak!

--
MooreHojer


 
 
Peter Farsinsen (05-08-2005)
Kommentar
Fra : Peter Farsinsen


Dato : 05-08-05 22:18

MooreHojer wrote:

> Er det muligt at lave noget kode i PHP der kan gå igennem alle filerne i
> én specifik mappe og tjekke dem mod en database og i de tilfælde hvor de
> ikke er i databasen så slette filerne?

$r = HentFraWhatEverDatabase('SELECT * FROM `tabel`);

foreach($r as $k => $a) {
if(!file_exists($a['filnavn'])) {
$nogo .= (!isset($nogo)) ? $a['filnavn'] : ', '.$a['filnavn'];
}
}

SletFraWhatEverDatabase('DELETE FROM `tabel` WHERE `filnavn` IN ('.$nogo.');

.... nej det er ik' testet ;)

- Peter

Peter Farsinsen (05-08-2005)
Kommentar
Fra : Peter Farsinsen


Dato : 05-08-05 22:23

.... hov, det var jo omvendt ;)

$r = HentFraWhatEverDatabase('SELECT * FROM `tabel`);

foreach($r as $k => $a) {
$filer[] = $a['filnavn'];
}

$h = opendir('/sti/til/folder');

while(false !== ($fil = readdir($handle))) {
if(in_array($filer)) {
unlink('/sti/til/folder/'.$fil);
}
}

- Peter

Peter Farsinsen (05-08-2005)
Kommentar
Fra : Peter Farsinsen


Dato : 05-08-05 23:20

Peter Farsinsen wrote:

> if(in_array($filer)) {
if(!in_array($filer)) {

.... så må det være godt!

- Peter

MooreHojer (06-08-2005)
Kommentar
Fra : MooreHojer


Dato : 06-08-05 07:37

> Peter Farsinsen wrote:
>
>> if(in_array($filer)) {
> if(!in_array($filer)) {
>
> ... så må det være godt!

Jeg kigger straks på det og ser om jeg kan få det til at virke.

Takker

--
MooreHojer


MooreHojer (06-08-2005)
Kommentar
Fra : MooreHojer


Dato : 06-08-05 08:14

> Jeg kigger straks på det og ser om jeg kan få det til at virke.

Den kommer med følgende advarsel:

Warning: Wrong parameter count for in_array() in
/customers/viborgip.dk/viborgip.dk/httpd.www/login/autoclean.php on line
18

Warning: unlink(upload/test/.): Is a directory in
/customers/viborgip.dk/viborgip.dk/httpd.www/login/autoclean.php on line
19

Warning: Wrong parameter count for in_array() in
/customers/viborgip.dk/viborgip.dk/httpd.www/login/autoclean.php on line
18

Warning: unlink(upload/test/..): Is a directory in
/customers/viborgip.dk/viborgip.dk/httpd.www/login/autoclean.php on line
19

Warning: Wrong parameter count for in_array() in
/customers/viborgip.dk/viborgip.dk/httpd.www/login/autoclean.php on line
18


sidste linie gentages 38 gange, svarende til antal filer i mappen.


og linie 17-19 er disse:

while(false !== ($fil = readdir($h))) {
if(!in_array($filer)) {
unlink('upload/test/'.$fil);


Oven i alle fejlene så har den slette *alle* filer i mappen, også dem
der forekom i databasen...

Hvad har jeg gjort forkert?

hvad


Peter Farsinsen (06-08-2005)
Kommentar
Fra : Peter Farsinsen


Dato : 06-08-05 12:09

MooreHojer wrote:
> Warning: unlink(upload/test/.): Is a directory in
> Warning: unlink(upload/test/..): Is a directory in
> Hvad har jeg gjort forkert?

Hep

Som jeg skrev i min første post er koden ik' testet, det er derfor en
go' ide, hvis du selv tester lidt inden du faktisk sletter filerne med
unlink().

Anyway, '.' er working directory og '..' er parent directory - altså
biblioteker. Desuden kan du ikke slette mapper med unlink, så du kan med
fordel tjekke om det er en fil du forsøger at slette. Det kan du gøre
med is_file().

Altså...:

$r = HentFraWhatEverDatabase('SELECT * FROM `tabel`);

foreach($r as $k => $a) {
$filer[] = $a['filnavn'];
}

/**
* Dump $filer så du kan sikre at dine filer er i arrayet.
* $filer[0] skal indeholde 'fil1.txt' osv...
* Indeholder $filer ikke de filnavne der er i databseen
* skal du kigge på ovenstående.
*/

var_dump($filer);
die('stoooop');

$h = opendir('/sti/til/folder');

while(false !== ($fil = readdir($handle))) {
if(!in_array($fil, $filer) && is_file($fil)) {
/**
* Print evt. nedenstående istedet for unlink
* så du kan se hvilke filer der vil forsøges slettet.
*/
unlink('/sti/til/folder/'.$fil);
}
}

- Peter

MooreHojer (06-08-2005)
Kommentar
Fra : MooreHojer


Dato : 06-08-05 10:23

Jeg fandt en løsning med ASP i stedet for

--
MooreHojer


Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408527
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste