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

Форум программистов: 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 ] 


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

Зарегистрированные пользователи: нет зарегистрированных пользователей


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

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