→ Для вступления в общество новичков и профессионалов программирования, пожалуйста нажмите здесь ...

Форум программистов: C++, Basic, Delphi, Pascal, JavaScript
Логин: Пароль:
Запомнить?  
@Mail.ru



Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Хорошие решения 
Автор Сообщение
Профи
Аватара пользователя

Регистрация: 26.02.2008
Сообщения: 112
Откуда: Украина

Репутация: 2 [ ? ]
Сообщение Хорошие решения
В данной теме будем складывать все хорошие и полезные решения.

Вот несколько моих решений:
Простой способ разбиения на страницы (точнее нумеризацию) на PHP
[syntax=php]
$num = 10; // Число записей всего.
$perpage = 7; // Кол-во, показываемых записей на странице.
$pages_count = @ceil($num/$perpage);
$pages .= 'Страницы:';
for($j=1;$j<=$pages_count;$j++)
{
if ($_GET['page'] != $j)
{
$pages .= ' <a href="?page='.$j.'"><b>'.$j.'</b></a> ';
}
else
{
$pages .= ' <b>'.$j.'</b> ';
}
}
[/syntax]

функция замены названия смайлов на рисунки (база с названиями - файл "autochange.dat"). Названия смайлов и ссылки на рисунки должны быть записаны следующим образом:
:name_smile:|<img src=img/Smile/smile.gif border=0 width=15 height=15>. Таким же образом можно вырезать маты.
Функция принимает на входе строку со входным неформатированным текстом (в котором в качестве
смайлов записано что-то вроде :name_smile:), а на выходе возвращает текст, в котором
все смайлы заменены на соответствующий в базе тэг <img>. Каждое соответствие должно
быть записано в базе на отдельной строке
[syntax=php]
function replaceMent ($string)
{
$exech="autochange.dat";
$string = " ".$string;
$autochange = file ($exech);
$lines = count ($autochange);
for($i=0;$i<$lines;$i++)
{
list($change1,$change2)=explode("|", $autochange[$i]);
$string = eregi_replace($change1,$change2,$string);
}
return trim($string);
}[/syntax]

Ну и посерьёзнее пример.
Статичный класс на РНР для работы с алгоритмами шифрования mcrypt:

[syntax=php]
//класс для шифрования
//алгоритмами mcrypt.Методы нужно вызывать статично
//в windows нужно подключить расширение php_mcrypt.dll, в папку C:\WINDOWS\ нужно
//скопировать файл libmcrypt.dll, который находится в папке с php
//в *nix системах нужно скомпилировать php с
//опцией --with-mcrypt=PATH_TO_LIBMCRYPT
//предварительно скомпилировав libmcrypt
//mcrypt можно скачать отсюда:http://mcrypt.hellug.gr/

class Encryption
{
static private $cypher = 'blowfish';
static private $mode = 'cfb';
static private $key = 'Very secret key';
//метод для шифрования данных:
//в качестве параметра передаётся текст, который нужно зашифровать
//метод возвращает зашифрованный текст
static public function encrypt($plaintext)
{
$td = @mcrypt_module_open(self::$cypher, '', self::$mode, '');
$iv = @mcrypt_create_iv (mcrypt_enc_get_iv_size($td),MCRYPT_RAND);
@mcrypt_generic_init($td, self::$key, $iv);
$crypttext = @mcrypt_generic($td, $plaintext);
@mcrypt_generic_deinit($td);
return $iv.$crypttext;
}
//метод для расшифровки зашифрованнного текста
//в качестве параметра передаётся зашифрованный текст, возвращённый методом encrypt()
//метод возвращает расшифрованный текст
static public function decrypt($crypttext)
{
$td = @mcrypt_module_open(self::$cypher, '', self::$mode, '');
$ivsize = @mcrypt_enc_get_iv_size($td);
$iv = substr($crypttext,0,$ivsize);
$crypttext = substr($crypttext, $ivsize);
$plaintext = '';
if($iv){
@mcrypt_generic_init($td, self::$key, $iv);
$plaintext = @mdecrypt_generic($td, $crypttext);
@mcrypt_generic_deinit($td);

}
return $plaintext;
}
}[/syntax]

