ACCES INTERZIS | blog de programare si securitate IT


Ca tot am inceput sa vorbesc despre cod procedural reutilizabil am sa prezint cateva functii PHP foarte utile in orice proiect.

read_images() – citeste imaginile dintr-un folder de pe server si le incarca intr-un array

function read_images($folder, $allowed_extensions = NULL, $min_width = NULL, $max_width = NULL, $min_height = NULL, $max_height = NULL, $min_size = NULL, $max_size = NULL) {
	//-----specific valorile default
	$allowed_extensions = (isset($allowed_extensions)) ? $allowed_extensions : array('.jpg', '.jpeg', '.gif', '.png');
	$min_width          = (isset($min_width))          ? $min_width          : 1;
	$max_width          = (isset($max_width))          ? $max_width          : 10000;
	$min_height         = (isset($min_height))         ? $min_height         : 1;
	$max_height         = (isset($max_height))         ? $max_height         : 10000;
	$min_size           = (isset($min_size))           ? $min_size           : 1;
	$max_size           = (isset($max_size))           ? $max_size           : 10000;

	//-----initializez array-ul in care voi strange numele imaginilor de pe server
	$images = array();

	if (is_dir($folder)) {
		//-----deschid folderul de imagini pentru a-l citi
		if($handle = opendir ($folder)) {
			//-----citesc folderul
			while ($image_name = readdir($handle)) {
				//-----"." reprezinta folderul curent iar ".." reprezinta folderul anterior
				if ($image_name != '.' && $image_name != '..') {
					$image_extension = substr($image_name, strrpos($image_name,'.'),100);
					$image_extension = strtolower($image_extension);

					if (in_array($image_extension,$allowed_extensions)) {
						$properties = @getimagesize($folder.'/'.$image_name);
						$size = round(filesize($folder.'/'.$image_name) / 1024);

						if ($properties[0] >= $min_width  && $properties[0] <= $max_width &&
							$properties[1] >= $min_height && $properties[1] <= $max_height &&
							$size          >= $min_size   && $size          <= $max_size) {

							$images[] = $image_name;
						}
					}
				}
			}

			closedir($handle);
		}
	}

	return ($images);
}


Exemplu

<?php $slides = read_images('images/slides', array('.jpg', '.jpeg'), 600, 600, 270, 270); ?>
<pre><?php print_r($slides); ?></pre>

In acest exemplu am folosit functia pentru a incarca dinamic imaginile prezentate intr-un slider jQuery. Numai imaginile care au extensia .jpg sau .jpeg si care au EXACT 600px latime si EXACT 270px inaltime vor fi incarcate in sliderul jQuery.

Aceasta functie o mai pot folosi pentru a afla cate imagini se afla intr-un folder.

<?php echo count($slides); ?>

read_files() – citeste fisierele dintr-un folder de pe server si le incarca intr-un array

function read_files($folder, $allowed_extensions = NULL, $min_size = NULL, $max_size = NULL) {
	//-----specific valorile default
	$allowed_extensions = (isset($allowed_extensions)) ? $allowed_extensions : array('.php', '.css', '.js', '.html', '.htm');
	$min_size           = (isset($min_size))           ? $min_size           : 1;
	$max_size           = (isset($max_size))           ? $max_size           : 10000;

	//-----initializez array-ul in care voi strange numele fisierelor de pe server
	$files = array();

	if (is_dir($folder)) {
		//-----deschid folderul de fisiere pentru a-l citi
		if($handle = opendir ($folder)) {

			//-----citesc folderul
			while ($image_name = readdir($handle)) {
				//-----"." reprezinta folderul curent iar ".." reprezinta folderul anterior
				if ($image_name != '.' && $image_name != '..') {
					$image_extension = substr($image_name, strrpos($image_name,'.'),100);
					$image_extension = strtolower($image_extension);

					if (in_array($image_extension, $allowed_extensions)) {
						$size = filesize($folder.'/'.$image_name) / 1024;

						if ($size >= $min_size && $size <= $max_size) {
							$files[] = $image_name;
						}
					}
				}
			}

			closedir($handle);
		}
	}

	return ($files);
}

filter_this() – aplica filtre (trim, stripslashes, strip_tags, htmlentities, nl2br, mysql_real_escape_string etc.) pe date (array sau string)

function filter_this($data, $filters = array()) {
	if (is_array($data)) {
		$wrapped_data = array();

		foreach ($data as $k => $v) {
			foreach ($filters as $filter) {
				switch ($filter) {
					case 'htmlentities':
						$v = htmlentities($v, ENT_QUOTES, 'utf-8');
						break;

					default:
						$v = $filter($v);
				}
			}

			$wrapped_data[$k] = $v;
		}
	} else {
		foreach ($filters as $filter) {
			switch ($filter) {
				case 'htmlentities':
					$data = htmlentities($data, ENT_QUOTES, 'utf-8');
					break;

				default:
					$data = $filter($data);
			}
		}

		$wrapped_data = $data;
	}

	return ($wrapped_data);
}

