Superglobala variabler med PHP och Apache

Som PHP-utvecklare hamnar man som allra oftast i den situation där man behöver en fil med gemensamma variabler som inkluderas i alla filer. De kan innehålla sökvägar, databasuppgifter, etc. I denna artikeln ska jag gå igenom hur man kan göra att denna fil inkluderas automatiskt.

Problemet

Problemet infinner sig först när ens applikationer börjar växa. Har man bara en mapp med filer är det kanske inte hela världen att behöva skriva include('config.php');, men när man har mappar med mappar i, så får man skriva include('../../config.php');. Och det är knappast det bästa, med tanke på att sannolikheten att man flyttar på filer är ganska stor, och då ska man inte behöva ändra detta.

Lösningen

Lösningen är att använda sig av .htaccess i Apache. Det kan visserligen tyckas vara mindre bra att binda en hel applikation till att enbart fungera med Apache, men det är ganska osannolikt att man skulle behöva flytta applikationen dit Apache inte går att få. Vet man dock med sig att det finns en risk att applikationen kommer att göras på IIS, så ska man nog inte använda denna lösningen.

I alla fall, i .htaccess lägger du till raden:

php_value auto_prepend_file C:/path/path/config.php

Det gör att filen config.php inkluderas överst på alla sidor, vilket gör att alla variabler i config.php blir tillgängliga på alla sidor. De blir alltså ungefär som $_SERVER-arrayen, superglobala. Det är alltså precis som att skriva include('config.php');, men det sköts automatiskt. Config.php kan se ut så här:

<?php
$cfg['db']['server'] = 'localhost';
$cfg['db']['user'] = 'root';
$cfg['db']['pwd'] = '';
?>

Vilken annan sida som helst kan sen se ut så här:

<?php
$db = mysql_connect	(
			$cfg['db']['server'], 
			$cfg['db']['user'], 
			$cfg['db']['pwd']
			);
?>

Detta kan självfallet användas på alla möjliga olika sätt. Har du en egen server som du låter andra ha webbsidor på, men du vill försäkra dig om att det står en länk till dig på alla sidor, så kan du använda detta sätt. Vill du hellre lägga till något längst ner på alla sidor, så skriver du auto_append istället auto_prepend.

Avslutning

Vill du, så kan du utveckla detta till något ganska avancerat. Istället för att inkludera en config-fil så kan du inkludera en fil som beroende på något villkor inkluderar olika config-filer. Du kan t.ex. se till att alla filer med inc. eller class. i början av filnamnet får egna config-filer. T.ex:

.htaccess
---------
php_value auto_prepend_file C:/path/switchbox.php

switchbox.php
-------------
<?php
$prefix = basename($_SERVER['SCRIPT_FILENAME']):
$prefix = substr($prefix, 0, strpos($prefix, '.'));
switch($prefix)
{
	case 'class':
		include('C:/path/classconfig.php');
		break;
	case 'inc':
		include('C:/path/incconfig.php');
		break;
	default:
		include('C:/path/defaultconfig.php');
		break;
}
?>

Bygg dock inte allt för mycket runt det, förutom om du är helt säker på att du alltid kommer att kunna använda dig av .htaccess. Detta kan bli din bästa vän, men också din värsta fiende ifall du tvingas byta till någon annan webbserver.

Externa resurser:
.htaccess-guide

Skriven av:
Anders Ekdahl, Ekdahl IT
Webbplats: Webbdesign


Se fler PHP guider



kommenteraKommentarer    Antal 0    Medelpoäng 0/10

Bli medlem för att kunna skriva kommentarer!
Logga in om du redan är medlem.


Copyright © 2005 webbdesign.info    Cookies    Gratis statistik till hemsida    sitemap Webbdesign sitemap icon
Använd gärna våra RSS feeds:

Artikel Feed
[XML]
Forum Feed
[XML]

Svenska webhosts:
Svenska Webhotell

Använd gärna denna länk för att länka till oss:

Ny översättning:
Swedish affiliate programs

Är du medlem och vill synas här?
Hör av dig i vårt forum