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

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


[̲̅$̲̅(̲̅ιοο̲̅)̲̅$̲̅
0
Отправка сообщений на email
<?php 
function mail_send($email, $smail, $subject, $message, $info = '', $pr = '') 
{ 
$email = text_filter( $email ); 
$smail = text_filter( $smail ); 
$subject = text_filter( $subject ); 
$pr = ( !$pr ) ? 3 : intval( $pr ); 
if( $info ) $message = $message . ' ' . _IP . ': '. getip() . ' ' . _BROWSER . ': ' . getagent(); 
$mheader = 'MIME-Version: 1.0n' 
.'Content-Type: text/html; charset=' . _CHARSET . 'n' 
.'Content-Transfer-Encoding: 8bitn' 
.'Reply-To: "' . $smail .'" <' . $smail .'>n' 
.'From: "' . $smail .'" <' . $smail .'>n' 
.'Return-Path: <' . $smail .'>n' 
.'X-Priority: ' . $pr .'n' 
.'X-Mailer: CMS Mailern'; 
return mail( $email, $subject, $message, $mheader ); 
?>
Отправка сообщений на email
$info - указываем true, чтобы в письмо добавилась информация о IP и браузере пользователя
$pr - приоритет письма 1..5


Добавлено через 01:56 сек.
Защита от XSS
<?php
function antihack(&$var){ 
if(is_array($var)) array_walk($var, 'antihack'); 
else $var = htmlspecialchars(stripslashes(mysql_real_escape_string($var)), ENT_QUOTES, 'UTF-8'); 
} 
foreach(array('_SERVER', '_GET', '_POST', '_COOKIE', '_REQUEST') as $v){ 
if(!empty(${$v})) array_walk(${$v}, 'antihack'); 
} 
?>

Добавлено через 04:08 сек.
Защита от прямых ссылок
<?php
# Защита от прямых ссылок 
# автор: Nc_Soft 
# 05.07.09 
# Это позволит скачать ваш файл только с вашего сайта. 
# надо создать вот такой .htaccess 

RewriteEngine on 
RewriteBase / 

# если надо разрешить скачку при пустом рефере раскомментируйте это 
# RewriteCond %{HTTP_REFERER} !^$ 

# Дальше список идет набор разрешенных доменов 
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?snippets.pp.ru [NC] 
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?wen.ru [NC] 

# Форматы файлов, для которых устанавливается защита (например, mp3) 
RewriteRule .(mp3)$ http://ya.ru 

#Все запросы на http://snippets.pp.ru/1.mp3 перекинутся на http://ya.ru
?>
# Это позволит скачать ваш файл только с вашего сайта.
# надо создать вот такой .htaccess
Изменил: Azzido (24.01.2020 / 06:31)

[̲̅$̲̅(̲̅ιοο̲̅)̲̅$̲̅
0
Антиреклама
<?php 

function antispam_help($text) 

{ 

$dom = array('www\.','wap\.'); //поддомены 

if(preg_match('#^(https?|ftp)://('.implode('|',$dom).')?'.str_replace('.', '\.', $_SERVER['SERVER_NAME']).'#', $text[0])) 

return '<a href="'.$text[0].'">'.$text[0].'</a>'; 

else 

return '[реклама]'; 

} 



function antispam($text) 

{ 

return preg_replace_callback("#(https?|ftp)://\S+[^\s.,>)\];'\"!?]#", 'antispam_help', $text); 

} 

?>
Функция антиспама. Заменяет все левые ссылки на слово [реклама], а остальные подсвечивает.
Применение:
echo antispam($text);
Где $text - ваш текст.


Добавлено через 01:05 сек.
Функция проверки пароля на безопастность
<?php
/* 
Задача: 
Написать функцию проверки пароля на безопасность 
* длина не меньше 6 символов 
* должен содержать и символы и числа 
* не должен содержать больше (>=) 3 линейно расположенных на клавиатуре символов или цифр, например таких как "lkj" или "cvb" 
* если пароль безопасен - вернуть истину, нет - ложь 
*/ 
functionisGood ($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; 
}
?>


Добавлено через 02:49 сек.
Вывод даты нормальным русским языком
<?php
function rusdate($d) 
{ 
$montharr = array("января","февраля","марта","апреля","мая","июня","июля","августа","сентября","октября","ноября","декабря");
$i = date("m",$d) - 1; 
return date("j",$d)." $montharr[$i] ".date("Y",$d); 
}
?>


[̲̅$̲̅(̲̅ιοο̲̅)̲̅$̲̅
0
Перевод секунд в дни(функция из WAP-MotoR)
<?php 
function makestime($string) { 

$day=floor($string/86400); 
$hours=floor(($string/3600)-$day*24); 
$min=floor(($string-$hours*3600-$day*86400)/60); 
$sec=$string-($min*60+$hours*3600+$day*86400); 

return $day.' дн. '.$hours.':'.$min.':'.$sec; 
} 
?>

Добавлено через 00:46 сек.
Определяем часть дня
<?php 
function hi(){ 
$h=date('H'); 
$i=date('i'); 
if ($h>=0 && $h<=4){$hi='Доброй ночи!'; } 
elseif ($h>4 && $h<=12){$hi='Доброе утро!';} 
elseif ($h>=12 && $h<=17){$hi='Добрый день!';} 
elseif ($h>=17 && $h<=22){$hi='Добрый вечер!';} 
elseif ($h>=22 && $h<=23){$hi='Доброй ночи!';} 
return $hi;} 
?>
Определение утра, дня, вечера и ночи

Добавлено через 02:06 сек.
Создание скриншота сайта
<?php 
$browser = new COM("InternetExplorer.Application"); 
$handle = $browser->HWND; 
$browser->Visible = true; 
$browser->Navigate("http://ya.ru"); 
while ($browser->Busy) { 
com_message_pump(4000); 
} 
$im = imagegrabwindow($handle, 0); 
$browser->Quit(); 
imagepng($im, "iesnap.png"); 
?>
Создание скриншота сайта
Работает под виндой на PHP 5 >= 5.2.2


Добавлено через 07:31 сек.
Функция Антимата

<?php 
//Маты записываёте в antmat.dat
function antimat($msg) { 
if (file_exists("antimat.dat")) { 
$mat = file_get_contents("antimat.dat"); 
$arr_mat = explode("|",$mat); 
foreach($arr_mat as $value) { 
if($value != "") { 
$msg = preg_replace("|$value|iu","***",$msg); 
}}} 
return $msg; 
} 
?>


[̲̅$̲̅(̲̅ιοο̲̅)̲̅$̲̅
0
Функция BBCode
<?php 

function bbcode($var = '') 

{ 

$var = strip_tags($var); 

$var = ereg_replace("&", "&amp;", $var); 

$var = ereg_replace("\[br\]", "<br/>", $var); 

$var = preg_replace('#\[b\](.*?)\[/b\]#si', '<span style="font-size: 20px">\1</span>', $var); 

$var = preg_replace('#\[img\](.*?)\[/img\]#si', '<a href=\"\1\" title=\"Нажмите для масштабирования\"><img src=\"\1\" width=\"100\" height=\"100\" alt=\"Картинка\"/></a>', $var); 

$var = preg_replace('#\[i\](.*?)\[/i\]#si', '<i>\1</i>', $var); 

$var = preg_replace('#\[u\](.*?)\[/u\]#si', '<u>\1</u>', $var); 

$var = preg_replace('#\[s\](.*?)\[/s\]#si', '<strike>\1</strike>', $var); 

$var = preg_replace('#\[red\](.*?)\[/red\]#si', '<font color="#ff7900">\1</font>', $var); 

$var = preg_replace('#\[green\](.*?)\[/green\]#si', '<font color="#00FF00">\1</font>', $var); 

$var = preg_replace('#\[blue\](.*?)\[/blue\]#si', '<font color="#0000FF">\1</font>', $var); 

$var = preg_replace('#\[url=(.*?)\](.*?)\[/url\]#si', '<a href="\1">\2</a>', $var); 

return $var; 

} 

?>


[̲̅$̲̅(̲̅ιοο̲̅)̲̅$̲̅
0
Функция для наложения водяного знака на изображение.
Передается 2 параметра: $file – путь до исходного изображения, $watermark – путь до картинки-водяного знака.
После того, как функция отработает, поверх исходного файла в нижнем правом углу появляется водяной знак.


<?php 
function watermark($file, $watermark) { 
    if(empty($file) | empty($watermark)) return false; 
    $wh = getimagesize($watermark); 
    $fh = getimagesize($file); 
    $rwatermark = imagecreatefromjpeg($watermark);  
//Иногда может понадобиться наложить прозрачный png, тогда заменяем функцию на imagecreatefrompng 
    $rfile = imagecreatefromjpeg($file); 
    imagecopy($rfile, $rwatermark, $fh[0] - $wh[0], $fh[1] - $wh[1], 0, 0, $wh[0], $wh[1]); 
    imagejpeg($rfile, $file, '100'); 
    imagedestroy($rwatermark); 
    imagedestroy($rfile); 
    return true; 
} 
watermark('1.jpg', '2.jpg'); //Теперь 1.jpg в нижнем правом углу обляпался 2.jpg 
?> 

Добавлено через 02:29 сек.
Функция для изменения размеров изображения.
Передается 4 параметра: $file – путь до исходного изображения, $out – путь, куда сохранить изображение с новым размером, $w – ширина на выходе, $q – качество.
<?php
function resize_image($file, $out, $w = 200, $q = 90) {
    if(empty($file) | empty($out)) return false;
    $src = imagecreatefromjpeg($file);
    $w_src = imagesx($src);
    $h_src = imagesy($src);
    $ratio = $w_src/$w;
    $w_dest = round($w_src/$ratio);
    $h_dest = round($h_src/$ratio);
    $dest = imagecreatetruecolor($w_dest, $h_dest);
    imagecopyresampled($dest, $src, 0, 0, 0, 0, $w_dest, $h_dest, $w_src, $h_src);
    imagejpeg($dest, $out, $q);
    imagedestroy($dest);
    imagedestroy($src);
    return true;
}
resize_image('1.jpg', '2.jpg', 200, 50); //Изменяет размер картинки 1.jpg, лежащей в одной папке со скриптом, уменьшенное изображение сохраняет как 2.jpg


?>
K

Транклюкаторщик
0
<?php
# защита входных данных (для POST данных, пришедших от юзера)
function check_in($var){
return mysql_real_escape_string(trim(htmlentities($var, ENT_QUOTES, 'UTF-8')));
}

// пример
$_POST = array_map('check_in',$_POST);
$_POST['text'] = check_in($_POST['text']);

# проверка длины строки (от $min символов до $max)
function check_strlen($string,$min,$max){
$a =  filter_var(x_strlen($string), FILTER_VALIDATE_INT, array('options'=>array('min_range'=>$min,'max_range'=>$max)));
return ($a !== false) ? true : false;
}

// пример
if(check_strlen($_POST['text'],3,100)){echo 'Строка от 3 до 100 символов включительно';}

# преобразовывает число меньшее нуля в 1 
function more_zero($var){
$var = abs(intval($var));
return ($var<=0) ? 1 : $var;
}

# постраничная навигация (использует предыдущую функцию more_zero() )
function navigation($p,$onpage,$count){

$pages = (int) ceil($count / $onpage); # всего страниц
$start = (int) ($p-1) * $onpage; # стартовая позиция
$end = (int) more_zero($p * $onpage); # конечная позиция

return array('start'=>$start,'end'=>$end,'pages'=>$pages);
}

// пример

$page = (isset($_GET['p'])) ? more_zero($_GET['p']) : 1; // текущая страница
$arr = range(0,100); // массив выводимых элементов, могут быть имена файлов, итд итп, в данном случае - цифры от 0 до 100
$arr_onpage = 10; // по 10 штук на страницу
$arr_count = count($arr);

$nav = navigation($page,$arr_onpage,$arr_count);

for($i=$nav['start'];$i<=$nav['end'];$i++){
if(!array_key_exists($i,$arr)){continue;}
echo $arr[$i].'<br />';
}

if($nav['pages']>1){

if($p>1) {echo '<a href="?p=1"><big>&laquo;</big></a> ... <a href="?p='.($p-1).'">Назад</a> ';}
echo '&#8226;';
if($p<$nav['pages']) {echo ' <a href="?p='.($p+1).'">Далее</a> ... <a href="?p='.$nav['pages'].'"><big>&raquo;</big></a>';}


}



?>
Изменил: Azzido (24.01.2020 / 06:31)
В

Кодер
0
<?php
$count = 0;
function countf($dir) {
	static $count;
	foreach(glob($dir) as $obj) {
		if(is_file($obj) and $obj != '.' and $obj != '..') {
			$count += 1;
		} else {
			countf($obj . '/*');
		}
	}
	return $count;
}

echo countf('content');
?>
с рекурсивом
Изменил: Azzido (24.01.2020 / 06:34)

Персональный статус
0
функция шифрования пароля
<?php
function crypt_apr1_md5($plainpasswd) {
    $salt = substr(str_shuffle("abcdefghijklmnopqrstuvwxyz0123456789"), 0, 8);
    $len = strlen($plainpasswd);
    $text = $plainpasswd.'$apr1$'.$salt;
    $bin = pack("H32", md5($plainpasswd.$salt.$plainpasswd));
    for($i = $len; $i > 0; $i -= 16) { $text .= substr($bin, 0, min(16, $i)); }
    for($i = $len; $i > 0; $i >>= 1) { $text .= ($i & 1) ? chr(0) : $plainpasswd{0}; }
    $bin = pack("H32", md5($text));
    for($i = 0; $i < 1000; $i++) {
        $new = ($i & 1) ? $plainpasswd : $bin;
        if ($i % 3) $new .= $salt;
        if ($i % 7) $new .= $plainpasswd;
        $new .= ($i & 1) ? $bin : $plainpasswd;
        $bin = pack("H32", md5($new));
    }
    for ($i = 0; $i < 5; $i++) {
        $k = $i + 6;
        $j = $i + 12;
        if ($j == 16) $j = 5;
        $tmp = $bin[$i].$bin[$k].$bin[$j].$tmp;
    }
    $tmp = chr(0).chr(0).$bin[11].$tmp;
    $tmp = strtr(strrev(substr(base64_encode($tmp), 2)),
    "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
    "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz");
    return "$"."apr1"."$".$salt."$".$tmp;
}
?>
3

Оранжевые штаны
0
Подсчёт возраста по дате рождения
<?php 
function calc_age($d, $m, $y) 
{ 
$age = date('Y') - $y; 
$_m = date('m'); 
if($_m < $m || ($_m == $m && date('d') < $d)) 
$age--; 
return $age; 
}
## Вызов: 
echo calc_age(13, 06, 1993);  // Число , Месяц, Год
?>

Пришелец
0
80. Давай упрощу эту функцию:

<?php 
function calc_age($d, $m, $y)  {
return date('Y', time()-mktime(0,0,0,$m,$d,$y))-1970; 
}
## Вызов: 
echo calc_age(13, 6, 1993);
?>

Ну это для тех, кто моложе 1970 ))
Изменил: halsoft (23.12.2011 / 11:16)
Стикеры / Теги / Правила / Топ тем / Топ постов / Поиск