Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Библиотеки, Классы, полезные функции. |

29.09.2009, 20:46
|
|
Познавший АНТИЧАТ
Регистрация: 01.05.2006
Сообщений: 1,021
Провел на форуме: 3424739
Репутация:
921
|
|
Библиотеки, Классы, полезные функции.
Выкладываем полезные классы, библиотеки, для облегчения жизни. Так же в теме принимаются просьба на поиски библиотек/классов. Начну первый:
MultiCurl class library
MultiCurl - библиотека классов, выполненная на базе MULTI CURL PHP extension. Имеет дополнительную функциональность:
- можно параллельно ставить несколько закачек, количество которых ограничивается программистом;
- результат можно получать и обрабатывать сразу по мере скачивания хоть одной из закачек, не дожидаясь остальных;
- можно ограничивать размер закачек.
К примеру, можно стартовать 100 закачек в 2 параллельных потока, скачивая только первые 100 Kb в каждой закачке.
Ссылки по классу:
http://www.weblancer.net/users/tvv/portfolio/231798.html
http://code.google.com/p/multicurl-library/downloads/list
Последний раз редактировалось b3; 14.12.2009 в 22:00..
|
|
|

05.11.2009, 16:06
|
|
Познавший АНТИЧАТ
Регистрация: 01.05.2006
Сообщений: 1,021
Провел на форуме: 3424739
Репутация:
921
|
|
подскажите perl либу для работы с фтп через socks5
|
|
|

05.11.2009, 16:11
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
ftp://ftp.linux.it/debian/pool/main/libi/libio-socket-socks-perl/libio-socket-socks-perl_0.1.orig.tar.gz
|
|
|

14.12.2009, 22:09
|
|
Постоянный
Регистрация: 05.12.2004
Сообщений: 647
Провел на форуме: 1698585
Репутация:
818
|
|
Т.к. тема не пользовалась спросом, немного изменил её направление, изменения в первом посте. Продолжу:
Класс для постраничного вывода из БД:
PHP код:
<?php
class Paging {
private $page_size = 10;
private $link_padding = 10;
private $page_link_separator = ' ';
private $next_page_text = 'следующая →';
private $prev_page_text = '← предыдущая';
private $result_text_pattern = 'Показано с %s по %s из %s';
private $page_var = 'p';
private $db;
private $q;
private $total_rows;
private $total_pages;
private $cur_page;
public function __construct($db, $q='', $page_var='p')
{
$this->db = $db;
if ($q) $this->set_query($q);
$this->page_var = $page_var;
$this->cur_page = isset($_GET[$this->page_var]) && (int)$_GET[$this->page_var] > 0 ? (int)$_GET[$this->page_var] : 1;
}
public function set_query($q)
{
$this->q = $q;
}
public function set_page_size($page_size)
{
$this->page_size = abs((int)$page_size);
}
public function set_link_padding($padding)
{
$this->link_padding = abs((int)$padding);
}
public function get_page($q='')
{
if ($q) $this->set_query($q);
$r = $this->db->query( $this->query_paging($this->q) );
$this->total_rows = array_pop($this->db->query('SELECT FOUND_ROWS()')->fetch_row());
if ($this->page_size !== 0) $this->total_pages = ceil($this->total_rows/$this->page_size);
if ($this->cur_page > $this->total_pages)
{
$this->cur_page = $this->total_pages;
if ( $this->total_pages > 0 ) $r = $this->db->query( $this->query_paging($this->q) );
}
return $r;
}
public function get_result_text()
{
$start = (($this->cur_page-1) * $this->page_size)+1;
$end = (($start-1+$this->page_size) >= $this->total_rows)? $this->total_rows:($start-1+$this->page_size);
return sprintf($this->result_text_pattern, $start, $end, $this->total_rows);
}
public function get_page_links()
{
if ( !isset($this->total_pages) ) return '';
$page_link_list = array();
$start = $this->cur_page - $this->link_padding;
if ( $start < 1 ) $start = 1;
$end = $this->cur_page + $this->link_padding-1;
if ( $end > $this->total_pages ) $end = $this->total_pages;
if ( $start > 1 ) $page_link_list[] = $this->get_page_link( $start-1, $start - 2 > 0 ? '...' : '' );
for ($i=$start; $i <= $end; $i++) $page_link_list[] = $this->get_page_link( $i );
if ( $end + 1 < $this->total_pages ) $page_link_list[] = $this->get_page_link( $end +1, $end + 2 == $this->total_pages ? '' : '...' );
if ( $end + 1 <= $this->total_pages ) $page_link_list[] = $this->get_page_link( $this->total_pages );
return implode($this->page_link_separator, $page_link_list);
}
public function get_next_page_link()
{
return isset($this->total_pages) && $this->cur_page < $this->total_pages ? $this->get_page_link( $this->cur_page + 1, $this->next_page_text ) : '';
}
public function get_prev_page_link()
{
return isset($this->total_pages) && $this->cur_page > 1 ? $this->get_page_link( $this->cur_page - 1, $this->prev_page_text ) : '';
}
private function get_page_link($page, $text='')
{
if (!$text) $text = $page;
if ($page != $this->cur_page)
{
$reg = '/((&|^)'.$this->page_var.'=)[^&#]*/';
$url = '?'.( preg_match( $reg, $_SERVER['QUERY_STRING'] ) ? preg_replace($reg, '${1}'.$page, $_SERVER['QUERY_STRING']) : ( $_SERVER['QUERY_STRING'] ? $_SERVER['QUERY_STRING'].'&' : '' ).$this->page_var.'='.$page);
return '<a href="'.$url.'">'.$text.'</a>';
}
return '<span>'.$text.'</span>';
}
private function query_paging()
{
$q = $this->q;
if ($this->page_size != 0)
{
//calculate the starting row
$start = ($this->cur_page-1) * $this->page_size;
//insert SQL_CALC_FOUND_ROWS and add the LIMIT
$q = preg_replace('/^SELECT\s+/i', 'SELECT SQL_CALC_FOUND_ROWS ', $this->q)." LIMIT {$start},{$this->page_size}";
}
return $q;
}
}
?>
Ссылки по классу:
https://forum.antichat.ru/showpost.php?p=1739576&postcount=2
http://www.tigir.com/paging.htm
|
|
|

