[PHP]Extension naar lowercase

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • antonboonstra
  • Registratie: Augustus 2002
  • Laatst online: 20-09 18:51

antonboonstra

8815Wp | WP | Tesla | Zero

Topicstarter
Ik heb een functie gemaakt om de extensie van bestandsnamen naar kleine letters om te zetten. Ik vraag mij echter af of dit de makkelijkste/simpelste oplossing is. Of zie ik een standaard functie over het hoofd?
PHP:
1
2
3
4
5
6
function etl($file) //extension to lowercase
{
  $filename = strrev(strstr(strrev($file), '.')); // eerste gedeelte onveranderd
  $ext = substr(strtolower (strrchr ($file, '.')), 1); // extensiegedeelte naar kleine letters
  return $filename.$ext;
}

📸Canon EOS 5D IV 🚁DJI Mavic Pro 🏍️Zero SR ⚡Tesla M3 LR 🌡️Daikin US 3.5kW ☀️8815Wp 🔋Marstek Venus-E 5,12 kWh Tweakers PVOutput lijst


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Kijk eens naar pathinfo() :)

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

Verwijderd

Ik zou de filename + extentie dmv Regex eruit halen. Stukje duidelijker en wat veiliger :)

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Je hebt duidelijke de file_convert_extension_to_lowercase() functie gemist...

8)7

Alle gekheid op een stokje: PHP heeft veel standaardfuncties maar voor iets dat zo specifiek is als dit zul je toch moeten combineren. In dit geval kun je pathinfo gebruiken om aan de extensie te komen en daar strtolower overheen gooien of je zou (beter dan wat je nu doet in elk geval) kunnen exploden/splitten op de . en daarna het laatste array-element dat je terug krijgt naar lowercase zetten. Je blijft verder wel aan het combineren tussen functies. :)
Verwijderd schreef op dinsdag 24 februari 2009 @ 12:16:
Ik zou de filename + extentie dmv Regex eruit halen. Stukje duidelijker en wat veiliger :)
Veiliger? Onzin, de code in de topicstart werkt ook prima voor het doel waar 'ie voor geschreven is en onveilig is het niet te noemen. Hooguit onhandig wanneer een file geen extensie heeft, maar daar moet je je regexp ook tegen wapenen. En als je dat doet is die ook verre van duidelijk. ;)

[ Voor 29% gewijzigd door NMe op 24-02-2009 12:20 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • antonboonstra
  • Registratie: Augustus 2002
  • Laatst online: 20-09 18:51

antonboonstra

8815Wp | WP | Tesla | Zero

Topicstarter
Ben (nog) niet zo thuis in reguliere expressies, maar pathinfo ziet er ook handig uit. Thanx!

Edit: Een explode waarbij je alleen de laatste element naar lowercase omzet, was iets handiger geweest dan mijn lastig leesbare oplossing.

[ Voor 43% gewijzigd door antonboonstra op 24-02-2009 12:22 ]

📸Canon EOS 5D IV 🚁DJI Mavic Pro 🏍️Zero SR ⚡Tesla M3 LR 🌡️Daikin US 3.5kW ☀️8815Wp 🔋Marstek Venus-E 5,12 kWh Tweakers PVOutput lijst


Acties:
  • 0 Henk 'm!

Verwijderd

NMe schreef op dinsdag 24 februari 2009 @ 12:18:
Je hebt duidelijke de file_convert_extension_to_lowercase() functie gemist...

8)7

Alle gekheid op een stokje: PHP heeft veel standaardfuncties maar voor iets dat zo specifiek is als dit zul je toch moeten combineren. In dit geval kun je pathinfo gebruiken om aan de extensie te komen en daar strtolower overheen gooien of je zou (beter dan wat je nu doet in elk geval) kunnen exploden/splitten op de . en daarna het laatste array-element dat je terug krijgt naar lowercase zetten. Je blijft verder wel aan het combineren tussen functies. :)

[...]

Veiliger? Onzin, de code in de topicstart werkt ook prima voor het doel waar 'ie voor geschreven is en onveilig is het niet te noemen. Hooguit onhandig wanneer een file geen extensie heeft, maar daar moet je je regexp ook tegen wapenen. En als je dat doet is die ook verre van duidelijk. ;)
Nouja veiliger bedoel ik idd ook niet, maar meer failsave. Veiliger in die zin :)

Acties:
  • 0 Henk 'm!

  • doeternietoe
  • Registratie: November 2004
  • Laatst online: 21:26
Verwijderd schreef op dinsdag 24 februari 2009 @ 12:24:
[...]


Nouja veiliger bedoel ik idd ook niet, maar meer failsave. Veiliger in die zin :)
Onzin, regexp geeft geen enkel voordeel bij zo´n duidelijke taak. Het verhoogt alleen de kans op fouten omdat regexp heel wat complexer zijn dan de andere functies.

Ik zou geen pathinfo gebruiken, strrchr om de positie van de laatste punt te bepalen en substr om deze uit te knippen, is weer een stukje sneller omdat je pathinfo niet allerlei onnodige informatie op hoeft te laten zoeken. Just my two cents... Het is opzich niet fout met explode of pathinfo.

Acties:
  • 0 Henk 'm!

  • antonboonstra
  • Registratie: Augustus 2002
  • Laatst online: 20-09 18:51

antonboonstra

8815Wp | WP | Tesla | Zero

Topicstarter
doeternietoe schreef op dinsdag 24 februari 2009 @ 13:01:
[...]

Onzin, regexp geeft geen enkel voordeel bij zo´n duidelijke taak. Het verhoogt alleen de kans op fouten omdat regexp heel wat complexer zijn dan de andere functies.