Работает это следующим образом. Для получения зашифрованного текста нужно вызвать
метод encrypt и передать ему текстовую строку:
$crypttext = Encryption::encrypt('Грузите апельсины бочками');
Для расшифрования ранее зашифрованного текста нужно вызвать метод decrypt и передать
ему зашифрованный ранее текст:
$plaintext = Encryption::decrypt($crypttext);
Свойство $key нужно изменить на другую произвольно взятую строчку, но не советую изменять
её в процессе работы, поскольку шифрование производится с помощью этого ключа


28.02.2008 0:12
Профиль Отправить email ICQ
Профи
Аватара пользователя

Регистрация: 26.02.2008
Сообщения: 112
Откуда: Украина

Репутация: 2 [ ? ]
Сообщение Создание изображений
Во вложении класс для создания самой примитивной капчи. Он довольно хорошо комментирован и является самодостаточным (достаточно в нужном месте поставить адрес скрипта в тэге img). Код из капчи будет записан в в сессионную переменную $_SESSION['captcha'].
Класс использует ttf-шрифты для отображения текста на фоновом рисунке. Если рисунок не будет установлен, то фон будет белым


У вас нет необходимых прав для просмотра вложений в этом сообщении.

_________________
If it works, then it created by ivan-hohol, if not, then I don't know who this created


04.04.2008 23:27
Профиль Отправить email ICQ
Профи
Аватара пользователя

Регистрация: 26.02.2008
Сообщения: 112
Откуда: Украина

Репутация: 2 [ ? ]
Сообщение 
Информер погоды от Gismeteo. Только для РНР>=5.
[syntax=php]
<?php
/*

GISMETEO Weather Informer for MODx

Автор: Ad_Astra http://ad-astra.name

*/

//задаём значения числовых и не только характеристик
$xslt = new XSLTProcessor();
function prec ($pr_no)
{
$precipitation = array("4"=>"дождь", "5"=>"ливень",
"6"=>"снег", "7"=>"снег", "8"=>"гроза", "9"=>"нет данных",
"10"=>"без осадков");
return $precipitation[$pr_no];
}
function cloud ($cl_no)
{
$clouds = array("0"=>"ясно", "1"=>"малооблачно",
"2"=>"облачно", "3"=>"пасмурно");
return $clouds[$cl_no];
}
//получаем список нужных нам файлов из параметра source -
//выводим данные по Киеву, Луганску и Харькову. Разделитель - запятая
$source='http://informer.gismeteo.ru/xml/33345_1.xml,
http://informer.gismeteo.ru/xml/34523_1.xml,
http://informer.gismeteo.ru/xml/34300_1.xml';
if (isset($source))
{
$source = explode(",", $source);
} else
{
$source = array("http://informer.gismeteo.ru/xml/33345_1.xml");
}

//подгружаем XSLT-чанк для распарсивания исходного XML.
if (!isset($tpl)) {$tpl="informer-full.xsl";}
$style = new DOMDocument();
$style->load($tpl);

$xslt->importStylesheet($style);

//парсим данные и выводим получившееся в табличку
?>
<table class="gismeteo-informer">
<caption>Погода от
<a href="http://gismeteo.ru" target="_blank">Gismeteo.ru</a></caption>
<?php
foreach($source as $src)
{
$doc = new DOMDocument();
//пре-парсим исходный XML, ибо оно в другой кодировке
$doc->loadXML(iconv ('WINDOWS-1251','UTF-8', urldecode (file_get_contents($src))));


//преобразуем в HTML

$result = $xslt->transformToXML($doc);
//теперь парсим результат, ибо надо заменить числовые значения на текстовые
$patterns = array("/(class=\"precipitation\">)(\d+)/e",
"/(class=\"cloudiness\">)(\d+)/e");
$replacements = array("'\\1'.prec('\\2')",
"'\\1'.cloud('\\2')");
$result = preg_replace($patterns, $replacements ,
$result);

print $result;
}

?>
</table>
<?php
?>


