Перейти из форума на сайт.


Система IP-видеонаблюдения "Линия". Скачать бесплатную демо-версию для 16 камер. НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP: Полезные (интересные и оригинальные) решения

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Открыть новую тему     Написать ответ в эту тему

SafeWay



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Начну:

Код:
 
  function err_handler ($errno, $errstr, $errfile, $errline) {
    global $display_errors;
    if(($errno != E_NOTICE && $errno != E_WARNING) && $display_errors){
      echo '';
    }
  }
  $error_flags = E_ALL & ~E_NOTICE;
  @error_reporting($error_flags);
  @ini_set ('error_reporting', $error_flags);
  $old_error_handler = set_error_handler("err_handler");
 

 
Бывает полезным, убивает все нотайсы, выводы ошибок и прочее.
 
ЗЫ: Желательно прикрепить.



Публикуем решения, а не задаем вопросы!
Тех же, кто этого не понимает, будем БАНИТЬ!  
Тема именно для уникальных, оригинальных и красивых решений. Если ты только взялся изучать php - не стоит сюда писать, так как, заведомо, у тебя не будет такого решения
 
ps: выделил специально для тех, у кого проблемы со зрением.





Цитата:
ЗЫ: Желательно прикрепить.
В ПМ по этому поводу писать надо. — Svarga.

Всего записей: 365 | Зарегистр. 28-12-2003 | Отправлено: 07:30 26-07-2004 | Исправлено: Cheery, 16:57 25-03-2007
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vof4ikWP
зачем изобретать велосипед?
http://www.php.net/ip2long
http://www.php.net/long2ip

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:42 23-12-2013
vof4ikWP

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
Действительно, . Но сегодня 6 разработчиков минимум мидл уровня, с разных компаний не знали о них.  А вот оно как. Можно удалить мой велосипед, дабы не засорять такую хорошую тему. Спасибо