Ik zou geen pathinfo gebruiken, strrchr om de positie van de laatste punt te bepalen en substr om deze uit te knippen, is weer een stukje sneller omdat je pathinfo niet allerlei onnodige informatie op hoeft te laten zoeken. Just my two cents... Het is opzich niet fout met explode of pathinfo.
Ben het met je eens dat pathinfo misschien overbodige dingen doet. Mijn resulterende stukje code is:
PHP:
1
2
3
4
5
6
function etl($file) //extension to lowercase
{
  $arr = explode('.', $file);
  $arr[] = strtolower(array_pop($arr));
  return implode('.',$arr);
}

📸Canon EOS 5D IV 🚁DJI Mavic Pro 🏍️Zero SR ⚡Tesla M3 LR 🌡️Daikin US 3.5kW ☀️8815Wp 🔋Marstek Venus-E 5,12 kWh Tweakers PVOutput lijst


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Pas wel op dat het voor zou kunnen komen dat een foldernaam een punt bevat terwijl de file geen extensie heeft. Dat zou je script ietwat in de war kunnen sturen. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • antonboonstra
  • Registratie: Augustus 2002
  • Laatst online: 20-09 18:51

antonboonstra

8815Wp | WP | Tesla | Zero

Topicstarter
@NMe: Ik stuur alleen bestandsnamen zonder folder naar deze functie.

Ik heb (als echte tweaker natuurlijk B) ) echter een snelheidstest gedaan. Zie onderstaande code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<?php
$time_start = getmicrotime(); // start de teller voor de parsetime

if(isset($_GET['1']))
{
  for($i=0; $i<100000; $i++)
  {
    etl1('IMG_0001.JPG');
  }
}
elseif(isset($_GET['2']))
{
  for($i=0; $i<100000; $i++)
  {
    etl2('IMG_0001.JPG');
  }
}
elseif(isset($_GET['3']))
{
  for($i=0; $i<100000; $i++)
  {
    etl3('IMG_0001.JPG');
  }
}
else
{}

$time_end = getmicrotime(); // bereken de parsetime
$time = substr ( $time_end - $time_start, 0, 8 );
echo "Script is uitgevoerd in $time seconden";

function etl1($file) //extension to lowercase
{
  $filename = strrev(strstr(strrev($file), '.')); // eerste gedeelte onveranderd
  $ext = substr(strtolower (strrchr ($file, '.')), 1); // extensiegedeelte naar kleine letters
  return $filename.$ext;
}

function etl2($file) //extension to lowercase
{
  $file_parts = pathinfo($file);
  return $file_parts['filename'] . '.' . strtolower($file_parts['extension']);
}

function etl3($file) //extension to lowercase
{
  $arr = explode('.', $file);
  $arr[] = strtolower(array_pop($arr));
  return implode('.',$arr);
}

function getmicrotime() 
{
  list($usec, $sec) = explode(" ",microtime());
  return ((float)$usec + (float)$sec);
}
?>

Uitslagen op een P4 3.2GHz machine:
functie 1: 0,593 seconden
functie 2: 0,647 seconden
functie 3: 0,637 seconden

Uitslag verspringt elke keer een paar duizendsten, maar laat wel dit beeld zien. Mijn eerste oplossing, was dus eigenlijk wel de snelste :P

📸Canon EOS 5D IV 🚁DJI Mavic Pro 🏍️Zero SR ⚡Tesla M3 LR 🌡️Daikin US 3.5kW ☀️8815Wp 🔋Marstek Venus-E 5,12 kWh Tweakers PVOutput lijst


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Micro-optimalisatie is wel de slechtste reden om tussen die functies te kiezen. :z

Hier heb je nog een optimalisatie: gewoon microtime(true) doen ipv suffe PHP 4 style getmicrotime() functies. ;)

{signature}


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

...en de minst leesbare. ;)

Puur uit leesbaarheid zou ik hier toch voor pathinfo kiezen. Als je dit nou 100.000 keer op een pagina moet doen begrijp ik een eventuele wens voor optimalisatie wel, nu niet echt. :P

Overigens heb ik een beetje moeite met het accepteren van een tijd van ruim een halve seconde voor iets simpels als dit. :o

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

NMe schreef op dinsdag 24 februari 2009 @ 14:28:
Overigens heb ik een beetje moeite met het accepteren van een tijd van ruim een halve seconde voor iets simpels als dit. :o
Hij doet 't wel 100.000 keer hè ;)

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • Patriot
  • Registratie: December 2004
  • Laatst online: 19:24

Patriot

Fulltime #whatpulsert

NMe schreef op dinsdag 24 februari 2009 @ 14:28:
Overigens heb ik een beetje moeite met het accepteren van een tijd van ruim een halve seconde voor iets simpels als dit. :o
Mis ik de grap of heb jij gemist dat hij het honderdduizend keer doet? :P

edit: spuit elf :X

[ Voor 4% gewijzigd door Patriot op 24-02-2009 14:33 ]


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 21-09 14:53

MueR

Admin Tweakers Discord

is niet lief

NMe is vandaag gewoon wat traagjes.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

MueR schreef op dinsdag 24 februari 2009 @ 14:56:
NMe is vandaag gewoon wat traagjes.
Ben al een paar weken redelijk under the weather, dan krijg je dat. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

strtolower(end(explode($filename, ".")))

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Daarmee krijg je enkel de extensie terug... Als je deze aanpak fixt, kom je op array_pop ed. uit, en die optie was reeds gegeven.

(en de argumenten van explode staan in de verkeerde volgorde :+ )

[ Voor 26% gewijzigd door Voutloos op 25-02-2009 07:20 ]

{signature}

Pagina: 1