31. juli 2004 - 12:22Der er
7 kommentarer og 1 løsning
slette en fil
Hejsa, der ligger nogle filer på mit webhotel som jeg gerne vil have slettet. Jeg har FTP adgang, men jeg kan ikke få lov til at slette dem, dette skyldes at filerne hedder noget i retning af pictureoh\n\b.jpg
jeg vil gerne slette dem med php. jeg har prøvet unlink("pictureoh\n\b.jpg");
men så skriver den Warning: unlink(pictureoh\lol\bpl.jpg): No such file or directory in /usr/home/web/web30955/t.php on line 3
nogen som har en ide til hvordan man klarer denne???
\ er et ugyldigt tegn i et filnavn, så jeg tror ikke der er meget du kan gøre ved det, da PHP tolker det som om den skal slette en fil, som ligger i en undermappe.
Bare for sjov kommer her lidt forklaring på hvorfor coderdks forslag virkede:
Hvilke tegn der er gyldige og ugyldige kommer an på det underliggende filsystem. På en maskine, der kører et Unix-lignende system er der normalt kun et eneste tegn, som er direkte ugyldigt i filnavne, nemlig \0, som bare er en byte med værdien 0. Selve filsystemet er komplet ligeglad med hvilke andre tegn, der bruges, men når der kommer en \0 er navnet slut.
Der er til gengæld en masse andre tegn, som kan være lidt bøvlede at have med at gøre. Det er tegn, som systemet bruger til specielle ting, eller som ligger uden for 7bit ASCII.
Det første problem (som er det, spørgsmålet her handlede om) handler om at skjule de tegn, som systemet ellers ville fortolke, så de ikke blev regnet som en del af filnavnet. Dette gøres ved at sætte en \ foran. På denne måde kan man bruge mange tegn, som normalt ellers ikke kan benyttes i filnavne. (Forresten er det / og ikke \, der er mappe-adskilletegn på en Unix-maskine, men det kan også bruges i et filnavn på samme måde.)
Det andet problem handler om uamerikanske bogstaver som f.eks. æøå. Som sagt er et filnavn bare en flok tegn - eller rettere en serie af bytes. Filsystemet ved egentlig slet ikke, hvilke tegn disse bytes repræsenterer. Så længe alle programmer bruger samme tegnsæt (f.eks. utf-8), er der ingen problemer. Alle programmer er enige om at de to bytes 0xC3 0xA6 tilsammen er et æ, men hvis et program pludselig forventer at filnavne er i iso-8859-1, så står 0xC3 0xA6 for 2 andre tegn, og filnavnet ser underligt ud.
Synes godt om
Ny brugerNybegynder
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.