ГлавнаяФорумыЧАТСкрипты/PHP/MySQL/CSS/HTML

Полезные PHP коды

InkMission[78] (Off)
[06.02.11, 22:37]
Достаём инфу из 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;

}

?>
InkMission[78] (Off)
[06.02.11, 22:37]
Анимация из видео
<?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);}
?>
InkMission[78] (Off)
[06.02.11, 22:38]
Винимаем иконку из 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();

}

?>
InkMission[78] (Off)
[06.02.11, 22:39]
Защита от 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 вы всегда можете найти в гугле
InkMission[78] (Off)
[06.02.11, 22:40]
Защита от 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');
}
?>
InkMission[78] (Off)
[06.02.11, 22:40]
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);
}
}

?>
InkMission[78] (Off)
[06.02.11, 22:40]
Проверка хоста
<?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
*/
?>
InkMission[78] (Off)
[06.02.11, 22:41]
Защита от граббера
<?php
/**
* Защита от граббера
* автор: Nc_Soft
* 25.02.09
*/

//Полуавтоматический вариант, позволяет обнаружить подозрительные ип
if ( fsockopen($_SERVER['REMOTE_ADDR'] ,80 ,$err ,$errno ,1) )
echo 'Возможно, это граббер, так как открыт порт 80';

/*
Здесь приведена лишь методика определения граббера, конечно, это не надо делать при
каждом запросе к скрипту. Лучше иметь список часто обращающихся ип и прогнать
их через этот способ. Решение о бане можно принять только обратившись к whois серверу,
потому что порт 80 открыт не только у хостеров, но и порой у обычных юзеров.
*/
InkMission[78] (Off)
[06.02.11, 22:41]
Защита от прямых ссылок
<?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
?>
InkMission[78] (Off)
[06.02.11, 22:42]
Антиспам
<?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);

}

?>
Последние ответы