Полезные функции РНР (1 пост)

Печать RSS
1643
Кураторы темы:

Р
Автор
РНР-кодер
0
В данной теме предлагаю выкладывать именно полезные куски кода, которые в последствии юзеры смогут просто скопировать и вставить в свои скрипты и не создавать повторяющихся тем, вопросы в которых уже не раз обсуждались на форуме.
Уважаемые пользователи!
Просим вас вставлять код исключительно с тегами [code]
Внимание! Вопросы в этой теме запрещены!
Изменил: Azzido (18.08.2015 / 16:19)
Р
Автор
РНР-кодер
0
Функция сортировки файлов в директории по времени добавления:
<?php
function sort_files($dir)
{
    $d = dir($dir);
    while ($f = readdir($d)) {
        if ($f != '.' && $f != '..') {
            if (is_dir($dir . '/' . $f))
                $arr += sort_files($dir . '/' . $f);
            else {
                $t       = filemtime($dir . '/' . $f);
                $arr[$t] = $f;
            }
        }
    }
    close($d);
    krsort($arr);
    return $arr;
}
?>
Функция в результате выдаст массив с именами файлов в порядке "новые вверху".
Изменил: Azzido (18.08.2015 / 16:29)

Транклюкаторщик
0
Функция вывода приветствия на сайте:
<?php
function greeting($_lang = "ru", $_offset = "")
{
    $lang = array(
        'ru' => array(
            'morning' => 'Доброе утро!',
            'afternoon' => 'Добрый день!',
            'evening' => 'Добрый вечер!',
            'night' => 'Доброй ночи!'
        ),
        'en' => array(
            'morning' => 'Good morning!',
            'afternoon' => 'Good afternoon!',
            'evening' => 'Good evening!',
            'night' => 'Good night!'
        )
    );
    
    if (empty($_offset)) {
        // Если время на Вашем сервере отличается от Вашего, поменяйте сдвиг в переменной $offset 
        $_offset = 0;
    }
    if (empty($_lang)) {
        // язык по умолчанию 
        $_lang = 'ru';
    }
    
    // $curr_hour = текущий час 
    $curr_hour = date('G', time() + (60 * 60 * $_offset));
    
    if ($curr_hour >= "5" && $curr_hour <= "11") {
        // если текущий час больше 5 и менее 11 
        return $lang[$_lang]['morning'];
    } elseif ($curr_hour >= "12" && $curr_hour <= "17") {
        // если текущий час больше 12 и менее 17 
        return $lang[$_lang]['afternoon'];
    } elseif ($curr_hour >= "18" && $curr_hour <= "20") {
        // если текущий час больше 18 и менее 20 
        return $lang[$_lang]['evening'];
    } else {
        // все другие случаи 
        return $lang[$_lang]['night'];
    }
}
?>
<?php
// Выводим результат
echo greeting();
?>
Изменил: Azzido (18.08.2015 / 16:33)

Транклюкаторщик
0
Функция показа расширения файла заданного в параметре
<?php
function pathinfo_utf($path, $options="") { 
	if(strpos($path, '/') !== false){
		$basename = end(explode('/', $path));
	}elseif(strpos($path, '\\') !== false){
		$basename = end(explode('\\', $path));
	}else{
		return(false);
	}
	if(empty($basename))	{
		return(false);
	}

	$dirname = substr($path, 0, strlen($path) - strlen($basename) - 1);

	if (strpos($basename, '.') !== false)
	{
		$extension = end(explode('.', $path));
		$filename = substr($basename, 0, strlen($basename) - strlen($extension) - 1);
	}
	else
	{
		$extension = '';
		$filename = $basename;
	}
	
	switch($options){
		case PATHINFO_DIRNAME:
			return($dirname);
		break;
		case PATHINFO_BASENAME:
			return($basename);
		break;
		case PATHINFO_EXTENSION:
			return($extension);
		break;
		case PATHINFO_FILENAME:
			return($filename);
		break;
		default:
			return(
				array(
					'dirname' => $dirname,
					'basename' => $basename,
					'extension' => $extension,
					'filename' => $filename
			));
		break;
	}
}

function extension($file){
	if(function_exists('pathinfo_utf')){
		$ext = pathinfo_utf($file, PATHINFO_EXTENSION);
	}else{	
		$ext = pathinfo($file, PATHINFO_EXTENSION);
	}
	$ext = strtolower($ext);
	return($ext);
}
?>
Пример работы:
<?php
$fileext=extension("file.exe"); // $fileext равно exe
$fileext=extension("FILE.sub.ExE"); // $fileext равно exe
?>
Изменил: Tony V (16.06.2010 / 15:27)

Чатланин
0
Функция вывода случайного пароля

<?php
function genPass($size)
{
$letter = 'qwertyuipasdfghjklzxcvbnm';
$letter .= strtoupper($letter);
$letter .= '123456789';
	
mt_srand((double)microtime()*1000000);
$pass = "";
for ($i = 0; $i < $size; $i++)
$pass .= $letter[mt_rand(0, strlen($letter)-1)];
return $pass;
}
?>
Изменил: Azzido (14.08.2012 / 20:21)

