Gå til innhold

finne filetternavnet (ikke filtypen)


Anbefalte innlegg

Videoannonse
Annonse

$_FILES['felt']['tmp_name'] gir deg uheldigvis ikke en filending å leke med.. Den vil outputte noe som f.eks /tmp/phprhwfwm

 

om du bruker zyrtechs eksempel på $_FILES['felt']['name'] så burde det gi deg filendingen du vil ha, gitt at det ikke er noen ufyselige punktum i filnavnet ellers.

 

Jeg ser ikke noe umiddelbart galt med å bruke name i stedet for tmp_name.. med mindre man forventer at filendingen forandrer seg på ferden fra klient til tjener ;)

Lenke til kommentar

hm.. hvis du bemerker det, synes jeg det bør bemerkes at arrayet som det fjernes fra er et som ikke tas vare på likevel.

 

array_pop eksemplet over er copy-paste fra user comments på php.net

 

og ang. mere jobb - man kommer ikke utenom en algoritme som søker gjennom alle punktum og henter ut det som står etter det siste. Det er dette array_pop gjør, muligens mere optimalisert siden det er ferdig kompilert til sammenligning med et program man skriver selv. uten at jeg har sjekket php source for dette. kjør gjerne en benchmark ;)

Lenke til kommentar

Jeg kjørte Benchmark:

torbjorn@intern(~/php)$ time php strstr.php
1.06user 0.00system 0:01.19elapsed 88%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+1009minor)pagefaults 0swaps
torbjorn@intern(~/php)$ time php arraypop.php
0.78user 0.00system 0:01.05elapsed 75%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+1005minor)pagefaults 0swaps

 

program strstr.php:

<?php
$filename="filnavn.txt";
for($i=0;$i<100000;$i++){
 $e=strstr($filename,'.');
 if(!$e){
   $e='filename.txt';
 }
 else if($e{0} == '.'){
   $e=substr($e,1);
 }
}
?>

 

arraypop.php:

<?php
$filename="filnavn.txt";
for($i=0;$i<100000;$i++){
 $e=array_pop(explode('.', $filename));
}
?>

 

arraypop kjappere her, men det er kun fordi det måtte legges til kodelinjer til strstr som tar høyde for at $e kan bli tom eller inneholde punktum.

Lenke til kommentar

Kjører du en benchmark på end() også? Jeg fikk i alle fall bedre resultater med end().

 

Skjønner ikke helt hva du sikter til Torbjørn, array_pop er en funksjon som tar bort det siste leddet fra en array og returnerer dette - end() er en funksjon som henter siste delen av arrayen uten å røre den.

 

Dersom fjartan noen gang skulle jobbe som en del av et større team, eller lage et script for noen som ville bygge videre på det senere er det ikke særlig populært å bruke funksjoner som gjør sammen nytten, men egentlig er ment for noe annet.

 

Mener du virkelig at man heller burde bruke array_pop() enn end()? I så fall vil jeg gjerne høre argumenter for dette, sier ikke at det er feil i alle sammenhenger - vil bare høre hvis du har et eksempel på hvor det er bedre?

Lenke til kommentar

nei, skal jeg være ærlig kjente jeg ikke til end(), og snappet heller ikke opp at du foreslo det, så jeg legger meg paddeflat :(

 

angående det andre du skriver, da dette er en array som "fanges opp i løse lufta", ville jeg som programmerer ikke si noe på at man "hakker den opp" eller gjør noe annet med den som kan ødelegge den. Jeg er imidlertid farget av min perlbakgrunn der pop, push, shift og unshift er mye oftere brukt og mye vanligere enn i php, da array-håndtering er mye mer integrert i perlsyntax, uten at det slår ben under det jeg sier først i dette avsnittet.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...