Выкладываем полезные классы, библиотеки, для облегчения жизни. Так же в теме принимаются просьба на поиски библиотек/классов. Начну первый: MultiCurl class library Ссылки по классу: http://www.weblancer.net/users/tvv/portfolio/231798.html http://code.google.com/p/multicurl-library/downloads/list
ftp://ftp.linux.it/debian/pool/main/libi/libio-socket-socks-perl/libio-socket-socks-perl_0.1.orig.tar.gz
Т.к. тема не пользовалась спросом, немного изменил её направление, изменения в первом посте. Продолжу: Класс для постраничного вывода из БД: 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
а можно мне хоть глазком глянуть на нормальный Doctrine ORM для codeigniter? просто мечтаю в поллюционных снах.
Класс для работы с 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(); } } ?>
b3, зверюга ) Никаких проверок, исключений, никакого ООП, просто обертка стандартных устаревших функций для работы с MySQL своими функциями )
http://highcharts.com/ JS-библиотека для построения графиков/диаграмм и прочего-прочего со всякими вкусностями =) Плотно не юзал, но выглядит удобоваримо.
исправлюсь)) Просто перенес с другого раздела тему, и нужно было апнуть =) Но кстати данным классом пользуюсь =) Для тех кому нужен "безопасный" класс могу посоветовать выдрать с DLE, там неплохой =)
уважаемый nerezus,не могли бы вы выложить настоящий класс для работы с mysql(т.е c OOП,исключениями,проверками) P.S хочется глянуть )
PHP: jClass: pWeb (Parser Web) - класс для работы с сайтами[/b]Предисловаие: [I]Начинаю потихоньку выкладывать свои классы в этом разделе. Они будут идти с пометкой jClass. Думаю многим кодерам они пригодяться. [/I] [COLOR=LemonChiffon][CENTER][SIZE=4]jClass: pWeb[/SIZE][/CENTER][/COLOR] Это класс для работы с сайтами в скриптах PHP. Он очень удобен для создания всевозможных авторегистраторов, парсеров, спамеров, граберов, брутфорсов итп. Основан на [B]cURL[/B], имеет много полезных возможностей, таких как: [list][*]Быстрая загрузка страниц методом GET и POST [*]Парсинг HTML [*]Нахождение любого HTML элемента и получения его аттрибутов (в.т.ч. inputs) [*]Автоматическое слежение за cookies [*]Парсер заголовков [*]Автоматическая загрузка каритинок [*]Разгадка капчи одной строкой кода, через Antigate [*]Ну и еще много чего интересного.. [/list] [URL=http://files.xxxgeneration.ru/files/2010_04_22/c52fb9/pWeb-1.3.rar]Скачать pWeb (версия 1.3) + документация и примеры[/URL] ([I][SIZE=1]http://files.xxxgeneration.ru/files/2010_04_22/c52fb9/pWeb-1.3.rar[/SIZE][/I]) С помощью данного скрипта даже новичкам будет легко писать разные скрипты для интеграции с сайтами, уже не говоря о том, как он поможет профессионалам своего дела. В нем главное разобраться. Это как IDE, с первого взгляда кажется как все сложно и непривычно, а потом не можешь без нее жить. Я использую этот класс в каждом своем проекте, работающем с сайтами. Предоставляю и вам такую возможность. [SIZE=3][I]Разрешено использовать класс в любых ваших проектах, также продавать его как часть проекта. Одно условие - сохранение копирайта. [/I][/SIZE] Если класс вам НЕ понравился, считаете его бажным итп, можете не писать здесь об этом, а просто им не пользоваться. Если нашли какуюто багу, то исправьте ее сами и выложите сюда пофиксеную версию. Буду признателен. Этот класс прошел много испытаний в тяжелых условиях и исправлено большое кол-во баг. Скоро может выложу еще пару готовых примеров его использования. Пока работы много. [SIZE=2][COLOR=Green][B]by m0Hze: На отдельную тему не тянет, клади сюда. Флуд почистил, что бы больше такого не было.[/B][/COLOR][/SIZE]
Ф-ция водяного знака PHP: function watermark($file, $watermark) { if(empty($file) | empty($watermark)) return false; $wh = getimagesize($watermark); $fh = getimagesize($file); $rwatermark = imagecreatefromjpeg($watermark); //Иногда может понадобиться наложить прозрачный png, тогда заменяем функцию на imagecreatefrompng $rfile = imagecreatefromjpeg($file); imagecopy($rfile, $rwatermark, $fh[0] - $wh[0], $fh[1] - $wh[1], 0, 0, $wh[0], $wh[1]); imagejpeg($rfile, $file, '100'); imagedestroy($rwatermark); imagedestroy($rfile); return true; } Использовать так: PHP: watermark('1.jpg', '2.jpg'); 1.jpg - исходная картинка 2.jpg - водяной знак
ищу рабочий лёгкий (только основные функци, такие как авторизация, приём, отправка сообщений) класс для работы с xmpp
Мой класс для работы с MySQL PHP: <?php class DB { const FETCH_ASSOC = 1; const FETCH_NUM = 2; const FETCH_BOTH = 3; const FETCH_OBJ = 4; private $query = ""; private $result = false; private $connection; private $errors = array(); // стек для хранения ошибок /* * конструктор класса DB * @param $server строка хост * @param $username строка имя пользователя * @param $password строка пароль пользователя * @param $database_name строка имя базы данных * */ public function __construct($server, $username, $password, $database_name) { try { $this->connection = @mysql_connect($server, $username, $password); if ($this->connection === false) { throw new Exception("Не удается подключиться к серверу MySQL по адресу '{$server}'"); } else { if (@!mysql_select_db($database_name, $this->connection)) { throw new Exception("Неизвестная база данных '{$database_name}'"); } } } catch (Exception $e) { // echo $e->getMessage()."<br>"; $this->errors[] = $e->getMessage(); } } // возвращает строку с сообщением об ошибке либо false в случае их отсутствия public function getError() { $e = array_shift($this->errors); // берём первый элемент из стека if (is_null($e)) { return false; } else { return $e; } } // получить массив ошибок public function getErrors() { return $this->errors; } public function setQuery($query) { $this->query = $query; return $this; } /* * метод для отправки запроса MySQL * @param $query строка запрос * @return $this указатель * */ public function exec() { $this->result = @mysql_query($this->query, $this->connection); if (!$this->result) { $this->errors[] = mysql_error(); } return $this; } public function query($query) { $this->result = @mysql_query($query, $this->connection); if (!$this->result) { $this->errors[] = mysql_error(); } return $this; } public function getResult() { return $this->result; } /* * данный метод отправляет запрос и обрабатывает результат возвращая * массив работает только с оператором select * @param $sql строка SQL-команда * @param $flag константа (DB::FETCH_NUM|DB::FETCH_ASSOC|DB::FETCH_BOTH|DB::FETCH_OBJ) * @return $rows массив * */ public function getRows($sql, $flag = 3) { $res = @mysql_query($sql, $this->connection); if ($res) { $as_obj = false; if ($flag == self::FETCH_OBJ) { $as_obj = true; $flag = 1; } $rows = array(); while ($row = mysql_fetch_array($res, $flag)) { // конвертируем массив в объект, если надо if ($as_obj) { $row = (object) $row; } $rows[] = $row; } return $rows; } $this->errors[] = mysql_error(); return false; } /* * метод для экранирования спецсимволов, используемых в SQL * @param $str строка строка, которую необходимо экранировать * @return строка * */ public function escape($string) { return mysql_real_escape_string($string); } /* * метод возвращает последний вставленный id * @return число * */ public function lastInsertId() { return mysql_insert_id($this->connection); } private function prepareParams($params) { if (is_object($params)) { // объект конвертируем в ассоциативный массив $params = (array) $params; } foreach ($params as &$v) { if (is_int($v) or is_float($v)) { continue; } else if (is_null($v)) { $v = "NULL"; } else if (is_bool($v)) { $v = ($v) ? "TRUE" : "FALSE"; } else { // остальные типы данных будут приведены к строке $v = "'{$v}'"; } } return $params; } /* * методы для конструирования простых SQL-запросов * */ public function select($what, $table_name) { $this->query = "select {$what} from {$table_name}"; return $this; } // аргументы: 1) строка, название таблицы; 2) массив либо объект, вставляемый ряд, где ключ массива(свойство объекта) - имя колонки // возможна передача простого массива public function insert($table_name, $params) { $params = $this->prepareParams($params); $columns = array_keys($params); $values = array_values($params); unset($params); $is_assoc = (is_string($columns[0])) ? true : false; $this->query = "insert into `{$table_name}`"; // если массив ассоциативный if ($is_assoc) { foreach ($columns as &$v) { $v = "`{$v}`"; } $this->query.= " (".implode(", ", $columns).")"; } $this->query.= " values(".implode(", ", $values).")"; return $this; } public function update($table_name, $params) { $params = $this->prepareParams($params); $set = array(); foreach ($params as $k => $v) { $set[] = "`{$k}` = {$v}"; } $this->query = "update `{$table_name}` set ".implode(", ", $set); return $this; } public function delete($table_name) { $this->query = "delete from `{$table_name}`"; return $this; } public function where($condition) { $this->query = $this->query." where {$condition}"; return $this; } public function limit($x, $y) { $this->query = $this->query." limit {$x}, {$y}"; return $this; } public function orderBy($column_name, $key_word = "asc") { $this->query = $this->query." order by `{$column_name}` {$key_word}"; return $this; } // возвращает сформированную строку запроса public function getQuery() { return $this->query; } // обработать результат запроса и вернуть одномерный массив либо объект public function fetch($flag = 3) { if ($this->result === false) { return $this->result; } else { if ($flag == self::FETCH_OBJ) { return (object) mysql_fetch_array($this->result, 1); } return mysql_fetch_array($this->result, $flag); } } // получаем массив массивов или объектов public function fetchAll($flag = 3) { if ($this->result === false) { return $this->result; } else { if ($flag == self::FETCH_OBJ) { $as_obj = true; $flag = 1; } $rows = array(); $n = mysql_num_rows($this->result); for ($m = 0; $m < $n; ++$m) { $row = mysql_fetch_array($this->result, $flag); $rows[$m] = ($as_obj) ? (object) $row : $row; } return $rows; } } public function __destruct() { @mysql_close($this->connection); } } ?> Пример использования: PHP: <?php $host = "localhost"; $user = "root"; $pass = ""; $dbname = "test"; require "classes/db.class.php"; $db = new DB($host, $user, $pass, $dbname); echo "<pre>"; $db->query(" create table `users` ( `id` int unsigned not null auto_increment primary key, `name` varchar(255) not null, `password` varchar(255) not null, `date` int not null ); "); $User = new stdClass; $User->id = null; $User->name = "admin"; $User->password = md5("123"); $User->date = time(); $db->insert("users", $User)->exec(); // можем посмотреть sql-запрос созданный конструктором echo $db->getQuery()."\r\n"; // insert into `users` (`id`, `name`, `password`, `date`) values(NULL, 'admin', '202cb962ac59075b964b07152d234b70', 1294426918) var_dump($db->getResult()); // true, можем проверить добавлена ли запись var_dump($db->getErrors()); // можем посмотреть ошибки так // либо так while ($e = $db->getError()) { echo $e."\r\n"; } $rows = $db->getRows(" select * from `users` ", DB::FETCH_OBJ); var_dump($rows); /* array(1) { [0]=> object(stdClass)#3 (4) { ["id"]=> string(1) "1" ["name"]=> string(4) "test" ["password"]=> string(32) "098f6bcd4621d373cade4e832627b4f6" ["date"]=> string(10) "1294424231" } } */ ?>