PDA

Bekijk Volledige Versie : [PHP] regular expression voor een directory



Pieter Van Isacker
23/12/02, 22:06
Hallo

Op mijn site zou ik graag een overzicht maken van alle grappige foto's
die ik al toegezonden heb gekregen, nu heb ik een pagina waarmee je door
directories kan surfen en ik heb ook een pagina die de foto's weergeeft.
Onderaan die pagina zou je moeten kunnen doorklikken naar de vorige of
volgende foto. Daarvoor gebruik ik regular expressions. Het bestand dat
de foto's moet weergeven krijgt telkens een variabele mee in de aard
van: /goodies/foto/derest/foto/fotod063.jpg
Nu is het me al gelukt om een deel te kunnen gebruiken van die variabele
: zijnde de tekst en de getallen in de bestandsnaam en de extensie maar
ik zou wel de directory ook moeten kunnen achterhalen, hoe doe ik dat?
Het kan zijn dat je meer of minder subdirectories hebt ook.
Hoe kan ik dit oplossen?
Alvaste bedankt
Pieter
--
--------------------
http://pieterv.free.fr
remove nospam from e-mail
-------------------

Wimjan
23/12/02, 22:59
Pieter Van Isacker schreef:
> Hallo
>
> Op mijn site zou ik graag een overzicht maken van alle grappige foto's
> die ik al toegezonden heb gekregen, nu heb ik een pagina waarmee je door
> directories kan surfen en ik heb ook een pagina die de foto's weergeeft.
> Onderaan die pagina zou je moeten kunnen doorklikken naar de vorige of
> volgende foto. Daarvoor gebruik ik regular expressions. Het bestand dat
> de foto's moet weergeven krijgt telkens een variabele mee in de aard
> van: /goodies/foto/derest/foto/fotod063.jpg
> Nu is het me al gelukt om een deel te kunnen gebruiken van die variabele
> : zijnde de tekst en de getallen in de bestandsnaam en de extensie maar
> ik zou wel de directory ook moeten kunnen achterhalen, hoe doe ik dat?
> Het kan zijn dat je meer of minder subdirectories hebt ook.
> Hoe kan ik dit oplossen?
>
Ik spreek geen PHP, maar bevat die taal geen rindex()-functie? Een
oplossing zou ~ kunnen zijn:

hethelepad = "/goodies/foto/derest/foto/fotod063.jpg";
mydir = substr(hethelepad, 0, rindex(hethelepad, '/'));

in woorden: mydir is gelijk aan hethelepad minus het deel na de laatste
slash.


Een andere oplossing (met een regexp):

mydir = "/goodies/foto/derest/foto/fotod063.jpg";
mydir =~ s/^(.*\/).*$/$1/;


Hmm, even zoeken op php.net levert de veel meer voor de hand liggende
functie dirname() op <http://www.php.net/manual/en/function.dirname.php>:

<citaat>

dirname -- Returns directory name component of path

Description

string dirname ( string path)

Given a string containing a path to a file, this function will return the
name of the directory.

On Windows, both slash (/) and backslash (\) are used as path separator
character. In other environments, it is the forward slash (/).

Example 1. dirname() example

$path = "/etc/passwd";
$file = dirname ($path); // $file is set to "/etc"

</citaat>

> Alvaste bedankt
> Pieter

Groet,

Wimjan

--
Iemands e-mailadres kwijt? Probeer m'n meta e-mail zoeker eens op
<http://inventio.nl/metanamesearch/>

WebTeckie
24/12/02, 04:39
On Mon, 23 Dec 2002 22:06:59 +0100, Pieter Van Isacker <pierrevi@nospamyucom.be>
wrote:

[...]

> Het bestand dat
>de foto's moet weergeven krijgt telkens een variabele mee in de aard
>van: /goodies/foto/derest/foto/fotod063.jpg
>Nu is het me al gelukt om een deel te kunnen gebruiken van die variabele
>: zijnde de tekst en de getallen in de bestandsnaam en de extensie maar
>ik zou wel de directory ook moeten kunnen achterhalen, hoe doe ik dat?

<?php
// $_GET['foto'] is de 'variabele in de aard van'
if(preg_match('/\.(jpg|gif|png)$/', $_GET['foto']))
{
//safe - we vragen om een plaatje
$dir = dirname($_GET['foto']);
$foto = basename($_GET['foto']);
}
else
{
// yeah-right-sure - doei
header("Location: http://www.google.com/search?q=luser");
exit;
}
?>

PS: nog effe wachten op 4.3, dan zal je met de 'glob' functie ook veel kunnen:
http://www.php.net/glob
--
WebTeckie
Programming is like art: it only looks like chaos.

Pieter Van Isacker
24/12/02, 12:37
WebTeckie wrote:
> On Mon, 23 Dec 2002 22:06:59 +0100, Pieter Van Isacker <pierrevi@nospamyucom.be>
> wrote:
>
> [...]
>
>
>>Het bestand dat
>>de foto's moet weergeven krijgt telkens een variabele mee in de aard
>>van: /goodies/foto/derest/foto/fotod063.jpg
>>Nu is het me al gelukt om een deel te kunnen gebruiken van die variabele
>>: zijnde de tekst en de getallen in de bestandsnaam en de extensie maar
>>ik zou wel de directory ook moeten kunnen achterhalen, hoe doe ik dat?
>
>
> <?php
> // $_GET['foto'] is de 'variabele in de aard van'
> if(preg_match('/\.(jpg|gif|png)$/', $_GET['foto']))
> {
> //safe - we vragen om een plaatje
> $dir = dirname($_GET['foto']);
> $foto = basename($_GET['foto']);
> }
> else
> {
> // yeah-right-sure - doei
> header("Location: http://www.google.com/search?q=luser");
> exit;
> }
> ?>

Ok ik kan nu al de directory achterhalen maar hoe moet ik nu de extensie
van de vorige of volgende foto achterhalen om die bij de link te
plaatsen? iets met filetype() of zo?
pieter

--
--------------------
http://pieterv.free.fr
remove nospam from e-mail
-------------------

Daniel Tryba
24/12/02, 13:01
In nl.internet.www.server-side Pieter Van Isacker <pierrevi@nospamyucom.be> wrote:
> Ok ik kan nu al de directory achterhalen maar hoe moet ik nu de extensie
> van de vorige of volgende foto achterhalen om die bij de link te
> plaatsen? iets met filetype() of zo?

Voor plaatjes: http://nl.php.net/manual/en/function.imagetypes.php

--

Daniel Tryba

Wouter Verhelst
25/12/02, 02:47
In article <3e084699$0$29642$ba620e4c@news.skynet.be>,
Pieter Van Isacker <pierrevi@nospamyucom.be> writes:
> Ok ik kan nu al de directory achterhalen maar hoe moet ik nu de extensie
> van de vorige of volgende foto achterhalen om die bij de link te
> plaatsen? iets met filetype() of zo?

Kan je zelf je eigen server configureren? Is dat een Apache-server?

Zo ja, dan is dat heel simpel: vergeet de extensie, en configureer je
server zo dat hij content-negotiation ondersteunt. Je kunt dan
enerzijds verschillende versies van dezelfde foto on-line zetten
(bijvoorbeeld een .png en een .gif) waarbij de browser en de server
zelf overeenkomen welke versie afgehaald wordt, terwijl je anderzijds
je extensie helemaal niet moet meegeven ;-)

Content negotiation aanzetten in Apache doe je door de module
negotiation_module te laden. In mijn configuratie zit er een lijn als
volgt in m'n httpd.conf:

LoadModule negotiation_module /usr/lib/apache/1.3/mod_negotiation.so

Normaal gezien zullen andere webservers dit ook ondersteunen, maar hoe
je het dan moet configureren is een andere...

--
wouter at grep dot be

"Human knowledge belongs to the world"
-- From the movie "Antitrust"

Pieter Van Isacker
25/12/02, 11:06
Wouter Verhelst wrote:
> In article <3e084699$0$29642$ba620e4c@news.skynet.be>,
> Pieter Van Isacker <pierrevi@nospamyucom.be> writes:
>
>>Ok ik kan nu al de directory achterhalen maar hoe moet ik nu de extensie
>>van de vorige of volgende foto achterhalen om die bij de link te
>>plaatsen? iets met filetype() of zo?
>
>
> Kan je zelf je eigen server configureren? Is dat een Apache-server?
>
> Zo ja, dan is dat heel simpel: vergeet de extensie, en configureer je
> server zo dat hij content-negotiation ondersteunt. Je kunt dan
> enerzijds verschillende versies van dezelfde foto on-line zetten
> (bijvoorbeeld een .png en een .gif) waarbij de browser en de server
> zelf overeenkomen welke versie afgehaald wordt, terwijl je anderzijds
> je extensie helemaal niet moet meegeven ;-)
>
> Content negotiation aanzetten in Apache doe je door de module
> negotiation_module te laden. In mijn configuratie zit er een lijn als
> volgt in m'n httpd.conf:
>
> LoadModule negotiation_module /usr/lib/apache/1.3/mod_negotiation.so
>
> Normaal gezien zullen andere webservers dit ook ondersteunen, maar hoe
> je het dan moet configureren is een andere...
>

Zal niet lukken bij mij, heb nog altijd een gratis server maar je kan er
dan ook niet alles op, ik denk dat ik mijn foto's toch maar beter in een
database zal zetten.
Pieter

--
--------------------
http://pieterv.free.fr
remove nospam from e-mail
-------------------