Avatar billede tipsen Nybegynder
04. august 2003 - 13:31 Der er 7 kommentarer og
1 løsning

Lovlige / smarte / pæne filnavne på Linux-server

Hej eksperter

I forbindelse med et webbaseret filhåndteringssystem som kører på en linux-server giver jeg brugeren mulighed for at bestemme filnavnet på serveren ved upload af filen.

Da brugeren i dette tilfælde er en ikke-teknisk-orienteret "dokument-administrator" på websitet, vil jeg gerne være sikker på, at der ikke bliver angivet "dumme" filnavne!

Med dumme filnavne mener jeg filnavne indeholdende specialkarakterer, som kan give problemer senere hen.

Derfor vil jeg gerne vide, hvilke karakterer jeg bør tillade i et filnavn, da jeg så vil lave et check på det angivne filnavn ved upload af filen.

Hvis nogen kan finde ud af at lave en regexp der kontrollerer filnavnet vil jeg være ganske lykkelig (der skal ikke så meget til!)

På forhånd tak

Mvh

tipsen
Avatar billede gonza.dk Nybegynder
04. august 2003 - 14:34 #1
noget i denne stil?

<?php
echo "<form action='".$_SERVER['php_self']."' method='post'>
Tekst: <input type='text' name='tekst'> <input type='submit' value='test'>
</form>";


if (isset($_POST['tekst'])){
$tekst = $_POST['tekst'];

    if (!eregi("^[A-Za-z0-9_.-]+$", $tekst)){
        echo "'".$tekst."' indeholder ugyldige tegn";
    }
    else {
        echo $tekst." er ok";
    }

}
?>

test: http://scripts.gonza.dk/eregi/
Avatar billede the_legend Nybegynder
04. august 2003 - 19:19 #2
du kan gøre det som gonza skriver den + du kan tilføje nogle ord i en db og finde ud af om det er i feltet hvis det er!
Avatar billede tipsen Nybegynder
04. august 2003 - 20:22 #3
the_legend: Det forstod jeg simpelthen ikke...
Avatar billede nicklasb Nybegynder
04. august 2003 - 21:17 #4
jeg tror ikke det er selve koden TIpsen er ude efter. Sådan som jeg forstår spørgsmålet, ønsker han bare hjælp til overvejelserne om, hvilke tegn der ville kunne konflikte i andre siturationer. Fx. i andre phpscripts eller i søgning på filer gennem Unix's egne søgefunktioner.
Er der noget jeg har misforstået?
Avatar billede tipsen Nybegynder
04. august 2003 - 21:39 #5
nicklasb: Det er primært overvejelserne omkring filnavne på Linux jeg er interesseret i (da min egen baggrund er Windows) og sekundært, hvis nogen kunne slynge en regexp eller noget lignende ud, ville det da være dejligt - men jeg vil hellere have overvejelserne fordi dem har jeg også nytte af næste gang jeg støder på tilsvarende problemer.
Avatar billede nicklasb Nybegynder
04. august 2003 - 22:06 #6
ok.. Så har jeg fattet det rigtigt.. ;)

nu ved jeg ikke helt hvad din administrator skal bruge uploadscriptet til, men kunne forstille mig at det klogeste i hvert falde ikke var at tage . (punktummer) med, hvis det skal gøres bare en smule let for dig at bestemme filtypen. Tænker her på de pakkede filtyper fx. Men der er jo en løsning på ALT ;D
ellers er der mange rundt om på nettet der benytter de bogstaver som gonza allerede har puttet i hans RegEx.. Ved så ikke om det er i forbindelse med Unixfilnavne (er det helt sikker ikke :), men hvis der endelig er andre regler i form af /, \ osv. i Unix frem for MsWin, skal du jo så også tænkte tanken lidt videre.
Hvad skal der ske med filen efter han har uploaded, omdøbt osv. i filen?!? Så kunne jeg forstille mig at der (måske ikke lige i dette projekt, men så i et af dine efterfølgende), skulle være brug for at en bruger evt. skulle downloade filen igen? Og så kommer vi jo så desværre til diskussionen om Microsofts monopol osv. Og hvis man kigger statestikker, ligger de vel også stadig langt i førerposition. Hvis du så oven i købet kigger på hvad målgruppen for siden (serveren?!?) er, er der jo i mange grupper RIGTIG mange Windows brugere. Når de nu downloader din fil, ville det jo være meget dejligt for dem, at filen nu ikke skiftede navn, fordi de evt. gik imod Microsofts filsystems-regler. Så her skal du også have Microsofts regler med ind i billedet. Og til sidst tror jeg desværre heller ikke at der er særlig meget mere end de tegn gonza har haft fremme tilbage.
Hvis du selv har en Windows-maskine, kan du evt. se hvilke tegn du ikke må putte i dine filnavne ved at oprette en mappe med navnet '\' på dit skrivebord. Der kommer en alertbox med en fejl, samt en liste over "ulovlige" tegn. DEM kan du i hvert falde sortere fra med det samme, hvis du tager min kommentar med i dine overvejelser :D
Avatar billede tipsen Nybegynder
11. juli 2004 - 11:29 #7
Jeg er nået frem til følgende (endnu utestet - til gengæld tog det ikke engang et år!):

preg_match('/^[a-z0-9\_\-]+[a-z0-9\_\-\.]*$/i', $text)

som (vistnok ;-)) kræver, at filnavnet starter med a-z, 0-9, _ (underscore) eller - (bindestreg) og derudover tillader . (punktum) udover de nævnte karakterer i resten af filnavnet.

'/i' i slutningen af den regulære expression betyder, at det er case-insensitive match der udføres og dermed at A-Z også er tilladt.

Jeg har desuden valgt preg_match() i stedet for eregi(), da den ifølge php.net ofte vil være hurtigere.

nicklasb: Vil du lægge et svar som tak for hjælpen?
Avatar billede tipsen Nybegynder
18. juli 2004 - 21:44 #8
lukker.
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