Дух
0
<?php
/* рекурсивная функция спускается по каталогу
   и переименовывает файлы с расширениемя из $ext_arr по маске 001.расширение ..
   писал по просьбе знакомого,может кому пригодится )
*/
function my_rename($dirname)
{
    $ext_arr = array('jpeg', 'jpg', 'gif');
    $dir = opendir($dirname);
    $count = 1;
    while (($file = readdir($dir)) !== false) {
        if (is_file($dirname . '/' . $file)) {
            $info = pathinfo($dirname . '/' . $file);
            if (in_array(strtolower($info['extension']), $ext_arr)) {
                rename($dirname . '/' . $file, $dirname . '/' . str_pad($count, 3, '0', STR_PAD_LEFT) . '.' . strtolower($info['extension']));
                $count ++ ;
            }
        } elseif (is_dir($dirname . '/' . $file) && $file != '.' && $file != '..')my_rename($dirname . '/' . $file);
    }
    closedir($dir);
}
# пример использования
$dir = 'papka';
my_rename($dir);
?>

Дух
0
получение русск языч варианта окончания new
<?php
/**
* @desc Функция получения русскоязычного варианта окончания для переданного числа
* @param float $value Число, для которого надо подобрать окончание
* @param array $names Массив имён вида [0]имя одного; [1]имя от 2 до 4; [2]имя 0 и от 5 до 20
* @return string Возвращает соответствующее числу слово
*/
function getNumberWord($value,$names){
    $temp = strval($value);
    $temp = $temp[strlen($temp)-1];
    return (($temp>1 and $temp <5 and (intval($value)>19 or intval($value)<10))?$names[1]:($temp==1?$names[0]:$names[2]));
}
 
// Пример работы
$old = '21;
echo 'Мне '.$old.' '.getNumberWord($old,array("год","года","лет"));
 
?>

Дух
0
ф-ия проверки пароля на безопастность
/*
Задача:
Написать функцию проверки пароля на безопасность
 * длина не меньше 6 символов
 * должен содержать и символы и числа
 * не должен содержать больше (>=) 3 линейно расположенных на клавиатуре символов или цифр, например таких как "lkj" или "cvb"
 * если пароль безопасен — вернуть истину, нет — ложь
*/
 
function isGood ($pass)
{
    $kbStrings = array('1234567890','qwertyuiop','asdfghjkl','zxcvbnm',
                       '0987654321','poiuytrewq','lkjhgfdsa','mnbvcxz');
    $isGood = false;
    if (strlen($pass) >= 6) {
        if (preg_match('/[a-z]/i',$pass) && preg_match('/[0-9]/',$pass)) {
            $count = strlen($pass) - 2;
                        $isGood = true;
                    } else {
                        $isGood = false;
                        break 2;
                    }
                }
            }
        }
    }
    return $isGood;
}

Землянин
0
<?php
class Smiles
{
private $data = array();
private $pack = 'default';
public function __construct($pack)
{
$q = mysql_query('SELECT `name`, `file` FROM `smiles` WHERE `pack` = "'.$pack.'"');
while($i = mysql_fetch_assoc($q))
$this->data[$i['name']] = $i['file'];
$this->pack = $pack;
}
public function replace($text)
{
foreach($this->data as $key=>$val)
$text = str_replace($key, '<img src="/smiles/'.$this->pack.'/'.$val.'"/>', $text);
return $text;
}
}
Это пародия на предыдущую ф-ю, только на ООП. Не тестил, не знаю будет ли работать но вроде всё правильно smile если что - по голове сильно не бить
Таблица с полями name, file, pack
name - смайл
file - путь к смайлу, аля smile.png
pack - пак смайлов.
Использование
$smiles = new Smiles($smilepack);
$text = $smiles->replace($text);

Персональный статус
0
Ф-я удаления файлов через определенное время из директории
<?
function old($papka,$times){ 
$old_time = time()-60*$times;
$dir = opendir ($papka); 
while ($file = readdir ($dir)) { 
if (( $file != ".") && ($file != ".."))
$files[]="$papka/$file"; 
$time[]=filemtime("$papka/$file" );
} 
closedir ($dir); 
$count_files = count($files); 
for($i = 1; $i< $count_files; $i++){   
if($time[$i] <= $old_time){
@unlink($files[$i]);
}
}
}
?>
далее
<?
old('papka',30);//// будет удалять файлы которые лежат на севрере больше 30 минут, papka наша директория с файлами 
?>
проверял вроде все правильно теперь, можно использовать например для чистки кеша на сайте автоматически или удалять какието временные файлы которые через некоторое время не нужны на сервере.
Изменил: Azzido (18.08.2015 / 16:35)
Стикеры / Теги / Правила / Топ тем / Топ постов / Поиск