webForumDet fria alternativet

Radera alla filer som börjar med...

PHP

5 svar · 706 visningar · startad av learn

Medlem sedan jan. 20051 130 inlägg
Frågan#1

Jag har en katalog som innehåller en massa filer. Nu vill jag via ett PHP-skript kunna radera filer som börjar på ett visst ord.

Exempel:

I mappen finns: tabort3176, tabort132, tabort45, taintebort198, taintebort72

Kör jag delete('tabort') så innehåller mappen sedan: taintebort1, taintebort2

Hur gör jag detta på snyggaste och smidigaste sätt?

Medlem sedan mars 20041 505 inlägg
#2

Funktionen glob() är perfekt för detta, eftersom den söker reda på alla filer som har ett visst filnamn.
Sedan får du tillbaka träffarna som en array, och då loopar du bara igenom den och raderar filen med unlink().

foreach (glob("tabort*") as $filename)
{
   echo unlink($filename) ? "$filename raderades.\n" : "$filename kunde inte raderas!\n";
}

/r Jag ändrade lite så att det även skrivs ut ett fel om filen inte kan raderas.

Medlem sedan jan. 20051 130 inlägg
#3

Guld värt, tack! (y) :birp

Medlem sedan jan. 20051 130 inlägg
#4

Hmm,

Får det inte riktigt att funka...

$filnamn = 'test';

foreach (glob("webb/filer/" . $filnamn . "_*") as $fil) { 

unlink($fil); 

}

Filerna som heter 'test_323.pdf', 'test_198.doc' etc raderas inte... Sökvägen är korrekt.

Vad gör jag för fel?

/r Jag upptäckte att sökvägen ändå var fel... Sorry :r

Medlem sedan jan. 20051 130 inlägg
#5

Jag har stött på ett nytt problem! Om det inte finns några filer som matchar så får jag följande felmeddelande:

Warning: Invalid argument supplied for foreach() in /home/..../index.php on line 95

Jag vet inte hurvida filer finns eller ej innan funktionen körs.

Hur göra? Tips!

Medlem sedan juni 20008 205 inlägg
#6

Om du läser dokumentationen kan du se att glob returnerar FALSE om inga filer matchar. Kolla returvärdet innan du foreach:ar på det.

256 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)