Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Pубрика "Полезные решения на PHP" (https://forum.antichat.xyz/showthread.php?t=18527)

Utochka 02.05.2006 22:29

Pубрика "Полезные решения на PHP"
 
Предлогаю выкладывать сюда полезные решения на php, помоему будет прикольно, перед тем как создать тему человек идет сюды и смотрит есть ли тут готовый пример ну или идет в гугл )

Вот от меня преобразование BB-тегов в соответствующие HTML-теги.

PHP код:

<?php
function bth($content) {

// Переносы строк
$content nl2br($content);

// Горизонтальная линия
$content str_replace("[HR]""<hr />"$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("/\[SUB\](.+?)\[\/SUB\]/""<sub>\\1</sub>"$content);
$content preg_replace("/\[SUP\](.+?)\[\/SUP\]/""<sup>\\1</sup>"$content);

// Мелкий шрифт
$content preg_replace("/\[SMALL\](.+?)\[\/SMALL\]/""<small>\\1</small>"$content);

// Нестандартный шрифт
$content preg_replace("/\[FONT=(.+?)\](.+?)\[\/FONT\]/""<font face=\"\\1\">\\2</font>"$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("/\[URL\](.+?)\[\/URL\]/""<a href=\"\\1\" target=\"_blank\">\\1</a>"$content);
$content preg_replace("/\[URL=(.+?)\](.+?)\[\/URL\]/""<a href=\"\\1\" target=\"_blank\">\\2</a>"$content);

// E-Mail
$content preg_replace("/\[EMAIL\](.+?)\[\/EMAIL\]/""<a href=\"mailto:\\1\">\\1</a>"$content);
$content preg_replace("/\[EMAIL=(.+?)\](.+?)\[\/EMAIL\]/""<a href=\"mailto:\\1\">\\2</a>"$content);

// Изображение
$content preg_replace("/\[IMG\](.+?)\[\/IMG\]/""<img src=\"\\1\" border=\"0\" alt=\"\">"$content);
$content preg_replace("/\[IMG=(.+?)\](.+?)\[\/IMG\]/""<img src=\"\\1\" border=\"0\" alt=\"\\2\">"$content);

// Список
$content preg_replace("/\[LIST\](.+?)\[\/LIST\]/""<ul type=\"square\">\\1</ul>"$content);
$content preg_replace("/\[LIST=(.+?)\](.+?)\[\/LIST\]/""<ul type=\"\\1\">\\2</ul>"$content);
$content preg_replace("/\[\*\](.+?)\[\/\*\]/""<li>\\1</li>"$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 "[HR]Жирный";
$text bth($text);
echo 
$text;
?>


pch 02.05.2006 23:20

Цитата:

$content = preg_replace("/\[FONT=(.+?)\](.+?)\[\/FONT\]/", "<font face=\"\\1\">\\2</font>", $content);
ЧТО??? ИМХО даже в phpbb 1.0 не было такой защиты... Чуть поправил (правил на ходу, поэтому могут быть всякие parse-ошибки...)
PHP код:

<?php
function bth($content) {

// Переносы строк
$content nl2br($content);

// Горизонтальная линия
$content str_replace("[HR]""<hr />"$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("/\[SUB\](.+?)\[\/SUB\]/""<sub>\\1</sub>"$content);
$content preg_replace("/\[SUP\](.+?)\[\/SUP\]/""<sup>\\1</sup>"$content);

// Мелкий шрифт
$content preg_replace("/\[SMALL\](.+?)\[\/SMALL\]/""<small>\\1</small>"$content);

// Нестандартный шрифт
$content preg_replace("/\[FONT=([^\"]+?)\](.+?)\[\/FONT\]/""<font face=\"\\1\">\\2</font>"$content);

// Название шрифта
$content preg_replace("/\[SIZE=(\d+?)\](.+?)\[\/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("/\[URL\]([a-z]+?)(:\/\/)([^\"]+?)\[\/URL\]/""<a href=\"\\1\\2\\3\" target=\"_blank\">\\1</a>"$content);
$content preg_replace("/\[URL=([a-z]+?)(:\/\/)[^\"]+?)\](.+?)\[\/URL\]/""<a href=\"\\1\\2\\3\" target=\"_blank\">\\2</a>"$content);

$content preg_replace("/\[URL\]([^\"]+?)\[\/URL\]/""<a href=\"http:\/\/\\1\" target=\"_blank\">\\1</a>"$content);
$content preg_replace("/\[URL=([^\"]+?)\](.+?)\[\/URL\]/""<a href=\"http:\/\/\\1\" target=\"_blank\">\\2</a>"$content);


// E-Mail
$content preg_replace("/\[EMAIL\]([^\"]+?)\[\/EMAIL\]/""<a href=\"mailto:\\1\">\\1</a>"$content);
$content preg_replace("/\[EMAIL=([^\"]+?)\](.+?)\[\/EMAIL\]/""<a href=\"mailto:\\1\">\\2</a>"$content);

// Изображение
$content preg_replace("/\[IMG\](http:\/\/)([^\"]+?)\[\/IMG\]/""<img src=\"\\1\\2\" border=\"0\" alt=\"\">"$content);
$content preg_replace("/\[IMG=(http:\/\/)([^\"]+?)\](.+?)\[\/IMG\]/""<img src=\"\\1\\2\" border=\"0\" alt=\"\\2\">"$content);

$content preg_replace("/\[IMG\]([^\"]+?)\[\/IMG\]/""<img src=\"http:\/\/\\1\" border=\"0\" alt=\"\">"$content);
$content preg_replace("/\[IMG=([^\"]+?)\](.+?)\[\/IMG\]/""<img src=\"http:\/\/\\1\" border=\"0\" alt=\"\\2\">"$content);

// Список
$content preg_replace("/\[LIST\]([^\"]+?)\[\/LIST\]/""<ul type=\"square\">\\1</ul>"$content);
$content preg_replace("/\[LIST=([^\"]+?)\](.+?)\[\/LIST\]/""<ul type=\"\\1\">\\2</ul>"$content);
$content preg_replace("/\[\*\](.+?)\[\/\*\]/""<li>\\1</li>"$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;

}


NaX[no]rT 02.05.2006 23:41

да глупая затея, есть уйма ресурсов где можно найти нужные тебе скрипты. Их там тысячи, просто внимательнее глянуть нужно.

k1b0rg 02.05.2006 23:49

кошмарный коды, что у первого что у второго.
Забыли про `
это фуфло. А вот что забыли про то что бб теги можно поставить внутрь друг друга.
И все ваши фильтры быстренько наепнуться.

pch 02.05.2006 23:57

2 k1b0rg
я и не претендовал на bulletproof код! Я лишь хотел указать автору на ПОЛНОЕ отсутствие фильтрации! На то, чтобы превратить этот код во что-то, мне надо ещё минут 10, но надо ли это, учитывая, что кода, выполняющего данную конкретную функцию дофига и больше - НЕТ!

pch 03.05.2006 00:03

А про обратный апостраф я что-то не врубил - зафиг его фильтровать, если кавычки и спаренные не пройдут и в тэг не выйдешь?

vectorg 03.05.2006 00:12

ппц, тема сплошной лол
Всё это отговорки... Признайте свои ошибки, и старайтесь не делать их в будущем!

Trinux 03.05.2006 01:33

Я делаю preg_match_all на бб код и уже работаю\обрабатываю вытащенные переменные. Очень удобно.

Developer 04.05.2006 18:05

NeX, нафига выложил мой дырявый сркипт бб-кодов :))) Я даже знаю где ты его взял - http://slaed.net/index.php?name=Foru...ewtopic&t=3365 .

Кстати, кто интересуется полезными решениямы, читает по ссылке выше. Там я выкладывал, некоторые даже довольно-таки неплохие решения. Но опыта меньше было - посему дырявее :)

Дикс 05.05.2006 19:58

меня всегда мучал один вопрос - почему многие кодеры пишут:
PHP код:

"<img src=\"/images/smiles/\\1.gif\" border=\"0\">" 

когда с одинарными кавычками код более удобно читать?
PHP код:

"<img src='/images/smiles/\\1.gif' border='0'>" 


Developer 06.05.2006 17:19

Дикс, вообще двойные кавычки в Html - это как правило хорошего тона, так скажем, и общепринятая традиция. А вот в Php - другой вопрос. Например я пишу двойные только по привычке.

Дикс 06.05.2006 20:23

не знаю причём здесь хороший тон, но если это удобней читать и не является ошибкой синтаксиса, я считаю стоит юзать одинарные. к тому же имхо они красивее :)

Trinux 06.05.2006 20:35

Тоже не понимаю причем тут правила хорошего тона. всегда стараюсь везде в html ставить одинакрную ковычку

nerezus 06.05.2006 21:03

А где написаны эти правила? =)
Дайте ссылку на пункт в спецификациях )))

Developer 06.05.2006 21:41

Дикс, на вкус и цвет... В общем мне не нравится одинарная, да и нигде в мануалах и в ихсодниках w3 не видел одинарных. Разве что в JavaScript, заключенного в двойные кавычки. Давай не будет тут разжить войны и споры, а просто скинем по полезному решению :)))

Вот вам так называемый аналог AJaX

Код:

<script type="text/javascript">
//<![CDATA[
function CRO()
{
    if (window.XMLHttpRequest)
    {
        var object = new XMLHttpRequest();
    }
    else
    {
        var object = new ActiveXObject('Msxml2.XMLHTTP');
        if (!object)
        {
            var object = new ActiveXObject('Microsoft.XMLHTTP');
        }
    }
    return object;
}

function GetRequest(link, post)
{
    var request = CRO();
    request.onreadystatechange = function() { if (request.readystate == 4 && request.status == 200) { eval(request.responsetext); } };
    request.open("POST", link, true);
    request.setrequestheader("Content-Type", "application/x-www-form-urlencoded");
    request.send(post);
}
//]]>
</script>

<!--

Поместите в файл http://localhost/rand.php следующий код:

    alert("<?php echo rand(1, 999)." | POST 1 = ".$_POST['post1']." | POST 2 = ".$_POST['post2']; ?>");

В результате вы получите примерно такую строку:

    555 | POST 1 = test1 | POST 2 = test2

-->

<a href="#" onclick="javascript:GetRequest('http://localhost/rand.php', 'post1=test1&post2=test2');">TEST</a>


Zadoxlik 06.05.2006 22:41

Какой ужас ваши бб-код парсеры =)

nerezus 06.05.2006 23:11

я придумал радикально-новый способ.

P.s. Трин, кинь в приват свой осику-номер ;)

Дикс 07.05.2006 19:36

2 Developer
объясни, пожалуйста, что такое AJaX
и что делает твой код.

nerezus 07.05.2006 20:00

Цитата:

объясни, пожалуйста, что такое AJaX
а в гугле набрать не судьба?

Дикс 07.05.2006 20:04

http://weblogic.ru/chto-takoe-ajax/
хы, рамблер рулит :)

Developer 12.05.2006 21:58

Для тех, кто в танке - AJax это коротко говоря загрузка определенной инфы без полной перезагрзки страницы. Например нада проголосовать - проголосвал, опрос перезагрузился а вся страница - нет. Быстро и дешего :)

pch 12.05.2006 23:13

Примеры использования и туториалы по AJAX можно найти здесь (EN).
Описание работы этой технологии и хороший метод реализации (не через эээ... хаки типа "if (window.XMLHttpRequest)"), а через кроссбраузерное изменение атрибута src у тэга script) здесь (РУ)

Trinux 13.05.2006 09:16

2 pch
Хаки куда более эффективное решение, чем определение браузера и димическое src от полученных данных. Простой пример. Опера позволяет подделывать USER-AGENT, к FF есть плагины. В итоге определение браузера можно обойти. И это твоя будет ошибка, а не ошибка поситителя. А вот хаками ты наверника определяешь браузер и 100% исключаешь сопутствующие ошибки

pch 13.05.2006 15:59

Хаки куда более эффективное решение, чем определение браузер - сорри, некоректно выразился. Определение браузера (хоть более-менее не примитивное) - это некоторого рода хак. Ведь что такое хак? Это применение какого-то неестественного кода (читай, неправильного семантически), с целью исправить глюк (или фичу ;)) того или иного браузера с помощью другого его глюка.
Например, чтобы вылечить отсутствие getElementById в старых IE приходиться писать что-то типа
Код:

<script language="JavaScript">
function realGetById(id)
{

return (document.all) ?  document.all(id) : document.getElementById(id);

}
</script>

Проверка на document.all - это, формально не определение браузера, но фактически - это именно оно! Так, возвращаясь к AJAX'у, изменение src у тэга скрипт введено давно и поэтому реально поддерживается всеми популярными браузерами. А выше приведённый пример не работает при отключенной поддержке ActiveX в ИЕ итд. Почитай приведённую мной ссылку - там толково. Хотя, поспорить по поводу вещей, относящихся к моему профессиональным увлечениям, я не против :p

ferryman 19.05.2006 17:53

Вот решил тему поднять.. Функция не моя, но прекрасно спраляется со своей задачей.

PHP код:

function strings_stripstring($text$wrap$length)
                {
                
$wordlen 0;
                for(
$i 0$i strlen($text); $i++) {
                  
$text2 .= $text[$i];
                  if(
$text[$i] != " "$wordlen++; else  $wordlen 0;
                  if(
$wordlen $wrap){
                    
$text2 .= " ";
                    
$wordlen 0;
                  }
                }
                
$text $text2;
                
$text substr($text0$length);
                return 
$text;
                } 


ZetRider 19.05.2006 21:43

Вот тут находятся полезные решения небольших скриптов: [ Link ]
В базе их 66 (постепенно пополняю) штук.. вот и список:

Script [1]: Определяем количество строк в txt файле.
Script [2]: Скрипт запрещающий производить кэширование.
Script [3]: Удаление строки из txt файла.
Script [4]: Удаление строки из txt файла использую форму для ввода.
Script [5]: Отчищаем содержимое txt файла.
Script [6]: Сохраняем вводимый текс из формы в txt файл.
Script [7]: Нажимаеш на слово => выпадает меню.
Script [8]: Записываем IP адрес в txt файл.
Script [9]: Выводим IP адрес.
Script [10]:Обновление страницы через n секунд.
Script [11]:Вывод случайных чисел.
Script [12]:Вывод случайного слова.
Script [13]:Обрезание строки на n символах.
Script [14]:Подавление ошибок.
Script [15]:Ссылка на копирование в буфер обмена.
Script [16]:Выводим теги как текст.
Script [17]:Ромашка ICQ показывающая статус номера.
Script [18]:Самый простой счетчик посещений.
Script [19]:Выводим число посетителей которые сейчас на сайте.
Script [20]:Скрипт помогает записать в начало файла, сдвигая старое вниз.
Script [21]:Система бана, добавление и задействование.
Script [22]:Определяем размер файла.
Script [23]:Вставляем новые данные на 5 строку, а саму 5 строку передвигаем на 6.
Script [24]:Выводим случайное число от 0 до 100.
Script [25]:Выводим случайную фразу (строку) из txt файла.
Script [26]:Выводим содержимое папки c:/windows.
Script [27]:Замена нескольких пробелов на 1 пробел.
Script [28]:Заменяем в нужнос строке на слово.
Script [29]:Меняем регистр букв в тексте на большие.
Script [30]:Меняем регистр букв в тексте на маленькие.
Script [31]:Используем в качестве разделителя (два двоеточия).
Script [32]:Ищем в txt файле слово привет.
Script [33]:Ищем символ в тексте.
Script [34]:Кодируем текст в base64.
Script [35]:Кодирум текст в crc32.
Script [36]:Кодирум текст в md5.
Script [37]:Количество строк в файле.
Script [38]:Делаем первую букву занлавной.
Script [39]:Объединяем 3 файла в один массив, а именно в $new_array.
Script [40]:Определяем из трёх чисел самое большое.
Script [41]:Определяем из трёх чисел самое маленькое.
Script [42]:Определяем количество символов в тексте.
Script [43]:Получаем ASCII код, символа @.
Script [44]:Раскодируем текст из base64.
Script [45]:Считываем из файла первые 5 строк.
Script [46]:Считываем из файла последние 5 строк.
Script [47]:Определяем сколько раз встречается символ в строке.
Script [48]:Как просто работать с произвольным XML файлом.
Script [49]:Как могут быть устроены функции explode() и implode().
Script [50]:Пример простого PHP сценария.
Script [51]:Примеры коментариев.
Script [52]:Копирование файлов на php.
Script [53]:Удаление файлов на php.
Script [54]:Определение даты и времени.
Script [55]:Выводим список файлов, и ссылку на них.
Script [56]:Заменяем выводимое слово из файла на заданное.
Script [57]:Вывести информацию: браузер, айпи, откуда пришел.
Script [58]:Используем в качестве разделителя (два двоеточия) Способ №2.
Script [59]:При наведение на картинку, она увеличивается.
Script [60]:Вывод список файлов из заданной папки с размером, и ссылка на их удаление.
Script [61]:Вывести URL страницы.
Script [62]:Вывести с конца файла в начало.
Script [63]:Сбрасываем POST-данные.
Script [64]:Если файл пустой пишет да, иначе нет.
Script [65]:Редактирование заданного файла.
Script [66]:Редактирование файла.

ferryman 22.05.2006 11:47

Определение IP

PHP код:

function check_ip($check_ip){
              if(isset(
$_SERVER['HTTP_X_FORWARDED_FOR'])){
              
$hostname gethostbyaddr($_SERVER['HTTP_X_FORWARDED_FOR']);
              } else {
              
$hostname=gethostbyaddr(getenv("REMOTE_ADDR"));
              }
              
$name=gethostbyname($hostname);
                    
$ip getenv("REMOTE_ADDR");
                    if (
$name == $ip){
                    foreach (
gethostbynamel($name) as $check_ip){
                    if (
$ip == $check_ip) return $check_ip;
                    }
                    }else{
                     
$check_ip gethostbyname($_SERVER['HTTP_X_FORWARDED_FOR']);
                     return 
$check_ip;
                    }
                    } 


Trinux 22.05.2006 14:30

2 ferryman
Ой, а можно я поинтересуюсь, почему в одном случае ты выдираешь IP из переменной окружения $_SERVER, а в другом функцией GetEnv?

ferryman 23.05.2006 10:06

А ты методом тыка попробуй и поймешь...

Кстати, если есть где почитать про єто
PHP код:

"HTTP_CLIENT_IP"
"HTTP_X_FORWARDED_FOR" 

Знаю что используют, поєтому вставляю, и не претендую на лучший код(но сам использую єту функцию)


Время: 08:45