Exemplu

$cookie = (isset($_COOKIE)) ? filter_this($_COOKIE, array('strip_tags', 'htmlentities')) : NULL;

In acest exemplu am aplicat filtrele strip_tags si htmlentities pe datele stocate in array-ul superglobal $_COOKIE ca sa ma asigur ca nu contin cod malitios. Se stie ca toate datele stocate de cookie-urile create de server pe PC-ul vizitatorilor pot fi manipulate si folosite malitios.

get_random_string() – genereaza aleatoriu un sir de caractere. Functia imi permite sa aleg numarul si tipul de caractere.

function get_random_string($length, $chars_type = array()) {
	if (count($chars_type) == 0) {
		$charset = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890123456789!@#$%^&*()!@#$%^&*()';
	} else {
		$lower_case = (in_array('lower_case', $chars_type)) ? 'abcdefghijklmnopqrstuvwxyz' : NULL;
		$upper_case = (in_array('upper_case', $chars_type)) ? 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' : NULL;
		$digits     = (in_array('digits', $chars_type))     ? '01234567890123456789'       : NULL;
		$symbols    = (in_array('symbols', $chars_type))    ? '!@#$%^&*()!@#$%^&*()'       : NULL;

		$charset = $lower_case.$upper_case.$digits.$symbols;
	}

	$string = '';

	for ($i = 1; $i <= $length; $i++) {
		$string .= substr($charset,rand(0,strlen($charset) - 1),1);
	}

	return ($string);
}

Exemplu

//-----functia va genera un sir de 10 caractere alcatuit din minuscule si majuscule
echo get_random_string(10, array('lower_case', 'upper_case'));

create_menu() – creeaza un meniu sub forma unei liste neordonate.

function create_menu($menu_id, $menu_btns = array()) {
	$result = '<ul id="'.$menu_id.'">'."\r\n";

	foreach ($menu_btns as $k => $v) {
		$result .= '<li id="'.substr($v, 0, strrpos($v, '.')).'-item">'."\r\n";

		$active_btn = (basename($_SERVER['PHP_SELF']) == $v) ? ' class="active-btn"' : '';

		$result .= '<a href="'.$v.'" title="'.$k.'" id="'.substr($v, 0, strrpos($v, '.')).'-btn"'.$active_btn.'>';
		$result .= $k;
		$result .= '</a>'."\r\n";
		$result .= '</li>'."\r\n\r\n";
	}

	$result .= '</ul>';

	return ($result);
}

Exemplu

$my_menu = array('Home'            => 'index.php',
				 'Who we are?'     => 'who-we-are.php',
				 'Make a donation' => 'make-a-donation.php',
				 'Our work'        => 'our-work.php',
				 'News & press'    => 'news-and-press.php',
				 'Contact us'      => 'contact-us.php');

echo create_menu('header-menu', $my_menu);

CSS-ul cu care stilizez lista neordonata:

ul#header-menu {
	list-style-type:none;
	position:absolute;
	bottom:10px;
	left:50px;
}

	ul#header-menu li {
		float:left;
		margin-right:35px;
	}

	ul#header-menu li#contact-us-item {
		margin-right:0 !important;
	}

		ul#header-menu li a {
			color:white;
		}

		ul#header-menu li a:hover, ul#header-menu li a.active-btn {
			color:#333;
		}

get_filepermis() – returneaza permisiile unui fisier

function get_filepermis($file) {
	return substr(decoct(fileperms($file)), 2);
}

Exemplu

echo get_filepermis('mysql_db.class.php');// 0666

redirect_to() – redirecteaza vizitatorul catre o alta pagina web si intrerupe executarea codului

function redirect_to($location) {
    header("Location:".$location);
    exit();
}

get_file_extension() – returneaza extensia unui fisier

function get_file_extension($filename) {
	if (strrpos($filename, '.')) {
		return substr($filename, strrpos($filename, '.'));
	} else {
		die('<strong>'.$filename.'</strong> isn\'t a valid file.');
	}
}

Exemplu

echo get_file_extension('mysql_db.class.php');// .php

get_filesize() – returneaza marimea in kb a unui fisier

function get_filesize($file) {
	return round((filesize($file)/1024));// size in kb
}

Post to Twitter Publica acest articol pe Twitter

Articole asemanatoare:

Publicat de: admin
Ultima modificare: Apr 20, 2010, 12:08

Etichete
Etichete:
Categorii: programare


 

Comentarii lasate » (0)

 
Lasa un comentariu

XHTML: Poti folosi urmatoarele taguri HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>