Всего записей: 5 | Зарегистр. 21-06-2012 | Отправлено: 00:02 24-12-2013 | Исправлено: vof4ikWP, 00:03 24-12-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Если кому нужно - набросал небольшой BBcode парсер (сразу говорю - не работает с вложенными однотипными тегами, то есть [b]123[b]345[/b]567[/b]
не хотелось заниматься парсингом таких вещей.
Ну и не претендую на красоту кода - нужно было быстро и использовался код для генерации контента тега..
 

Код:
namespace ShortCodes;
 
class ShortCodes {
    private $tags = array();
    private $namespace = '\\ShortCodes\\';
    private $path = 'tags/';
    private $regexp = '/\[(?<tag>\w+)(=(?P<value>[^\]]+))?\]((?P<content>(?:(?!\[\\1).)*?)(\[\/\\1\]))?/is';
 
    public function convert_tags($text)
    {
        if (!is_string($text) || empty($text))
            return $text; // works only with text
        else
            return $this->format_tags($text);
    }
 
    private function format_tags($input)
    {
        $string = '';
 
        if (is_array($input)) // call from callback
        {
            $string = $input[0];
            $tag = strtolower($input['tag']);
            $value = isset($input['value']) ? $input['value'] : false;
            $content = isset($input['content']) ? $input['content'] : false;
 
            if (!file_exists(__DIR__ . '/' . $this->path . ucfirst($tag) . 'Tag.php')) // tag does not exist
            {
                if (!$content) // no enclosed text, return as is
                        return $string;
                // or try to parse the content of the tag, leaving the original tag as is
                return '[' . $tag . ($value ? '=' . $value : '') . ']' .
                       preg_replace_callback($this->regexp, array($this, 'format_tags'), $content) .
                       '[/' . $tag . ']';
             }
            
        if (!isset($this->tags[$tag])) // class not loaded
            {
                include(__DIR__ . '/' . $this->path . ucfirst($tag) . 'Tag.php');  // include tag class
                $className = $this->namespace . ucfirst($tag) . 'Tag';
                $this->tags[$tag] = new $className(); // initialize and store in array
            }
 
            $input = $this->tags[$tag]->convert_tag($value, $content); // format requested tag
            if ($input === '') // clear tags
                return '';
        }
 
        return $input === false ? $string : preg_replace_callback($this->regexp, array($this, 'format_tags'), $input);
    }
}
 
 
abstract class AbstractTag {
    protected $tagName = '';
    protected $value = '';
    protected $content = '';
 
    public function __construct()
    {
        // set tag name from its class
        $this->tagName = preg_replace('/Tag$/', '', basename(get_class($this)));
    }
 
    public function convert_tag($value = '', $content = '')
    {
        $this->value = $value;
        $this->content = $content;
        return $this->format_tag();
    }
 
    abstract protected function format_tag();
}

 
Классы тегов находятся в папке tags, файл называется Имя_тегаTag.php, ну и класс в нем, соответственно, Имя_тегаTag
Для удобства введено пространство имен.
 

Код:
namespace ShortCodes;
 
class BTag extends AbstractTag {
 
    protected function format_tag()
    {
        if ($this->content) // requires closing tag
            return '<b>' . $this->content . '</b>';
        return false;
    }
}

 
данный код оборачивает [b]текст[/b] в <b>текст</b>
если внутри есть другие теги (не b), то они будут обработаны тоже.
 
работает с закрытыми и не только тегами
[tag=value], [tag=value]content[/tag], [tag], [tag]content[/tag]
в классе обработки тега они находятся в $this->value и $this->content, соответственно
 
классы тегов подгружаются по мере надобности.
можно, конечно, сделать автозагрузку и тд и тп, но не было необходимости.
 
ps: ну и  
        if ($this->content) // requires closing tag  
            return '<b>' . $this->content . '</b>';  
        return false;  
 
если нет контента и возвращается false, то теги так и остаются текстом.
если вернуть пустую строк return '';, то тег будет удален (содержимое, если есть, останется)

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 10:36 03-02-2014 | Исправлено: Cheery, 10:42 03-02-2014
Andy_t

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
 
Спасибо.

Всего записей: 134 | Зарегистр. 22-01-2002 | Отправлено: 19:40 23-02-2014
TrallBus



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
кто-нибудь может скинуть ссылку на хороший учебник по РНР, чтоб самому можно было поучиться

Всего записей: 22 | Зарегистр. 23-02-2014 | Отправлено: 23:01 11-03-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
TrallBus
внимательно, очень внимательно, прочитайте название темы.
Информация по PHP: учебники, ресурсы, документация
PHP ebooks

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:19 12-03-2014
ShaDOWNIK



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
а какие книги есть по безопасности кода

Всего записей: 23 | Зарегистр. 07-05-2009 | Отправлено: 18:15 30-04-2014 | Исправлено: ShaDOWNIK, 18:18 30-04-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ShaDOWNIK
Безопасное программирование на PHP
если вы знаете язык хорошо, то и понимаете откуда может прийти проблема.
поэтому сложно сказать что то о книгах.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:30 30-04-2014
ShaDOWNIK



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
Огромное спасибо

Всего записей: 23 | Зарегистр. 07-05-2009 | Отправлено: 07:00 01-05-2014
SashaShura

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подробнее...




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

Всего записей: 3 | Зарегистр. 04-05-2014 | Отправлено: 15:48 04-05-2014
esche

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
На мой взгляд, изучение PHP лучше начинать не с PHP, а с базовых (?) понятий программирования - константы, переменные, циклы, алгоритмы, функции, процедуры, классы/объекты/методы, рекурсия и т.д.
 
По безопасности - есть смысл начинать с мануала
 
 
Потёрто (ответ на оффтоп)
Подробнее...

Всего записей: 49 | Зарегистр. 03-05-2013 | Отправлено: 14:59 07-05-2014 | Исправлено: esche, 15:03 07-05-2014
Mordavorot



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А можно ли так сделать на форуме, чтобы в конце каждого поста добавлялся определённый смайлик?




Научитесь читать названия тем и шапки в них!

Всего записей: 1195 | Зарегистр. 01-09-2011 | Отправлено: 16:03 09-05-2014
antonpv



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Но сегодня 6 разработчиков минимум мидл уровня, с разных компаний не знали о них.

Значит они явно не мидл уровня, поскольку таковые, как минимум, умеют пользоваться документацией и гуглом.

Всего записей: 65 | Зарегистр. 18-10-2012 | Отправлено: 19:01 05-09-2014
gorenski



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mordavorot

Цитата:
А можно ли так сделать на форуме, чтобы в конце каждого поста добавлялся определённый смайлик?

на ру-борде или вообще?




Используйте ПМ и перечитайте название темы.

Всего записей: 708 | Зарегистр. 29-01-2003 | Отправлено: 05:27 16-03-2015
Dim Dimych 02



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Скрываем email от ботов.
Да и вообще для вывода корректно в разных браузерах русских букв в javascript'е.
 

Код:
 
class HTML {
 
/**
* @var  boolean  Для XHTML
*/
public static $strict = TRUE;
 
 
/**
*    echo HTML::chars($value);
*
* @param   string  $value  
* @param   boolean $double_encode
* @param   string  $charset
* @return  string
*/
public static function chars($value, $double_encode = TRUE, $charset = 'utf-8')
{
            return $value !== '' && self::$strict ? htmlspecialchars( (string) $value, ENT_QUOTES, $charset, $double_encode) : $value;
}
 
 
/**
*    echo HTML::to_unicode($value)
*
* @param   string  $value  
* @param   boolean $encode
* @return  string
*/
public static function to_unicode($value = '', $encode = TRUE)
{
            $ansi = array(
'№', ' ',
'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И',
'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т',
'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь',
'Э', 'Ю', 'Я',
        'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и',
        'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т',
        'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь',
 'э', 'ю', 'я'
 );
 
        $unicod = array(
        '\u2116', '\u0020',
        '\u0410', '\u0411', '\u0412', '\u0413', '\u0414',
        '\u0415', '\u0401', '\u0416', '\u0417', '\u0418',
        '\u0419', '\u041A', '\u041B', '\u041C', '\u041D',
        '\u041E', '\u041F', '\u0420', '\u0421', '\u0422',
        '\u0423', '\u0424', '\u0425', '\u0426', '\u0427',
        '\u0428', '\u0429', '\u042A', '\u042B', '\u042C',
        '\u042D', '\u042E', '\u042F',
        '\u0430', '\u0431', '\u0432', '\u0433', '\u0434',
        '\u0435', '\u0451', '\u0436', '\u0437', '\u0438',
        '\u0439', '\u043A', '\u043B', '\u043C', '\u043D',
        '\u043E', '\u043F', '\u0440', '\u0441', '\u0442',
        '\u0443', '\u0444', '\u0445', '\u0446', '\u0447',
        '\u0448', '\u0449', '\u044A', '\u044B', '\u044C',
        '\u044D', '\u044E', '\u044F'
        );
 
        return ($encode) ? str_replace($ansi, $unicod, $value) : str_replace($unicod, $ansi, $value);
}
 
 
/**
*     echo HTML::mailto($email, 'text', 'id');
*
* @param   string  $email
* @param   string  $title
* @param   string  $id
* @return  string
*/
public static function mailto($email, $title = NULL, $id = 'output_em_text')
{
$out = '';
 
if ($email !== '')
{
$email = self::chars( (string) $email);
$email = str_replace(array('@', '.'), array('&', '*'), $email);
              
           $title =  self::chars( (string) $title);
           $title = (($title == '') ? 'x' : '"' .self::to_unicode($title) .'"');
 
           $out = '<a href="&#109;&#097;&#105;&#108;&#116;&#111;&#058;:' .$email .'">' .$title .'</a>'
                 .'<script type="text/javascript">'
                 .'/*<![CDATA[*/'
                 .'var e=document.getElementById("' .$id .'");'
                 .'var x="' .$email .'";'
                 .'x=x.replace("&","@");'
                 .'x=x.replace(/\*/g,".");'
                 .'e.href=e.href+x;'
                 .'e.innerHTML=' .$title .';'
                 .'/*]]>*/'
                 .'</script>';
        }
         
        return $out;
}
}
 

Всего записей: 2 | Зарегистр. 18-03-2015 | Отправлено: 20:02 18-03-2015 | Исправлено: Dim Dimych 02, 20:07 18-03-2015
MaxGalCom



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
И нахрена скрывать? Почту с домена цеплять на яндекс или маил или гугл маил, которые и так успешно со спамом борются, чем засорять лишним JS веб страницу




Здесь не тема для вопросов. Тем более, в ряде случаев, почту нежелательно куда то еще переносить.

Всего записей: 1 | Зарегистр. 19-08-2015 | Отправлено: 08:16 19-08-2015
MaxXx1313



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
для красивой отладки
 
 
/**
 * print_table()
 *  
 * @param mixed $mixed
 * @param integer $level
 * @return
 */
function print_table($mixed, $level=9){
  if($level<=0){ echo '**LIMIT**'; return; }
 
  $is_obj = is_object($mixed);
  if( $is_obj )
    $mixed = get_object_vars($mixed);
   
  if($level==9) echo '<br />';
 
  if(is_array($mixed)){
    if( empty($mixed) )
      if($is_obj)
        echo '<span style="color:blue">{empty object}</span>';
      else
        echo '<span style="color:blue">[empty array]</span>';
    else{
      echo '<table cellspacing="0" width="100%" border="1" '.($is_obj?'style="border-style: dashed;"':'').'>';
      foreach($mixed as $key=>$val){
        echo '<tr><td width="20%">';
        print_table($key, 1);
        echo'</td><td>';
        print_table($val, $level-1);
        echo '</td></tr>';
      }
      echo '</table>';
    }
  }elseif(is_null($mixed)){
    echo '<span style="color:blue">null</span>';
  }elseif($mixed===false){
    echo '<span style="color:red">false</span>';
  }elseif($mixed===true){
    echo '<span style="color:green">true</span>';
  }elseif(is_numeric($mixed) && $mixed>1000000000){
    echo $mixed,' <span style="color:gray">[',date('d-m-Y H:i:s',$mixed),']</span>';
  }elseif($mixed===''){
    echo '<span style="color:blue">empty string</span>';      
  }else{
    echo $mixed;
  }
   
}

Всего записей: 35 | Зарегистр. 30-06-2011 | Отправлено: 17:18 01-10-2015
leshikbr

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем привет у кого есть модуль доставки exline поделитесь плиз

Всего записей: 28 | Зарегистр. 16-05-2012 | Отправлено: 10:11 17-10-2015
Kaber



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подключаемый файл для мета описания страниц, без db
 

Код:
<?
$url = $_SERVER['REQUEST_URI'];  //получаем url страницы и записываем в $url
 
$array_d = array(
"Дискрипшен главная" => '/',
"Дискрипшен контактов" => '/kontakty/'
 );
 
$array_t = array(
"Татйл главная" => '/',
"Тайтл контакты" => '/kontakty/'
 );
 
$array_k = array(
"Кейвордс главная" => '/',
"Кейвордс контакты" => '/kontakty/'
 );
 
////////////////////////////////////////////////////////////
 
//       Выбираем из массивов данные по $url         //
 
////////////////////////////////////////////////////////////
 
$description = array_search($url, $array_d);  
$title = array_search($url, $array_t);  
$keywords = array_search($url, $array_k);  
 
?>

Всего записей: 689 | Зарегистр. 14-03-2014 | Отправлено: 18:20 18-05-2017 | Исправлено: Kaber, 18:21 18-05-2017
Mavrikii

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Kaber
к чему такие сложности, если можно сделать все еще проще?

Код:
$data = [
'/' => [
  'title'           => 'Заголовок /',
  'description' => 'Описание /',
  'keywords'   => ['ключевые', 'слова']
],
'/kontakty/' => [
  'title'           => 'Заголовок /kontakty/',
  'description' => 'Описание /kontakty/',
  'keywords'   => ['ключевые', 'слова']
],
];
$info = isset($data[$url]) ? $data[$url] : ['title' => 'Нет заголовка', 'description' => 'Нет описания', 'keywords' => []];

 

Всего записей: 5227 | Зарегистр. 20-09-2014 | Отправлено: 21:18 18-05-2017 | Исправлено: Mavrikii, 21:19 18-05-2017
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP: Полезные (интересные и оригинальные) решения

Имя:
Пароль:
Сообщение

Для вставки имени, кликните на нем.

Опции сообщенияДобавить свою подпись
Подписаться на получение ответов по e-mail
Добавить тему в личные закладки
Разрешить смайлики?
Запретить коды


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2017

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru