A byte walks into a bar and orders a pint. Bartender asks him "What's wrong?" Byte says "Parity error." Bartender nods and says "Yeah, I thought you looked a bit off."
je moet naar mod_rewrite van apache kijken
http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html
If TCP/IP handshaking was less formal, perhaps SYN/ACK would be YO/WASSUP
< dit stukje webruimte is te huur >
1 Ding alleen nog, ik kan nergens vinden of ik dan ook zeg maar kan kijken of ik via de mysql database kan achterhalen of ik een bestand of parameter moet hebben.
Bijvoorbeeld is de frequently asked questions een apart bestand en de pagina van Verf, of weet ik veel wat je aan kunt klikken allemaal, een tekst die geinclude moet worden bij text.php welke weer geinclude wordt bij index.php.
Lang verhaal kort: kan ik hiermee ook kijken of er een bestand van bestaat of dat ie voorkomt in de database?
A byte walks into a bar and orders a pint. Bartender asks him "What's wrong?" Byte says "Parity error." Bartender nods and says "Yeah, I thought you looked a bit off."
Ja, dat kan. Ik gebruik zelf meestal (een variant op, afhankelijk van serverconfig) onderstaande rewirterules:k0ewl schreef op dinsdag 25 juli 2006 @ 00:48:
Lang verhaal kort: kan ik hiermee ook kijken of er een bestand van bestaat of dat ie voorkomt in de database?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # Multiviews enabled for readable uri's
Options +MultiViews +FollowSymlinks
#Apache2 needs explicit pathinfo
#AcceptPathInfo On
# All multiviews uri get passed to /index.php
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index/$1 |
Wat dit doet is in eerste instantie multiviews aanzetten. Dat zorgt ervoor dat apache bij een request naar /foo/bar/quux eerst gaat kijken in de directory /foo/bar/ of er een bestand quux staat (met een willekeurige extensie). Zo ja, dan wordt dat bestand geserveerd. Zo nee dan wordt er gezocht naar een bestand bar in de directory /foo/, etcetera.
De rewriterule erna zorgt ervoor dat wanneer er geen bestand (of directory) wordt gevonden, dat index(.php) wordt aangeroepen. In PHP kun je vervolgens op basis van $_SERVER["REQUEST_URI"] achterhalen wat de bezoeker wenst te bekijken en een passende response geven. Op die manier heb je een redelijke generiek methode voor mooie URL's, maar ook wat extra verantwoordelijkheden en/of romplslomp omdat je altijd zelf je URL's moet parsen (en netjes 404's moet sturen).
Een andere manier is om met behulp van rewriterules het URL om te schrijven naar een GET request. Je hoeft dan de URL-afhandeling niet zelf te regelen in PHP, je kunt gewoon scripten zoals je gewend bent. Je zult alleen wat meer (en specifiek op je site gerichte) rewriterules moeten schrijven.
Regeren is vooruitschuiven
A byte walks into a bar and orders a pint. Bartender asks him "What's wrong?" Byte says "Parity error." Bartender nods and says "Yeah, I thought you looked a bit off."
Op welke manier voor jij dat door in je scripts? Door een bepaalde bootstrap file halen die vervolgens de juiste scripts weer aanroept?T-MOB schreef op dinsdag 25 juli 2006 @ 01:21:
[...]
Op die manier heb je een redelijke generiek methode voor mooie URL's, maar ook wat extra verantwoordelijkheden en/of romplslomp omdat je altijd zelf je URL's moet parsen (en netjes 404's moet sturen).
Ik heb deze methode altijd interessant gevonden, maar nooit een mooie manier kunnen maken om het generiek in *al* mijn pagina's te gebruiken zonder code toch weer te moeten copy pasten.
[ Voor 6% gewijzigd door megamuch op 25-07-2006 05:05 ]
Verstand van Voip? Ik heb een leuke baan voor je!
Index PHP ziet er ongeveer zo uit - ik denk dat dat wel ongeveer is wat jij bedoeld met een bootstrap file.megamuch schreef op dinsdag 25 juli 2006 @ 05:05:
[...]
Op welke manier voor jij dat door in je scripts? Door een bepaalde bootstrap file halen die vervolgens de juiste scripts weer aanroept?
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
| <?php require_once 'framework/init.php'; $URL = &URLhandler::getInstance(); $moduleType = (!empty($URL->uriArgs[0])) ? $URL->uriArgs[0] : ''; //try to fetch the correct module $module = moduleFactory::getModule($moduleType); //init the module if (!is_null($module) && $module->init($URL->uriArgs)) { if (empty($module->isIndependant)) { $outputHandler = new output(); $outputHandler->content = &$module; $outputHandler->render(); } } else { $module = moduleFactory::getModule('404'); $module->init(); } ?> |
De URLhandler zorg voor het afhandelen van het URL (doh). Op basis van de eerste parameter wordt een module geladen. Als de module afhankelijk is dan wordt ie doorgegeven aan een outputhandler die boel combineerd met templates e.d. Is de module onafhankelijk dan genereerd ie zijn eigen content (bijvoorbeeld om afbeeldingen te serveren).
Qua copy-paste valt het reuze mee. Een module extend op een basisklasse en voor de rest hoef ik eigenlijk alleen zorg te dragen voor de juiste data.
[ Voor 8% gewijzigd door T-MOB op 25-07-2006 08:09 ]
Regeren is vooruitschuiven
TS zoekt overigens dit stukje .htaccess, rechtstreeks uit de Wordpress sourcetree die hetzelfde doet:
1
2
3
4
5
| RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L] |
Oftewel: indien de opgevraagde file geen file of directory is, herschrijf alles naar index.php. Vervolgens kun je daar idd met $_SERVER["REQUEST_URI"] zelf parsen wat je wilt aan de opgegeven string.
Bij minder versatiele sites is het overigens vaak net zo handig om het rewritewerk puur in de htaccess te houden ipv in de code zelf.
Mja, goed punt. De reden om multiviews erin te houden was dat er scripts waren die uitgingen van multiviews. Maar goed, nu kunnen ze idd wel uit.curry684 schreef op dinsdag 25 juli 2006 @ 09:17:
@ T-MOB: Multiviews zijn bah, gevaarlijk en resourceintensief. Waarom je ze in godesnaam nog zou willen aanzetten als je ook de correcte mod_rewrite oplossing implementeert snap ik al helemaal niet.
Regeren is vooruitschuiven
nou, het is eigenlijk niet wat ik bedoelde,curry684 schreef op dinsdag 25 juli 2006 @ 09:17:
@ T-MOB: Multiviews zijn bah, gevaarlijk en resourceintensief. Waarom je ze in godesnaam nog zou willen aanzetten als je ook de correcte mod_rewrite oplossing implementeert snap ik al helemaal niet.
TS zoekt overigens dit stukje .htaccess, rechtstreeks uit de Wordpress sourcetree die hetzelfde doet:
code:
1 2 3 4 5RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]
Oftewel: indien de opgevraagde file geen file of directory is, herschrijf alles naar index.php. Vervolgens kun je daar idd met $_SERVER["REQUEST_URI"] zelf parsen wat je wilt aan de opgegeven string.
Bij minder versatiele sites is het overigens vaak net zo handig om het rewritewerk puur in de htaccess te houden ipv in de code zelf.
het is namelijk voor mij bijna onnodig om de rewriterules te hebben, want alles moet naar mijn index.php gaan. Dit komt omdat alles zowiezo door mijn index.php geinclude moet worden.
dus als je tikt: www.eenswebsite.nl/kommaarop/
dan wil ik dat index.php aangeroepen wordt en dan het bestand kommaarop geinclude wordt.
A byte walks into a bar and orders a pint. Bartender asks him "What's wrong?" Byte says "Parity error." Bartender nods and says "Yeah, I thought you looked a bit off."
Dat is juist een ideale toepassing voor mod_rewrite?k0ewl schreef op dinsdag 25 juli 2006 @ 10:53:
dan wil ik dat index.php aangeroepen wordt en dan het bestand kommaarop geinclude wordt.
'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.
Dat is exact wat ik beschrijf lieverdk0ewl schreef op dinsdag 25 juli 2006 @ 10:53:
[...]
nou, het is eigenlijk niet wat ik bedoelde,
het is namelijk voor mij bijna onnodig om de rewriterules te hebben, want alles moet naar mijn index.php gaan. Dit komt omdat alles zowiezo door mijn index.php geinclude moet worden.
dus als je tikt: www.eenswebsite.nl/kommaarop/
dan wil ik dat index.php aangeroepen wordt en dan het bestand kommaarop geinclude wordt.
1
2
3
| echo "<pre>"; print_r($_SERVER); echo "</pre>"; |
Ziet er duidelijk uit, maar toch heb ik nog 1 opmerking. In veel pagina's heb ik terugkomende stukken layout. Laten we als voorbeeld even een useronline text nemen. Als ik vervolgens url/taal/categorie/id aanroep, waar roep ik dan het stukje logic aan van $users online?T-MOB schreef op dinsdag 25 juli 2006 @ 08:09:
[...]
Index PHP ziet er ongeveer zo uit - ik denk dat dat wel ongeveer is wat jij bedoeld met een bootstrap file.
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 <?php require_once 'framework/init.php'; $URL = &URLhandler::getInstance(); $moduleType = (!empty($URL->uriArgs[0])) ? $URL->uriArgs[0] : ''; //try to fetch the correct module $module = moduleFactory::getModule($moduleType); //init the module if (!is_null($module) && $module->init($URL->uriArgs)) { if (empty($module->isIndependant)) { $outputHandler = new output(); $outputHandler->content = &$module; $outputHandler->render(); } } else { $module = moduleFactory::getModule('404'); $module->init(); } ?>
De URLhandler zorg voor het afhandelen van het URL (doh). Op basis van de eerste parameter wordt een module geladen. Als de module afhankelijk is dan wordt ie doorgegeven aan een outputhandler die boel combineerd met templates e.d. Is de module onafhankelijk dan genereerd ie zijn eigen content (bijvoorbeeld om afbeeldingen te serveren).
Qua copy-paste valt het reuze mee. Een module extend op een basisklasse en voor de rest hoef ik eigenlijk alleen zorg te dragen voor de juiste data.
triviaal voorbeeldje, maar dat is voor mij echt elke keer een struikelblok om deze structuur te gebruiken. Ik blijf dan altijd maar in alle modules code copy pasten / files includen, omdat ik dat toevallig ook nodig heb. Dat is imho niet optimaal.
btje topic kaping dit
[ Voor 9% gewijzigd door megamuch op 25-07-2006 14:19 ]
Verstand van Voip? Ik heb een leuke baan voor je!
Ik snap je voorbeeldje niet helemaal - en het probleem denk ik ook niet. Zaken die op elke pagina voorkomen implementeer ik in de basisklasse waarop de modules uitbreidingen zijn. Wil ik op elke pagina een tellertje weer (kunnen) geven met het aantal users dan zal ik in de basisklasse dus een methode getUsersOnline() implementeren die dat nummertje (of een object met statistieken) teruggeeft. Het template bepaalt of usersOnline weergegeven moet worden (en dus of de logica erachter moet worden uitgevoerd).megamuch schreef op dinsdag 25 juli 2006 @ 14:19:
[...]
Ziet er duidelijk uit, maar toch heb ik nog 1 opmerking. In veel pagina's heb ik terugkomende stukken layout. Laten we als voorbeeld even een useronline text nemen. Als ik vervolgens url/taal/categorie/id aanroep, waar roep ik dan het stukje logic aan van $users online?
offtopic:
btje topic kaping dit
Regeren is vooruitschuiven