Исходники на PHP

Kanzler
2/18/2006, 1:31:40 AM
Исходники на PHP выкладываем с кратким описанием...

Начну первым:

Для начала замечательный справочник по PHP. Описаны все основные функции. Рекомендую людям начинающим. Общий размер 416 кб.

Так как архивы *.rar загружать нельзя: скачайте все 4 файла. Переименуйте их расширение в .rar. И нажмите распоковать.


Первая часть.
Kanzler
2/18/2006, 1:33:14 AM
Вторая часть.
Kanzler
2/18/2006, 1:34:23 AM
Третья часть.
Kanzler
2/18/2006, 1:35:10 AM
Четвертая (последняя) часть.
Kanzler
2/18/2006, 4:26:10 PM
Функция для конвертирования ББ-кодов в HTML-код:

CODE

<?php

function bb_to_html($content) {

// Переносы строк
$content = str_replace("\n", "<br />", $content);
// Жирный, Курсив (Наклонный), Подчеркнутый, Перечеркнутый
$content = preg_replace("/\[B\](.+?)\[\/B\]/", "<b>\\1</b>", $content);
$content = preg_replace("/\[I\](.+?)\[\/I\]/", "<i>\\1</i>", $content);
$content = preg_replace("/\[U\](.+?)\[\/U\]/", "<u>\\1</u>", $content);
$content = preg_replace("/\[S\](.+?)\[\/S\]/", "<s>\\1</s>", $content);
// Размер шрифта
$content = preg_replace("/\[SIZE=(.+?)\](.+?)\[\/SIZE\]/", "<font size=\"\\1\">\\2</font>", $content);
// Цвет шрифта
$content = preg_replace("/\[COLOR=(.+?)\](.+?)\[\/COLOR\]/", "<font color=\"\\1\">\\2</font>", $content);
// Выравнивание (По левому краю, По центру, По правому краю)
$content = preg_replace("/\[LEFT\](.+?)\[\/LEFT\]/", "<div align=\"left\">\\1</div>", $content);
$content = preg_replace("/\[CENTER\](.+?)\[\/CENTER\]/", "<div align=\"center\">\\1</div>", $content);
$content = preg_replace("/\[RIGHT\](.+?)\[\/RIGHT\]/", "<div align=\"right\">\\1</div>", $content);
// Вставить изображение
$content = preg_replace("/\[IMG\](.+?)\[\/IMG\]/", "<img src=\"\\1\" border=\"0\">", $content);
// Цитата
$content = preg_replace("/\[Q\](.+?)\[\/Q\]/", "<b>Цитата:</b><br /><div class=\"quote\">\\1</div>", $content);
// Смайлики
$content = preg_replace("/\*(.+?)\*/", "<img src=\"/images/smiles/\\1.gif\" border=\"0\">", $content);

return $content;

}

// Тест функции
$text = "[COLOR=blue]TEXT[/COLOR]";
$text = bb_to_html($text);
echo $text;

?>

Kanzler
2/18/2006, 4:27:19 PM
Данная функция выводит информацию о посетителе:
1. Обычный IP (Proxy)
2. Прямой IP (Реальный IP, если ипользовать специальный proxy - недоступен)
3. Откуда пришли
4. Куда пришли (Адрес странички, где запущен скрипт)
5. Браузер и ОС
6. Текущая дата
7. Статус gZip (Поддержка сжатия страниц браузером)

CODE
<?php

function user_info() {

// IP (Через Proxy)
$info['proxy_ip'] = $_SERVER['REMOTE_ADDR'];

// IP (Прямой)
$info['line_ip'] = $_SERVER['HTTP_X_FORWARDED_FOR'];

// Откуда пришли (Предыдущая страница)
$info['referer'] = $_SERVER['HTTP_REFERER'];

// Куда пришли (Адрес страницы, на которой выполняется этот скрипт)
$info['uri'] = $_SERVER['REQUEST_URI'];

// Браузер и ОС
$info['user_agent'] = $_SERVER['HTTP_USER_AGENT'];

// Текущая дата в формате "01.01.2006 | 00:00"
$info['date'] = date("d.m.Y | H:i");

// Статус gZip (Поддерживает ли браузер сжатие)
if ($_SERVER['SERVER_PROTOCOL'] == "HTTP/1.1") {
$info['gzip'] = 1;
} else {
$info['gzip'] = 0;
}

echo "<pre>";
print_r($info);
echo "</pre>";

}

