(решил стать первопроходцем) Счётчик посещений (не использует СУБД) Ссылка. Зеркало. Описание. Собственно говоря писался этот скрипт давольно давно, однако с того момента уже успел постоять на нескольких сайтах. Характеристики. - жутко простой - до ужаса маленький - без каких либо наворотов (типа статистики и прочего) - собственно сделан как иллюстрация к статье (однако статья так и не была написана)
данный скрипт позволяет получить список всех настроек PHP. Рекомендован как начинающим программерам так и асам своего дела ибо это основа ... phpinfo.php PHP: <? ### 1999 (c) 440hz phpinfo(); ?>
мои 10 копеек: JS Rollovers Код (Text): <html> <head> <title>Rollovers</title> </head> <body> <img src="img/smile1.gif" rollover="img/smile2.gif" /> <script> var addRollover = function (obj, url) { (new Image).src = url obj.onmouseover = function () { var lastSrc = this.src this.src = url this.onmouseout = function() { this.src = lastSrc } } } var allImgs = document.getElementsByTagName('img') if (allImgs) for(var i=0; i<allImgs.length; i++) { var value = allImgs[i].attributes.rollover ? allImgs[i].attributes.rollover.value : allImgs[i].rollover if (value) addRollover(allImgs[i], value) } </script> </body> </html>
Класс для разбора RSS. PHP: <? class RSS { var $content = ''; var $channel = array(); var $items = array(); var $error=0; function RSS($file){ if (!$this->content=implode('',file($file))){ $this->error = 1; }; } function parse(){ preg_replace('!<channel.*>(.*)<item>!ieUs', '$this->channelinfo("\\1", &$this->channel)',$this->content); preg_replace('!<item.*>(.*)</item>!ieUs', '$this->iteminfo("\\1", &$this->items[])',$this->content); return true; } function iteminfo($txt, $var){ preg_replace("!<(.*)>(.*)</(\\1)>!ieUs",'$this->writechannel("\\2", "\\1", &$var)',$txt); return ''; } function writeitem($txt, $tag, $var){ if (preg_match("!<(.*)>(.*)</(\\1)>!iUs", $txt)){ $this->channelinfo($txt,&$var[$tag]); }else{ $var[$tag]=$txt; } return ''; } function channelinfo($txt, $var){ preg_replace("!<(.*)>(.*)</(\\1)>!ieUs",'$this->writechannel("\\2", "\\1", &$var)',$txt); return ''; } function writechannel($txt, $tag, $var){ if (preg_match("!<(.*)>(.*)</(\\1)>!iUs", $txt)){ $this->channelinfo($txt,&$var[$tag]); }else{ $var[$tag]=$txt; } return ''; } } ?> Использование PHP: <? $rss = new RSS('http://news.yandex.ru/computers.rss'); $rss->parse(); ?> На выходе $rss->channel - ассоциативный массив содержащий информацию о канале Код (Text): Array ( [title] => Яндекс.Новости: Hi-Tech [link] => http://news.yandex.ru/Russia/computers.html [description] => Первая в России служба автоматической обработки и систематизации новостей. Сообщения ведущих российских и мировых СМИ. Обновление в режиме реального времени 24 часа в сутки. [image] => Array ( [url] => http://company.yandex.ru/i/50x23.gif [link] => http://news.yandex.ru [title] => Яндекс.Новости ) [lastBuildDate] => Wed, 20 Sep 2006 10:32:12 +0400 ) $rss->items - массив данных из элемента item Код (Text): Array ( [0] => Array ( [title] => Toshiba отзывает 340 тысяч ноутбуков [link] => http://news.yandex.ru/yandsearch?cl4url=3dnews.ru/news/toshiba%5Fotzivaet%5F340000%5Fnoutbukov%2D185260/&country=Russia [description] => Как и полагается солидной фирме, все батареи будут заменены бесплатно. Напомним, что в прошлом месяце батареи Sony отозвали также Apple и Dell.<br>Toshiba Satellite 5000;- Toshiba Satellite P30-102;- Toshiba Satellite 1400.<br> [pubDate] => Tue, 19 Sep 2006 20:24:20 +0400 [guid] => http://news.yandex.ru/yandsearch?cl4url=3dnews.ru/news/toshiba%5Fotzivaet%5F340000%5Fnoutbukov%2D185260/&country=Russia ) [1] => Array ( [title] => Линейка Intel Kentsfield получает официальное имя и две новые модели [link] => http://news.yandex.ru/yandsearch?cl4url=www.ixbt.com/news/hard/index.shtml%3F06/84/75&country=Russia [description] => Вновь подтверждается уже публиковавшаяся нами информация о том, что это семейство дебютирует в ноябре с выходом модели Core 2 Quadro QX6700 (2,66 ГГц, 2 х 4 Мб кэш L2 ... <br>По крайней мере, первые процессоры линейки Xeon 3000 в части цены в точности соответствовали своим настольным собратьям с аналогичными характеристиками.<br> [pubDate] => Wed, 20 Sep 2006 09:48:10 +0400 [guid] => http://news.yandex.ru/yandsearch?cl4url=www.ixbt.com/news/hard/index.shtml%3F06/84/75&country=Russia ) ) P.S. В коде не забываем менять & на &
Mavir Твой код плохо будет работать когда у тегов будут атрибуты... Вместо <(.*)> лучше юзать <(\w+)[^>]*> (http://www.php.net/manual/en/ref.xml.php#54625 тут есть моя функция которая была написана именно для разбора RSS и мне сделали именно такое замечание)
Да так будет лучше. Этот класс писался очень давно, когда только начинал программировать на PHP. Это только основа, тут есть чего улучшать. Может быть сейчас я совсем не так сделал
Mavir Для той задачи которую выполняет твой класс хватит одной маленькой функции в 5-6 строчек, а то что ты привёл это как раз велосипед с квадратными колёсами
собственно: http://php.ru/forum/viewtopic.php?p=17550#17550 PHP: <? function GetXMLFirstVal($r,$t) { if(preg_match_all('/<('.$t.')[^>]{0,}>(.*)<\/\\1>/Usi',$r,$o)) return $o[2][0]; return ''; } function GetXMLAllVal($r,$t) { if(preg_match_all('/<('.$t.')[^>]{0,}?>(.*)<\/\\1>/Usi',$r,$o)) return $o[2]; return array(); } ?>
Я писал недавно, однако основная функция "родилась" уже более года назад. PHP: <?php function xml2array($text) { /** * Function: xml2array * Description: Parse XML data into an array structure * Usage: array xml2array ( string data ) **/ $reg_exp = '/<(\w+)[^>]*>(.*?)<\/\\1>/s'; preg_match_all($reg_exp, $text, $match); foreach ($match[1] as $key=>$val) { if ( preg_match($reg_exp, $match[2][$key]) ) $array[$val][] = xml2array($match[2][$key]); else $array[$val] = html_entity_decode($match[2][$key]); } return $array; } $xml_string = file_get_contents('http://overclockers.ru/rss/all.rss'); $xml_array = xml2array($xml_string); $tpl_array = $xml_array['rss'][0]['channel'][0]; ?><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html> <head> <title><?=$tpl_array['title']?></title> <meta http-equiv="content-type" content="text/html; charset=windows-1251"> <meta name="description" content="<?=$tpl_array['description']?>"> </head> <body> <h1><?=$tpl_array['title']?></h1> <h2><?=$tpl_array['description']?></h2> <?foreach($tpl_array['item'] as $item):?> <h3><?=$item['title']?></h3> <p><?=strip_tags($item['description'])?></p> <address><a href="<?=$item['link']?>"><?=$item['title']?></a><br><?=$item['pubDate']?></address> <?endforeach?> <p>© <a href="<?=$tpl_array['link']?>"><?=$tpl_array['description']?></a></p> </body> </html> (в данном случае не обошлось без логики скрипта в шаблоне, но это связано с попыткой сократить код до минимума чтоб не постить кучу мусора в этом топике)
Хы хы хы! Ещё и с копирайтом! :lol: Подай на производителей PHP в суд, они распростроняют твой скрипт без копирайта! 8)
Кстати вот ещё мой "Классик" для преобразования Барроуза — Уилера Код (Text): <?php /*********************************************************** *\ \ ___ __ /\ ____ ____ ____ __ | | * \ \ / /| | / \ | _ \ / __>/ \| || | * \ \/ / | | / /\ \ | | \ \\_ \_ | || || \ | * \ / | |__ / __ \ | |_/ / _\ \| || || \ | * \ / |_____|/__/ \ \|____/ <____/\____/| ||__| * \/ \ \ | | *********************************************************** * Title: Burrows-Wheeler transform library * Version: 0.0.1 * * URL: http://dkflbk.nm.ru/ * E-Mail: dkflbk@nm.ru *********************************************************** * * This program is free software; you can redistribute * it and/or modify it under the terms of the GNU * General Public License as published by the Free * Software Foundation; either version 2 of the License * or anylater version. * **********************************************************/ class BurrowsWheeler_transform { function encode($string, &$primary_index) { if (!$size = strlen((string)$string)) die('Not a string');; $array = array(); for($i=0; $i<$size; $i++) { $j = $size - $i; $temp = substr($string, $j, $size); $temp .= substr($string, 0, $j); $array[$i] = $temp; } sort($array); $primary_index = array_search($string, $array); $output = array(); for($i=0; $i<$size; $i++) { $output[$i] = substr($array[$i], -1, 1); } return implode('', $output); } function decode($string, $primary_index) { if (!$size = strlen((string)$string)) die('Not a string');; $array = array(); for($i=0; $i<$size; $i++) { for($j=0; $j<$size; $j++) $array[$j] = $string[$j] . (isset($array[$j]) ? $array[$j] : ''); sort($array); } return $array[$primary_index]; } } ?> Он кодирует и декодирует строки (правда не знаю кому кроме таких психов как я это может пригодиться)
Ну тогда вот тебе ещё Код (Text): <?php /*********************************************************** *\ \ ___ __ /\ ____ ____ ____ __ | | * \ \ / /| | / \ | _ \ / __>/ \| || | * \ \/ / | | / /\ \ | | \ \\_ \_ | || || \ | * \ / | |__ / __ \ | |_/ / _\ \| || || \ | * \ / |_____|/__/ \ \|____/ <____/\____/| ||__| * \/ \ \ | | *********************************************************** * Title: Move-to-front transform library * Version: 0.0.1 * * URL: http://dkflbk.nm.ru/ * E-Mail: dkflbk@nm.ru *********************************************************** * * This program is free software; you can redistribute * it and/or modify it under the terms of the GNU * General Public License as published by the Free * Software Foundation; either version 2 of the License * or anylater version. * **********************************************************/ class MoveToFront_transform { function encode($string) { if (!$size = strlen((string)$string)) die('Not a string');; $list = array(); for($i=0; $i<256; $i++) $list[$i] = chr($i); $output = ''; for($i=0; $i<$size; $i++) { $key = array_search($string[$i], $list); $output .= chr($key); unset($list[$key]); $list = array_merge(array($string[$i]), $list); } return $output; } function decode($string) { if (!$size = strlen((string)$string)) die('Not a string');; $list = array(); for($i=0; $i<256; $i++) $list[$i] = chr($i); $output = ''; for($i=0; $i<$size; $i++) { $key = ord($string[$i]); $value = $list[$key]; unset($list[$key]); $list = array_merge(array($value), $list); $output .= $value; } return $output; } } ?> Если интересно что это за методы кодирования такие то немного инфы тут и тут Осталось освоить какое нибудь "сжимающее" кодирование, например Хаффманское или Арифметическое, и можно приступать к созданию своего архиватора А то тот архиватор что я пока что сделал (с RLE кодированием) сжимает в два раза хуже даже чем gzip на самом слабом уровне
PHP: <?php /** * Function: ip_to_country * Description: * Usage: string ip_to_country ( string ip ) * * includes: * - [url=http://www.php.net/include/countries.inc]http://www.php.net/include/countries.inc[/url] * - [url=http://www.php.net/backend/ip-to-country.idx]http://www.php.net/backend/ip-to-country.idx[/url] **/ function ip_to_country($ip) { if (file_exists('ip-to-country.idx') AND $fp = fopen('ip-to-country.idx', 'r')) { $ip_long = (int)ip2long($ip); while (!feof($fp)) { $start = (int)fread($fp, 10); $final = (int)fread($fp, 10); $value = trim(fread($fp, 4)); if ($ip_long > $start AND $ip_long < $final) { fclose($fp); if (file_exists('countries.inc')) { include 'countries.inc'; } return isset($COUNTRIES[$value]) ? $COUNTRIES[$value] : $value; } } fclose($fp); } return 'Unknown'; } ?> Думаю пояснять не нужно что это
Класс для работы с MySQL. PHP: <?php //Davil (c) 2006 class mysql{ private $connecttdb; private $query; private $ret; private $host; private $user; private $pass; private $db; private $flag; private $arr; private $i; private $result; private function dbconnect($hosttdb,$usertdb,$passtdb){ $this->connecttdb = mysql_connect($hosttdb,$usertdb,$passtdb); return $this->connecttdb; } private function dbuse($namedbtouse){ $this->query = "CREATE DATABASE IF NOT EXISTS ".$namedbtouse; mysql_query($this->query); $this->ret = mysql_select_db($namedbtouse); return $this->ret; } public function mysqlc($host,$user,$pass,$db){ $this->host = $host; $this->user = $user; $this->pass = $pass; $this->db = $db; $this->flag = self::dbconnect($this->host,$this->user,$this->pass); if($this->flag) $this->ret = self::dbuse($this->db); else return false; return $this->ret; } public function table($table,$columns){ $this->query = "CREATE TABLE IF NOT EXISTS `".$table. "`(".$columns.")"; mysql_query($this->query); return mysql_error(); } public function write($table,$values){ $this->query = 'INSERT INTO `'.$table.'` VALUES('.$values.')'; mysql_query($this->query); return mysql_error(); } public function read($table,$cols){ $this->query = 'SELECT '.$cols.' FROM '.$table; if(@func_get_arg(2)) $this->query .= " WHERE ".func_get_arg(2); if(@func_get_arg(3)) $this->query .= " ORDER BY ".func_get_arg(3); $this->result = mysql_query($this->query); for($this->i = array();$this->arr = mysql_fetch_array($this->result, MYSQL_BOTH);$this->i[]=$this->arr); @mysql_free_result($this->result); return $this->i; } public function update($table,$set,$where){ $this->query = 'UPDATE '.$table.' SET '.$set.' WHERE '.$where; mysql_query($this->query); return mysql_error(); } public function dropt($table){ $this->query = 'DROP TABLE '.$table; mysql_query($this->query); return mysql_error(); } public function dropd($db){ $this->query = 'DROP DATABASE '.$db; mysql_query($this->query); return mysql_error(); } } ?> int mysqlc($host,$user,$pass,$db) - Подключается к СУБД MySQL. При отсутствии базы создает ее. Возвращает идентификатор работы с базой. string table($table,$columns) - создает таблицу при ее отсутствии. Возвращает строку mysql_error(). $name - название таблицы, $columns - столбцы. Применение: ->table("table","id INT AUTO_INCREMENT PRIMARY KEY, content TEXT"). string write($table,$values) - записывает в созданную таблицу данные. Возвращает mysql_error(). Применение: ->write("table",'null,"CONTENT"'). array read($table,$cols[,$where[,$orderby]]) - читает данные из таблицы $table. Имеет два необязательных параметра: $where - задает условие поиска WHERE и $orderby - задает параметр ORDER BY. Возвращает массив(и ассоциативный, и не ассоциативный). Применение: ->read("table","*","name=ВАСЯ","id"). string update($table,$set,$where) - редактирует данные в таблице. string dropt($table) - удаляет таблицу. string dropd($db) - удаляет базу данных. P.S. Работает только в PHP5. Код можно изменить для работы с несколькими базами и т.д. Кому надо, сделает сам
при невозможности создания ругается? нет? непорядок. при невозможности создания ругается? нет? непорядок.[/quote] нафига нужен такой код?
Надо - припиши пару строчек. Надо - припиши пару строчек. Тем, кто пишет не процедурно, а ООП. А php4 - мезозой. Тут на днях уже 6 выйдет. Пора уже о 4 забыть (имхо).