[/syntax]
XSLT шаблон. Его нужно сохранить под именем informer-full.xsl и положить в папку с информером
[syntax=xml]
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="utf-8" indent="yes"/>
<xsl:template match="MMWEATHER/REPORT/TOWN">
<tr>
<th colspan="6" style="color:blue"><xsl:value-of select="./@sname" /></th>
</tr>
<tr>
<td><xsl:value-of select="FORECAST/@day" />-
<xsl:value-of select="FORECAST/@month" />-
<xsl:value-of select="FORECAST/@year" /></td>
<td><xsl:value-of select="FORECAST/TEMPERATURE/@min" />
...<xsl:value-of select="FORECAST/TEMPERATURE/@max" /></td>
<td class="precipitation">
<xsl:value-of select="FORECAST/PHENOMENA/@precipitation" /></td>
<td class="cloudiness">
<xsl:value-of select="FORECAST/PHENOMENA/@cloudiness" /></td>
<td><xsl:value-of select="FORECAST/WIND/@min" />-
<xsl:value-of select="/FORECAST/WIND/@max"/> м/с</td>
<td><xsl:value-of select="FORECAST/PRESSURE/@min" />-
<xsl:value-of select="FORECAST/PRESSURE/@max" /> мм. рт. с.</td>
</tr>
</xsl:template>
</xsl:stylesheet>
[/syntax]

_________________
If it works, then it created by ivan-hohol, if not, then I don't know who this created


03.06.2008 21:37
Профиль Отправить email ICQ
Профи
Аватара пользователя

Регистрация: 26.02.2008
Сообщения: 112
Откуда: Украина

Репутация: 2 [ ? ]
Сообщение 
Отправка пост запроса на сервер средствами PHP. Есть два способа это сделать.
Первый: через сокеты.
[syntax=php]
/* Отсылка пост запроса к https://secure.example.com/form_action.php
*
*/
//открываем сокет к ssl://secure.example.com на порт 443
$sock = fsockopen("ssl://secure.example.com", 443, $errno, $errstr, 30);
//если нет сокета, то не судьба...
if (!$sock) die("$errstr ($errno)\n");
//собираем данные
$data = "name=" . urlencode("ivan") . "&surname=" . urlencode("hohol");
//пишем в сокет
fwrite($sock, "POST /form_action.php HTTP/1.0\r\n");
fwrite($sock, "Host: secure.example.com\r\n");
//контент-тайп и контент-ленгз обязательны
fwrite($sock, "Content-type: application/x-www-form-urlencoded\r\n");
fwrite($sock, "Content-length: " . strlen($data) . "\r\n");
fwrite($sock, "Accept: */*\r\n");
fwrite($sock, "\r\n");
//ну и дата конечно тоже обязательна
fwrite($sock, "$data\r\n");
fwrite($sock, "\r\n");
//читаем ответ
$body = "";
while (!feof($sock))
$body .= fgets($sock, 4096);
//выводим ответ
echo $body;
//закрываем сокет
fclose($sock);
[/syntax]

Второй способ: через readfile().
[syntax=php]
//собираем нужные опции
$options = array(
'http'=>array(
'method'=>"POST",
'header'=>"Content-type: application/x-www-form-urlencoded\r\n" .
"Content-length: " . strlen("name=ivan&surname=hohol"),
'content'=>'name=ivan&&surname=hohol'

)
);
//преобразовываем в строку, которая нужна для запроса
$opt = stream_context_create($options);
//читаем файл с соответствующими опциями
readfile('http://www.example.com/post.php', false, $opt);
[/syntax]

_________________
If it works, then it created by ivan-hohol, if not, then I don't know who this created


14.07.2008 21:57
Профиль Отправить email ICQ
Начинающий

Регистрация: 09.01.2009
Сообщения: 1

Репутация: 0 [ ? ]
Сообщение 
thank you!


09.01.2009 10:08
Профиль
Начинающий

Регистрация: 07.05.2012
Сообщения: 3
Языки:
Специальность:

Репутация: 0 [ ? ]
Сообщение Написать право
Написать право


07.05.2012 19:05
Профиль Отправить email
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 


Кто сейчас на конференции

Зарегистрированные пользователи: Google [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
© 2013 «Форум программистов Украины»