|
| 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
| |
|
|