user_info();

?>
Kanzler
2/18/2006, 4:30:01 PM
Привожу функцию вывода случайной картинки. Чаще всего такая функция используется для вывода случайного баннера.

Условия:
1. Все картинки должны лежать в папке "banners" (Можно изменить)
2. Все картинки должны иметь одинаковый формат (В данном случае .gif, можно изменить)
3. Все картинки должны иметь названия типа 1.gif, 2.gif, 3.gif и т.д.

CODE
<?php

// Функция
function rand_img($count) {

$random = rand(1, $count);
$img = "banners/".$random.".gif"; // Здесь указываем папку и формат

echo "<img src=\"".$img."\" border=\"0\" />";

}

// Тест

rand_img(5); // 5 - количество баннеров в папке "banners"

?>


--------

Результат будет примерно такой:

CODE
<img src="banners/2.gif" border="0" />
DELETED
2/21/2006, 2:40:08 AM
Очень интересные алгоритмы. Грех плюс в репу не поставить... buba.gif
DELETED
2/26/2006, 5:53:14 PM
а зачем писать так?
echo "<img src=\"".$img."\" border=\"0\" />"; ???
ведь при использование двойных ковычек PHP исчет в нутри переменные и заменяет их на значения т.е. строки в двойных ковычках обрабатываються дольше...
можно было сделать так
echo '<img src="'.$img.'" border="0" />"; работает быстрее читабельность выше (т.к. нет слэшей перед кавычками)

а еще можно так показывать случайный банер

CODE <?
//Массив с именами фаилов
$banners=array(
  'banner_1.gif',
  'banner_2.gif',
  'banner_3.gif',
  'banner_4.gif',
  'banner_5.gif',
  'banner_6.gif'
 );
//Выводим заголовок (банеры только в GIFe)
header("Content-type: image/gif");
//Читаем и выводим содержимое фаила, элемент массива выбераеться случайно
readfile ($_SERVER['DOCUMENT_ROOT'].'/banners/'.$banners[rand(0,count($banners)-1)]);
?>

