Полезные функции РНР (1 пост)
1542
Кураторы темы:
Azzido
0
Отправка сообщений на email
$info - указываем true, чтобы в письмо добавилась информация о IP и браузере пользователя
$pr - приоритет письма 1..5
Добавлено через 01:56 сек.
Защита от XSS
Добавлено через 04:08 сек.
Защита от прямых ссылок
# надо создать вот такой .htaccess
<?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
Антиреклама
Применение:
echo antispam($text);
Где $text - ваш текст.
Добавлено через 01:05 сек.
Функция проверки пароля на безопастность
Добавлено через 02:49 сек.
Вывод даты нормальным русским языком
<?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)
Добавлено через 00:46 сек.
Определяем часть дня
Добавлено через 02:06 сек.
Создание скриншота сайта
Работает под виндой на PHP 5 >= 5.2.2
Добавлено через 07:31 сек.
Функция Антимата
<?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("&", "&", $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 – путь до картинки-водяного знака.
После того, как функция отработает, поверх исходного файла в нижнем правом углу появляется водяной знак.
Добавлено через 02:29 сек.
Функция для изменения размеров изображения.
Передается 4 параметра: $file – путь до исходного изображения, $out – путь, куда сохранить изображение с новым размером, $w – ширина на выходе, $q – качество.
Передается 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 ?>
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>«</big></a> ... <a href="?p='.($p-1).'">Назад</a> ';} echo '•'; if($p<$nav['pages']) {echo ' <a href="?p='.($p+1).'">Далее</a> ... <a href="?p='.$nav['pages'].'"><big>»</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; } ?>
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); // Число , Месяц, Год ?>
halsoft
23.12.2011 / 11:07
Пришелец
Пришелец
0
80. Давай упрощу эту функцию:
Ну это для тех, кто моложе 1970 ))
<?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)
Для выполнения действия необходимо авторизоваться!