14.12.2009, 22:12
|
|
Постоянный
Регистрация: 21.08.2007
Сообщений: 367
Провел на форуме: 3578960
Репутация:
468
|
|
а можно мне хоть глазком глянуть на нормальный Doctrine ORM для codeigniter? 
просто мечтаю в поллюционных снах.
|
|
|

21.01.2010, 22:14
|
|
Постоянный
Регистрация: 05.12.2004
Сообщений: 647
Провел на форуме: 1698585
Репутация:
818
|
|
Класс для работы с MySQL:
PHP код:
<?php
class db
{
var $db_id = false;
var $query_num = 0;
var $query_list = array();
var $mysql_error = '';
var $mysql_error_num = 0;
var $MySQL_time_taken = 0;
function connect($db_user, $db_pass, $db_name, $db_location = 'localhost', $show_error=1)
{
if(!$this->db_id = @mysql_connect($db_location, $db_user, $db_pass))
{
if($show_error == 1) $this->display_error(mysql_error(), mysql_errno());
else return false;
}
if(!@mysql_select_db($db_name, $this->db_id))
{
if($show_error == 1) $this->display_error(mysql_error(), mysql_errno());
else return false;
}
return true;
}
function query($query, $show_error=true)
{
if(!$this->db_id) $this->connect(DBUSER, DBPASS, DBNAME, DBHOST);
if(!($result = mysql_query($query, $this->db_id) ))
{
$this->mysql_error = mysql_error();
$this->mysql_error_num = mysql_errno();
if($show_error) $this->display_error($this->mysql_error, $this->mysql_error_num, $query);
}
$this->query_num ++;
return $result;
}
function get_row($query_result)
{
return mysql_fetch_assoc($query_result);
}
function get_array($query_result)
{
return mysql_fetch_array($query_result);
}
function super_query($query, $multi = false)
{
if(!$this->db_id) $this->connect(DBUSER, DBPASS, DBNAME, DBHOST);
if(!$multi) return $this->get_row($this->query($query));
else
{
$query_result = $this->query($query);
$rows = array();
while($row = $this->get_row($query_result))
{
$rows[] = $row;
}
return $rows;
}
}
function num_rows($query_result)
{
return mysql_num_rows($query_result);
}
function insert_id()
{
return mysql_insert_id($this->db_id);
}
function get_result_fields($result)
{
while ($field = mysql_fetch_field($result))
{
$fields[] = $field;
}
return $fields;
}
function close()
{
@mysql_close($this->db_id);
}
function display_error($error, $error_num, $query = '')
{
if($query)
{
$query = preg_replace("/([0-9a-f]){32}/", "********************************", $query);
$query_str = "$query";
}
echo '<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>MySQL Fatal Error</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<style type="text/css">
<!--
body {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 10px;
font-style: normal;
color: #000000;
}
-->
</style>
</head>
<body>
<font size="4">MySQL Error!</font>
<br />------------------------<br />
<br />
<u>The Error returned was:</u>
<br />
<strong>'.$error.'</strong>
<br /><br />
</strong><u>Error Number:</u>
<br />
<strong>'.$error_num.'</strong>
<br />
<br />
<textarea name="" rows="10" cols="52" wrap="virtual">'.$query_str.'</textarea><br />
</body>
</html>';
exit();
}
}
?>
|
|
|

21.01.2010, 23:33
|
|
Pagan Heart
Регистрация: 12.08.2004
Сообщений: 3,791
Провел на форуме: 6490435
Репутация:
2290
|
|
b3, зверюга )
Никаких проверок, исключений, никакого ООП, просто обертка стандартных устаревших функций для работы с MySQL своими функциями )
|
|
|

21.01.2010, 23:35
|
|
Участник форума
Регистрация: 01.02.2007
Сообщений: 286
Провел на форуме: 804931
Репутация:
526
|
|
http://highcharts.com/
JS-библиотека для построения графиков/диаграмм и прочего-прочего со всякими вкусностями =)
Плотно не юзал, но выглядит удобоваримо.
|
|
|

22.01.2010, 01:39
|
|
Постоянный
Регистрация: 05.12.2004
Сообщений: 647
Провел на форуме: 1698585
Репутация:
818
|
|
 исправлюсь)) Просто перенес с другого раздела тему, и нужно было апнуть =) Но кстати данным классом пользуюсь =) Для тех кому нужен "безопасный" класс могу посоветовать выдрать с DLE, там неплохой =)
|
|
|

22.01.2010, 06:42
|
|
Участник форума
Регистрация: 09.03.2008
Сообщений: 193
Провел на форуме: 2140897
Репутация:
267
|
|
уважаемый nerezus,не могли бы вы выложить настоящий класс для работы с mysql(т.е c OOП,исключениями,проверками )
P.S хочется глянуть )
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|