результат работы скрипта - картинка т.е. скрипт нужно иуказывать в качестве src для img
CODE <img src="banner.php" border="0">
ShadowS
4/19/2006, 5:00:36 AM
Извините немножко не в тему но все же.
Пожалуйста посоветуйте какую нибудь книжку человеку который хочет научиться делать хорошие сайты на рНр
blablabla
4/19/2006, 6:54:37 AM
(ShadowS @ 19.04.2006 - время: 01:00) Извините немножко не в тему но все же.
Пожалуйста посоветуйте какую нибудь книжку человеку который хочет научиться делать хорошие сайты на рНр
В самом начале Kanzler выложил 4 части справочника по пхп. И начинай с них_ bye1.gif
OutSideR
4/19/2006, 5:51:48 PM
(ShadowS @ 19.04.2006 - время: 00:00)Извините немножко не в тему но все же.
Пожалуйста посоветуйте какую нибудь книжку человеку который хочет научиться делать хорошие сайты на рНр
В разделе "Компьютерная литература..., Раздел "Web" (web программирование и дизайн)" IT-Академии SexNarod.ru много хорошей литературы по PHP.
Загляни сюда
GrAnd
4/28/2006, 6:26:23 PM
Пусть есть MySQL-выборка $result, отсортированная по какому либо ключу с именем $key. В этой выборке необходимо находить элементы с конкретным значением $value этого ключа и обрабатывать их. Либо начинать обработку начиная с найденного элемента. Либо обрабатывть ближайшее окружение найденного элемента.
Конкретно я использовал это в таком случае:
При формировании странички с информацией необходимо сформировать также ссылку на следующую и предыдущую информацию. Если бы информационные записи в БД имели порядковые номера, то проблем не было бы. Но они могут быть прорежены - начинаться нумерация может с 16, а потом идти 20, 36, 111 и т.д. Т.е. это даже не нумерация, а некий приоритет, определяющий порядок следования. Или вообще нумерация может быть не числовой, а буквенной. Забивать в каждую запись ключ следующей и предыдущей записи не следует, т.к. структура страниц динамическая и при добавлении/удалении страниц, а так же при изменении приоритетов следования, накладные расходы по поддержанию целостности и непротиворечивости этой избыточной информации могут быть значительными.
В этом случае, конечно, можно было бы получить сначала информацию по искомой записи, определить ее приоритет, а потом сделать 2 выборки - по записям с меньшим приоритетом и с большим. Но это не универсальный подход. И так же вместо одной выборки MySQL делает 3.
Поэтому при доступе к записи с ключом-приоритетом N необходимо в единственной выборке найти (если есть) информацию относящуюся к ней, а также найти значения ключей записей, которые ее окружают.
Вторая часть задачи решается легко, если уже найдена запись с искомым ключом. А найти ее удобнее всего в данном случае при помощи двоичного поиска. Двоичный поиск используется очень часто, но мало кто может реализовать его правильно и компактно.
Вот привожу маленький скрипт, который:
1. Находит в выборке номер (начиная с 0) самой первой записи с заданным значением ключа и возвращает этот номер.
2. Если заданный ключ не найден, то возвращается номер первой записи с значением ключа больше заданного.
3. Если все записи в выборке имеют значение ключа меньше заданного, то возвращается число записей в выборке (как бы номер записи, следующей за последней.

Ну а вот сама функция:
CODE <?php

function message_die($errno, $error, $file, $line)
{
if ($errno)
{
 echo '<p><b>Error $errno $file($line):</b> $error';
 die();
}
}

function bin_search($result, $key, $value)
{
$l = 0; $r = @mysql_num_rows($result);

message_die(@mysql_errno(), @mysql_error(), __FILE__, __LINE__);

while ($l != $r)
{
 $m = ($l + $r) >> 1;

 @mysql_data_seek($result, $m);

 message_die(@mysql_errno(), @mysql_error(), __FILE__, __LINE__);

 $row = @mysql_fetch_assoc($result);

 message_die(@mysql_errno(), @mysql_error(), __FILE__, __LINE__);

 if ($row[$key] < $value)
 {
  $l = $m + 1;
 }
 else
 {
  $r = $m;
 }
}

return $r;
}

?>
Kom_JIeonoJIbg
7/13/2006, 6:01:38 AM
В продолжение темы о случайном выводе баннеров:
<?php
function bs($dr){
$dir=opendir($dr);
$banners=array();
while(false!==($fl=readdir($dir))){
//добавляем в массив только файлы с "баннерными" расширениями (JPG, GIF)
//каталоги пропускаются
//т. е. совместно с баннерами в той же папке могут
//быть любые другие файлы
if($fl!="." && $fl!=".." && !is_dir($dr.'/'.$fl) && preg_match("/^\d*\.jpg|\w*\.jpg|\d*\.gif|\w*\.gif/i", $fl)){
$banners=$fl;
}
}
closedir($dir);
return $banners;//массив подходящих файлов в директории $dr
}

$banners=bs('./ip');
$random=rand(0, sizeof($banners)-1);
echo '<img src="https://docs.loc/scripts/view_banners/ip/'.$banners.'">';//примерно такой результат
?>
Аrtur
12/1/2006, 2:36:37 AM
Предотвращает проведение XSS атак, осуществляемых манипуляциями строкой браузера.

CODE
function xss () {
   $url = html_entity_decode(urldecode($_SERVER['QUERY_STRING']));
   if ($url) {
       if ((strpos($url, '<') !== false) ||
           (strpos($url, '>') !== false) ||
           (strpos($url, '"') !== false) ||
           (strpos($url, './') !== false) ||
           (strpos($url, '../') !== false) ||
           (strpos($url, '\'') !== false) ||
           (strpos($url, '.php') !== false)
          )
       {
       die("Hack!");
       }
   }
}


Вызывать до начала работы основной части скрипта.
Kom_JIeonoJIbg
12/2/2006, 3:23:21 AM
возвращает массив файлов в директории с определённым расширением, в данном случае с расширением, содержащим только алфавитные символы (определяемые символом \w):
$dr - путь и название директории.
<?php function filesindir($dr){
$dir=opendir($dr);
$ary=array();
while(false!==($fl=readdir($dir))){
if($fl!="." && $fl!=".." && !preg_match("/^.*\.\w*//*i", $fl) && !is_dir($dr.'/'.$fl)){
$ary=$fl;
}
}
closedir($dir);
return $ary;
}?>
и, чтобы несколько сообщений не оставлять, ещё одна функция:
Скрипт для перевода текста из транслита и обратно.
Синтаксис:
translate($string, $type, $yes_no, $ary);
$string - текст, который нужно перетранслировать.
$type - тип транслита, возможные значения: 'ru' - из
транслита сделать русский текст и 'tr' - наоборот.
$yes_no - подключать или нет внешние массивы.
$ary - подключаемый массив (такой же структуры, как и встроенный).
<?php
function translate($string, $type, $yes_no, $ary){
if(!$yes_no){
$trans_s=array('\'','yo','zh','sh','ch','sch','ye','yu','ya','a','b','v','g','d','e','z','i','j','k','l','m','n','o','p','r','s','t','u','f','h','c','`','y');
$kir_s=array('ь','ё','ж','ш','ч','щ','э','ю','я','а','б','в','г','д','е','з','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ъ','ы');
$trans_p=array('\'','Yo','Zh','Sh','Ch','Sch','Ye','Yu','Ya','A','B','V','G','D','E','Z','I','J','K','L','M','N','O','P','R','S','T','U','F','H','C','Y');
$kir_p=array('Ь','Ё','Ж','Ш','Ч','Щ','Э','Ю','Я','А','Б','В','Г','Д','Е','З','И','Й','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ы');
}elseif($yes_no){
$trans_s=$ary;
$kir_s=$ary;
$trans_p=$ary;
$kir_p=$ary;
}
if($type=='ru'){
$string=str_replace($trans_s, $kir_s, $string);
$string=str_replace($trans_p, $kir_p, $string);
}elseif($type=='tr'){
$string=str_replace($kir_s, $trans_s, $string);
$string=str_replace($kir_p, $trans_p, $string);
}
return $string;
}
?>

ЗЫ: эм.. первую функцию я уже приводил.. ну ладно, тогда это описание к ней )
Volonter-dic
3/8/2007, 5:43:10 AM
а ПХП вообще трудный язык?
Platinum PROFI
3/8/2007, 3:32:55 PM
Хех. Что есть в твоем понимании сложный? Всё, что нужно - логика и PHP-интерпретатор.wink.gif А просто и легко нигде вначале не бывает, профессионализм приходит со временем...

P.S. Ты более конкретные чтоль вопросы задавай... wink.gif
DELETED
3/16/2007, 5:53:43 PM
Скрипт позволяющий создавать сервис загрузок картинок.
c0d3r
3/19/2007, 9:37:55 PM
Скрипт для проверки состояния апача и псибнц. На фёрствдс очень актуально в связи с постоянными падениями соединений на их дедиках
CODE
<?php
$host='mysite.ru';
$psyuser='psy';
$ch=curl_init('http://'.$host);
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
$a=curl_exec($ch);
if($a===false){
exec('httpd -k restart');
}
if(!@fsockopen('127.0.0.1',31337)) exec('su '.$psyuser.' -c \'cd /home/'.$psyuser.'/psybnc/; ./psybnc\'');

?>


парсер дубликатов строк из текстовых файлов,с сортировкой

CODE
<?
$foutname = 'out.txt';
$filename = "in.txt";
$strings = file($filename);
$strings = array_map('trim', $strings);
$strings2 = array_unique($strings);
asort($strings2);
$file_out = fopen($foutname, "w");
foreach($strings2 as $value) {
fputs($file_out, $value."\n"); }
fclose($file_out);
?>