[PHP] Probleem met functie eregi

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo beste gotters.

Ik heb een klein probleempje met de functie eregi in php.

Ik ben een functie aan het maken om een alle files in een directory in een array te proppen. Nu wil ik filteren op files met een bepaalde extensie. Hiervoor dacht ik aan de functie eregi te gebruiken. Hieronder het betreffende stukje.
code:
1
eregi('\.jpg$',$file)

Dit werkt verder allemaal perfect alle files met de extensie jpg worden in de array gepropt.

Nu wilde ik de functie een beetje uitbreiden zodat ik ook op andere extensies kan zoeken. Daarom dacht ik eraan om een variable op te nemen in de regexp. Helaas krijg ik dat niet voor elkaar.
code:
1
2
$extension = "jpg";
eregi('\.$extension$',$file)

Ik heb al geprobeert een \ voor de variable te zetten maar dan nog werkt het niet. Heeft iemand hier een oplossing voor?

[ Voor 3% gewijzigd door Verwijderd op 23-10-2004 21:54 ]


Acties:
  • 0 Henk 'm!

  • ludo
  • Registratie: Oktober 2000
  • Laatst online: 26-04-2024
  • Code tussen enkele quotes wordt niet geparsed, gebruik dubbele quotes.
  • Kijk ook even naar de PCRE functies, deze zijn (meestal) een stuk sneller.
  • Het dollarteken in je expressie zal denk ik ook voor problemen zorgen.

[ Voor 6% gewijzigd door ludo op 23-10-2004 21:28 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op 23 oktober 2004 @ 20:57:
Hallo beste gotters.

Ik heb een klein probleempje met de functie eregi in php.

Ik ben een functie aan het maken om een alle files in een directory in een array te proppen. Nu wil ik filteren op files met een bepaalde extensie. Hiervoor dacht ik aan de functie eregi te gebruiken. Hieronder het betreffende stukje.
code:
1
eregi('\.jpg$',$file)

Dit werkt verder allemaal perfect alle files met de extensie jpg worden in de array gepropt.

Nu wilde ik de functie een beetje uitbreiden zodat ik ook op andere extensies kan zoeken. Daarom dacht ik eraan om een variable op te nemen in de regexp. Helaas krijg ik dat niet voor elkaar.
[code]
hier heb je een M
$extemsion = "jpg";
en hier een N
eregi('\.$extension$',$file)
;)
[/code]
Ik heb al geprobeert een \ voor de variable te zetten maar dan nog werkt het niet. Heeft iemand hier een oplossing voor?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ja sorry dat was een overtik foutje. Heb 't even verbeterd in de start post.

Acties:
  • 0 Henk 'm!

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 07-11-2023

kvdveer

Z.O.Z.

Tussen enkele quotes worden variabelen niet vervangen door hun waarde... Dat gaat er dus mis.

PHP:
1
2
3
4
5
6
// zo werkt het wel:
preg_match('/\.' . $extensie . '$/i',$file);
// of:
preg_match("/\.$extensie\$/i",$file);
// of:
eregi("\.$extensie\$",$file);

[ Voor 11% gewijzigd door kvdveer op 23-10-2004 22:07 ]

Localhost, sweet localhost


Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
Voor dat soort dingen gebruik ik meestal zoiets:
PHP:
1
2
3
4
5
6
$Ext = '.jpg';
$File = 'afbeelding1.jpg';
if (substr ($File, -strlen($Ext)) == $Ext)
{
//Doe
}

Met eregi zal het zoiets worden
PHP:
1
2
3
4
5
6
$File = 'afbeelding.jpg';
$Ext = 'jpg';
if (eregi ("\.{$Ext}$", $File))
{
//Doe
}

Acties:
  • 0 Henk 'm!

  • Billie
  • Registratie: Januari 2003
  • Laatst online: 16-09 20:27
Wat is er mis met in_array?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Met eregi zal het zoiets worden
PHP:
1
2
3
4
5
6
$File = 'afbeelding.jpg';
$Ext = 'jpg';
if (eregi ("\.{$Ext}$", $File))
{
//Doe
}
Hey ja dat werkt perfect. Mag ik je hartelijk bedanken voor je hulp. En de rest natuurlijk ook.

Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 19-09 22:18

chem

Reist de wereld rond

idd, een in_array en een substr() zijn vele malen sneller dan een regexp er op loslaten.

Enige randvoorwaarde is dat de extentie altijd 3 karakters is; iets wat wel weer te overkomen is door naar de laatste . te zoeken in de bestandsnaam.

Vergeet trouwens niet dat er besturingssystemen bestaan die geen extentie gebruiken; mocht je dus uploads willen "syncen" dan is een extentie check niet afdoende.

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
chem schreef op 23 oktober 2004 @ 22:31:
Enige randvoorwaarde is dat de extentie altijd 3 karakters is; iets wat wel weer te overkomen is door naar de laatste . te zoeken in de bestandsnaam.
Waarom?
PHP:
1
substr ($File, -strlen($Ext))

Pakt de laatste 'x' characters naargelange $Ext lang is :)

Mijn aanpak is meestal

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
function hasValidExt ($File)
{
       $AllowedExts = array ('.jpg','.gif','.jpeg');
       foreach ($AllowedExts as $Ext)
       {
              if (substr ($File, -strlen($Ext)) == $Ext)
              {
                     return true;
              }
       }
       return false;
}

[ Voor 33% gewijzigd door PrisonerOfPain op 23-10-2004 23:13 ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Verwijderd schreef op 23 oktober 2004 @ 22:30:
[...]


Hey ja dat werkt perfect. Mag ik je hartelijk bedanken voor je hulp. En de rest natuurlijk ook.
Nee, dat doet ie niet. Binnen " worden de \ ook verwerkt. De regexp daar zal ook "file.nojpg" pikken. Waneer je een \ in die string wilt zetten zul je de \ ook weer moeten escapen Daarnaast geldt dit eigenlijk ook voor de $. Hij zal dus uiteindelijk "\\.$extension\$" worden.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1