Ionut Stoica

Programator PHP / Frontend developer / Pasionat de Electronica Auto
5Jul

One file application

Sau cum sa ai un site cu un singur fisier principal…

Asa cum fac cele mai multe CMS-uri din ziua de azi, un one file application nu inseamna o aplicatie cu un singur fisier, ci o aplicatie cu un singur fisier PUBLIC.

Cum facem asta? pai e simplu. In loc sa urmarim variabilele superglobale $_GET ne folosim de 2 variabile superglobale $_SERVER, si anume $_SERVER[‘REDIRECT_URL’] si $_SERVER[‘PHP_SELF’]. Cu ajutorul unui fisier .htaccess (in apache) redirectam tot traficul de pe paginile inexistente catre fisierul aplicatiei (se poate numi oricum, nu are importanta).

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

Dupa ce avem tot traficul pe index.php ne putem ocupa de generarea continutului, dar mai intai trebuie sa stim ce ni s-a cerut. Asadar, din cele 2 variabile superglobale scoatem bucatile de URL.

$fara_index = str_replace('index.php','', $_SERVER['PHP_SELF']);
$url_efectiv = trim(str_replace($fara_index, '', @ $_SERVER['REDIRECT_URL']));
$ultimul_caracter = substr($url_efectiv, strlen($url_efectiv) - 1, 1);
if($ultimul_caracter == '\\' || $ultimul_caracter == '/'){
      $url_efectiv = substr($url_efectiv, 0, strlen($url_efectiv) - 1);
}

Ok, avem url-ul, acum trebuie sa il “spargem” in chei si valori (putem sa folosim direct fiecare bucata din URL, dar daca vom inlocui ordinea parametrilor aplicatia noastra nu va mai functiona).

$parts = explode('/', $url);
$P = array();
	if($parts){
		foreach($parts as $p){
			$P[] = $p;
		}
		unset($parts); $parts = array();
		for($i=0; $i< count($P); $i++){
			if($i%2 == 0){
				$parts[$P[$i]] = @ $P[$i + 1];
			}
		}
	}

Acum avem variabila $parts ce contine chei si valori.

Comments(0)

Leave a comment

Your email address will not be published.Field is required

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 Previous  All works Next