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
}
Publica acest articol pe Twitter
Articole asemanatoare: