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

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

0
1. Роман 18.02.2008 / 12:18
РНР-кодер
В данной теме предлагаю выкладывать именно полезные куски кода, которые в последствии юзеры смогут просто скопировать и вставить в свои скрипты и не создавать повторяющихся тем, вопросы в которых уже не раз обсуждались на форуме.
Уважаемые пользователи!
Просим вас вставлять код исключительно с тегами [code]
Внимание! Вопросы в этой теме запрещены!
Изменил: Azzido (18.08.2015 / 16:19)
0
2. Роман 22.02.2008 / 16:41
РНР-кодер
Функция сортировки файлов в директории по времени добавления:
<?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
3. Tony V 26.02.2008 / 13:54
Транклюкаторщик
Функция вывода приветствия на сайте:
<?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
4. Tony V 03.03.2008 / 11:18
Транклюкаторщик
Функция показа расширения файла заданного в параметре
<?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
5. Павел 13.03.2008 / 18:34
Чатланин
Функция вывода случайного пароля


<?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
6. Удаленный 15.05.2008 / 17:06
Дух

<?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
7. Удаленный 28.03.2009 / 20:02
Дух
получение русск языч варианта окончания 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
8. Удаленный 28.03.2009 / 20:05
Дух
ф-ия проверки пароля на безопастность

/*
Задача:
Написать функцию проверки пароля на безопасность
* длина не меньше 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
9. Артур 23.11.2009 / 19:12
Землянин

<?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;
}
}

Это пародия на предыдущую ф-ю, только на ООП. Не тестил, не знаю будет ли работать но вроде всё правильно ).gif если что - по голове сильно не бить
Таблица с полями name, file, pack
name - смайл
file - путь к смайлу, аля smile.png
pack - пак смайлов.
Использование
$smiles = new Smiles($smilepack);
$text = $smiles->replace($text);
0
10. Николай 29.12.2009 / 01:31
Персональный статус
Ф-я удаления файлов через определенное время из директории

<?
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)
Для выполнения действия необходимо авторизоваться!
Стикеры / Теги / Правила / Топ тем / Топ тем / Поиск