Достаём инфу из Java
<?php $jar = '1.jar'; $zip = new ZipArchive; if ($zip->open($jar) === TRUE) { $cont = $zip->getFromName('META-INF/MANIFEST.MF'); $midp=explode('MicroEdition-Profile: ',$cont); $midp=strtok($midp[1],' '); $config=explode('MicroEdition-Configuration: ',$cont); $config=strtok($config[1],' '); $version=explode('MIDlet-Version: ',$cont); $version=strtok($version[1],' '); $name=explode('MIDlet-Name: ',$cont); $name=strtok($name[1],' '); $vendor=explode('MIDlet-Vendor: ',$cont); $vendor=strtok($vendor[1],' '); $zip->close(); echo 'Название: '.$name.'<br/> Версия: '.$version.'<br/> Производитель: '.$vendor.'<br/> Профиль: '.$midp.'<br/> Конфигурация: '.$config; } ?> |
||
Анимация из видео
<?php $file = "file.avi"; $movie = new ffmpeg_movie($file); $gif=new ffmpeg_animated_gif("image.gif",100 ,100 ,24); for ($frame = 150; $frame <= 200; $frame++) { $image = $movie->getFrame($frame); $gif->addFrame($image);} ?> |
||
Винимаем иконку из Java-приложения
<?php if(!isset($_GET['jar']))exit; $zip = new ZipArchive; if ($zip->open(base64_decode($_GET['jar'])) === TRUE) { if($manifest = $zip->getFromName('META-INF/MANIFEST.MF')){ if (strpos($manifest, 'MIDlet-Icon: ') !== FALSE){ $jad = explode('MIDlet-Icon: ',$manifest); $icon = str_replace("\n",' ', $jad[1]); $icon = str_replace("\r",' ', $icon); $icon = strtok($icon,' '); $icon = preg_replace('#/#', NULL, $icon); } else $icon='icon.png'; }else exit; if($image = $zip->getFromName($icon)){ $image = imagecreatefromstring($image); $width=imagesx($image); $height=imagesy($image); $x_ratio=16/$width; $y_ratio=16/$height; if(($width<=16)&&($height<=16)){ $tn_width=$width; $tn_height=$height; }elseif(($x_ratio*$height)<16){ $tn_height=ceil($x_ratio*$height); $tn_width=16; }else{ $tn_width=ceil($y_ratio*$width); $tn_height=16; } $dst=ImageCreate($tn_width,$tn_height); imagecopyresampled($dst, $image, 0, 0, 0, 0, $tn_width,$tn_height,$width,$height); $image = $dst; }else{ //эта иконка будеет, если в архиве нет иконки $image = imagecreatefrompng('my_icon.png'); } header('Content-type: image/png'); ImagePng($image); ImageDestroy($image); $zip->close(); } ?> |
||
Защита от sql инъекций при помощи pdo_mysql
<?php /** * Защита от sql инъекций при помощи pdo_mysql * автор: Nc_Soft * 19.12.10 */ $host = 'localhost'; //хост $db = 'database_name'; //база данных $user = 'root'; //юзер $password = 'password'; //пароль //соединяемся $db = new PDO("mysql:host=$host;dbname=$db", $user, $password, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); //делаем sql запрос на создание таблицы (id|user|time) $q = $db->prepare("CREATE TABLE IF NOT EXISTS `test` ( `id` int(10) unsigned NOT NULL auto_increment, `user` varchar(20) NOT NULL, `time` timestamp NOT NULL default CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; "); //выполняем запрос $q->execute(); //теперь давайте добавим запись $q = $db->prepare("INSERT INTO test SET user=? "); $q->execute(array('имя1')); /* в таблице добавилась запись обратите внимание, что я не использовал никакие функции для фильтрации (mysql_real_escape_string и подобные), просто обозначит placeholder куда вставить значение через ?, а потом при execute задал значение массивом */ //давайте теперь изменим добавленную запись //получаем последний добавленный ид $id = $db->lastInsertId(); //запрос на update $db->prepare("UPDATE test SET user=? WHERE id=? ")->execute(array("новое ' имя", $id)); /* Обратите внимание, сейчас я воспользовался цепочкой вызовов ->()-> чтобы не заводить переменную $q как в примерах выше. Параметры в массиве должны идти в строгом порядке, как в запросе, действительно, будет нелепо перепутать id и name местами Даже не смотря на то, что в параметре присутствует кавычка запрос выполянется нормально, pdo все экранирует самостоятельно. */ //если не нравятся ? или хотите изменить порядок, можно заюзать именнованные параметры $db->prepare("INSERT INTO test SET user=:user ")->execute(array(':user'=>'новый юзер')); /* Теперь массив с параметрами не такой безликий как раньше, какой способ задания параметров выбрать решайте сами */ //Ну и напоследок: как извлекать записи $q = $db->prepare("SELECT * FROM test"); $q->execute(); $data = $q->fetchAll(); print_r($data); //подробную информацию о pdo_mysql вы всегда можете найти в гугле |
||
Защита от XSS
<? 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'); } ?> |
||
3D Captcha
<?php /** * 3D Captcha * автор: KAndy (http://kandy.habrahabr.ru/) * 30.07.08 */ /* Прочитал на хабрахабре интересный топик http://habrahabr.ru/blog/php/45463.html понравилась реализация капчи, все четко и ничего лишнего, в стиле ооп */ $capthca = new Capthca3d(); $capthca->render(); class Capthca3d{ const CHARS = 'WEafRTYIPAGHJKXBNM3479j'; protected $hypot = 8; protected $image = null; protected $text = ''; public function __construct() { $this->time = microtime(true); $this->generateCode(); } protected function generateCode() { $chars = self::CHARS; for($i =0; $i<3; $i++){ $this->text .= $chars{ mt_rand(0,22)}; } } public function getText() { return $this->text; } protected function getProection($x1,$y1,$z1) { $x = $x1 * $this->hypot; $y = $z1 * $this->hypot; $z = -$y1 * $this->hypot; $xx = 0.707106781187; $xy = 0; $xz = -0.707106781187; $yx = 0.408248290464; $yy = 0.816496580928; $yz = 0.408248290464; $cx = $xx*$x + $xy*$y + $xz*$z; $cy = $yx*$x + $yy*$y + $yz*$z+ 20 * $this->hypot; return array( 'x' => $cx, 'y' => $cy ); } function zFunction($x,$y){ $z = imagecolorat($this->image,$y/2,$x/2)>0?2.6:0; if( $z != 0 ){ $z += mt_rand(0,60)/100; } $z += 1.4 * sin(($x+$this->startX)*3.141592654/15)*sin(($y+$this->startY)*3.141592654/15); return $z; } public function render() { $xx =30; $yy =60; $this->image = imageCreateTrueColor($yy * $this->hypot , $xx * $this->hypot); $whiteColor = imageColorAllocate($this->image,255,255,255); imageFilledRectangle($this->image,0,0,$yy * $this->hypot , $xx * $this->hypot,$whiteColor); $textColor = imageColorAllocate($this->image,0,0,0); imageString($this->image, 5, 3, 0, $this->text, $textColor); $this->startX = mt_rand(0,$xx); $this->startY = mt_rand(0,$yy); $coordinates = array(); for($x = 0; $x < $xx + 1; $x++){ for($y = 0; $y < $yy + 1; $y++){ $coordinates[$x][$y] = $this->getProection($x,$y,$this->zFunction($x,$y)); } } for($x = 0; $x < $xx; $x++){ for($y = 0; $y < $yy; $y++){ $coord = array(); $coord[] = $coordinates[$x][$y]['x']; $coord[] = $coordinates[$x][$y]['y']; $coord[] = $coordinates[$x+1][$y]['x']; $coord[] = $coordinates[$x+1][$y]['y']; $coord[] = $coordinates[$x+1][$y+1]['x']; $coord[] = $coordinates[$x+1][$y+1]['y']; $coord[] = $coordinates[$x][$y+1]['x']; $coord[] = $coordinates[$x][$y+1]['y']; $c = (int) ($this->zFunction($x,$y)*32); $linesColor = imageColorAllocate($this->image, $c, $c, $c); imageFilledPolygon($this->image, $coord, 4, $whiteColor); imagePolygon($this->image, $coord, 4, $linesColor); } } $textColor = imageColorAllocate($this->image,0,0,0); imageString($this->image, 5, 3, 0, $this->text, $whiteColor); imageString($this->image, 1, 3, 0, (microtime(true)-$this->time), $textColor); header('Content-Type: image/png'); imagepng($this->image); imagedestroy($this->image); } } ?> |
||
Проверка хоста
<?php /** * Проверка хоста * автор: Nc_Soft * 12.11.08 */ //используется функция checkdnsrr, если ее нет (винда), то юзаем виндовскую nslookup if(!function_exists('checkdnsrr')){ function checkdnsrr($host, $type=''){ if(!empty($host)){ $type = (empty($type)) ? 'MX' : $type; exec('nslookup -type='.$type.' '.escapeshellcmd($host), $result); $it = new ArrayIterator($result); foreach(new RegexIterator($it, '~^'.$host.'~', RegexIterator::GET_MATCH) as $result){ if($result){ return true; } } } return false; } } //проверим адрес $url='http://wen.ru/forum'; if (checkdnsrr(parse_url($url,PHP_URL_HOST))) { echo 'хост верен'; } else { echo 'хост неверен'; } //проверим кривой адрес $url='http://gfghhrwen.ru/forum'; if (checkdnsrr(parse_url($url,PHP_URL_HOST))) { echo 'хост верен'; } else { echo 'хост неверен'; } /* все материалы на http://php.net/checkdnsrr */ ?> |
||
Защита от граббера
<?php /** * Защита от граббера * автор: Nc_Soft * 25.02.09 */ //Полуавтоматический вариант, позволяет обнаружить подозрительные ип if ( fsockopen($_SERVER['REMOTE_ADDR'] ,80 ,$err ,$errno ,1) ) echo 'Возможно, это граббер, так как открыт порт 80'; /* Здесь приведена лишь методика определения граббера, конечно, это не надо делать при каждом запросе к скрипту. Лучше иметь список часто обращающихся ип и прогнать их через этот способ. Решение о бане можно принять только обратившись к whois серверу, потому что порт 80 открыт не только у хостеров, но и порой у обычных юзеров. */ |
||
Защита от прямых ссылок
<?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 ?> |
||
Антиспам
<?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); } ?> |