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

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

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

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

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

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
G_Drey_V

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
danil74, убедительная просьба, когда выкладываешь скрипт для чтения делай его удобочитаемым, т.е. с пробелами, отступами и т.д.
Потом, а для чего нужен длинный массив?.. обычно это делается просто при помощи LIMIT START, COUNT в запросе к БД... и замечательно можно обойтись без длинного массива.
 
register_globals=on - зависит исключительно от желаний пользователя - хочешь включай, хочешь выключай, но в целях безопасности register_globals отключена.
 
Очень не советую использовать iconv, может я конечно ошибаюсь, но на работа этой функции зависит от того подключены ли кодовые страницы на сервере, если они не подключены, но их включение дело достаточно сложное. Вместо нее лучше прибегать при запросе к БД использовать в htaccess CharsetDisable On  и при запросе "SET CHARACTER SET кодировка".
 
Cheery! danil74 - молодец, пусть выкладывает скрипты, может чего-нибудь реально полезное выложит, а другие будут в процессе учиться на его ошибках. И вместо того, чтобы писать фразы в стиле "можно сделать..." лучше выложи свое гениальное решение - покажи другим, как это надо сделать!

Всего записей: 158 | Зарегистр. 20-12-2003 | Отправлено: 23:32 26-03-2007
Cheery



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

Цитата:
И вместо того, чтобы писать фразы в стиле "можно сделать..." лучше выложи свое гениальное решение - покажи другим, как это надо сделать!

впредь попрошу быть осторожнее.. я не юноша, которого можно взять "на слабо", и подобные слова у меня просто отбивают желание продолжать общение.

Цитата:
Потом, а для чего нужен длинный массив?.. обычно это делается просто при помощи LIMIT START, COUNT в запросе к БД... и замечательно можно обойтись без длинного массива.  

а кто сказал, что она есть? или что не идет чтение из файла? или еще откуда, но не из базы..
насчет постраничного вывода из базы:  
PHP&MySQL: Постраничный вывод
так же есть и тема для постраничного вывода из текстового файла:
PHP: постраничный вывод данных из текстовой базы
 

Цитата:
Очень не советую использовать iconv, может я конечно ошибаюсь, но на работа этой функции зависит от того подключены ли кодовые страницы на сервере, если они не подключены, но их включение дело достаточно сложное

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

Код:
$limit=20;
$limit_page=5;
$c=count($a);
$page=intval($_GET['page']);  
$page=($page*$limit>=$c)?floor($c/$limit):($page<0?0:$page);
if($page>=$limit_page) echo"<a href='?page=".($page-$limit_page)."'>&lt;&lt;</a>";
$i=$bottom=floor($page/$limit_page)*$limit_page;
while($i<$bottom+$limit_page&&$i*$limit<=$c)
   echo (($i==$page)?(($i++)+1):"<a href='?page=$i'>".(($i++)+1)."</a>")." ";
if($page-$page%$limit_page+$limit_page<=$c/$limit) echo "<a href='?page=".($page+$limit_page)."'>&gt;&gt;</a>";
echo "<br>";
echo implode('',array_splice($a,$page*$limit,$limit));

 
 
ну и напоследок..

Цитата:
может чего-нибудь реально полезное выложит

слово может не имеет отношения к данному топику. зачем нам свалка непонятного мусора?

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 04:55 27-03-2007 | Исправлено: Cheery, 05:00 27-03-2007
danil74



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Привет, Cheery!!!
Ещё раз перечитал СОГЛАШЕНИЕ ПО ИСПОЛЬЗОВАНИЮ ФОРУМА «RU-BOARD» и не нашёл каких-либо причин неня предупреждать или банить. Если я лично Вас чем-либо, например
Цитата:
Модератор здесь смешной
обидил, извините, я не со зла.
Хочу расставить точки над i.

Цитата:
я же просил не постить подобные вещи..

Вообще я, как человек не лишённый недостатков (никто не идеален!!), могу иметь мнение, что мои скрипты самые гениальные в Мире, а Вы, по тем же причинам, можете их считать полным отстоем. И если я "извращенец, который этого не замечает", то запросто может найтись ещё много подобных "извращенцев", которым моё творчество очень понравится. Но Вы хозяин этого форума и поэтому вполне имеете возможность проводить политику "что хочу, то и ворочу". Вы можете здесь назвать объективные критерии, по которым я бы мог точно и однозначно определить достоин ли мой скрипт оказаться на страницах этого форума или нет? Быть может мне сначала высылать свой скрипт Вам на почту и только после получения одобрения публиковать здесь? Поскольку даже некрасивый, но работоспособный код трудно написать, такие письма будут нечастыми и не будут Вас сильно обременять.

Цитата:
эта тема НЕ предназначена для обсуждения ваших возможностей или недостатков

Мне интересно Ваше мнение. Какие, по вашему, побуждающие мотивы заставляют людей оторваться от повседневных дел и писать сообщения на форум? Ведь вместо публикации программных кодов можно поиграться на компе, почитать, покодить, погулять и т.д.
Человек так устрен, что всегда всё делает только для себя. Как писал профессор Павлов "нам не нужно ничего, кроме наших нервных ощущений"(человеческий разум он тоже считал феноменом нервной системы). Примечательно, что даже детей рождают думая только о себе. На мой вопрос "зачем вы родили себе ребёнка" обычно отвечают, что им (родителям) очень захотелось поняньчиться и чтобы "в старости было кому стакан воды подать".
 
Мне бы хотелось получить внятный ответ о Вашем отношении ко мне и мнеподобным, чтобы точно знать как поступить дальше. Мне просто лень искать другой форум, но если нужно, то, ИМХО, найду и осяду там.




предупреждение номер раз. пост не касающийся данной темы /Cheery/
п. 2.8.2. главы VIII Соглашения по использованию
п. 2.15. главы VIII Соглашения по использованию

Всего записей: 4 | Зарегистр. 25-03-2007 | Отправлено: 05:37 28-03-2007 | Исправлено: Cheery, 06:14 28-03-2007
ply

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

Код:
 
function pagination($current,$count,$url,$spread=2,$class='pagination') {
    if ($count<2) return true;
    $url = SITEURL.$url;
    $out = '<div class="'.$class.'">'.PAGES.': ';
    $out .= '<a href="'.str_replace('##',1,$url).'">1</a>';
    if ( ($current-$spread-1-1)>2 ) {$out .= ' ...';$i=$current-$spread;}
    else $i = 2;
    if ( ($count-$current-$spread-1)>2 ) {$end=$current+$spread;}
    else $end = $count - 1;
 
    for ($i=$i;$i<=$end;$i++) $out .= ' <a href="'.str_replace('##',$i,$url).'">'.$i.'</a>';
 
    if ($end!=($count-1)) $out .=' ...';
 
    if ($count!=1) $out .= ' <a href="'.str_replace('##',$count,$url).'">'.$count.'</a></div>';
 
    $out = str_replace('<a href="'.str_replace('##',$current,$url).'">'.$current.'</a>', '<b>'.$current.'</b>', $out);
    return $out.'</div>';
}
 

в url пердается ссылка, куда будут ссылаться номера страниц. Вместо номера страницы в ссылке надо поставить ##

Всего записей: 189 | Зарегистр. 13-05-2006 | Отправлено: 19:01 08-04-2007 | Исправлено: ply, 19:03 08-04-2007
G_Drey_V

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
я прям какой-то критикан, но, как я уже говорил, код надо отделять от верстки!!! иначе эта функция теряет всекую смысловую нагрузку, т.к. применима только к данной верстке!
а что за константа PAGES?
никогда так не делай: "$i = $i"! Это ужасно.
вместо $i++ лучше использовать ++$i.

Цитата:
$out = str_replace('<a href="'.str_replace('##',$current,$url).'">'.$current.'</a>', '<b>'.$current.'</b>', $out);  

- это не самый лучший вариант, лучше это проверять в процессе создания ссылок.
а еще мне интересно мнение народа - как вы относитесь в списке страниц к кнопке "далее"? мне, например, не нравится, когда я не могу выбрать страницу, а должен передвигаться по одной до нужной страницы.. а если мне нужна страница номер 152, то как мне туда попасть с первой?




Блин.. непонятно было сказано? тема не для обсуждений? /Cheery/

Всего записей: 158 | Зарегистр. 20-12-2003 | Отправлено: 21:20 08-04-2007 | Исправлено: Cheery, 04:55 09-04-2007
PRGMM

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Огромная просьба подсказать, как можно сделать более компактным , удобным,  красивым этот скрипт.  
Не судите строго !!!




Для тех, кто в танке.. здесь не задают вопросов и не обсуждают решения /Cheery/

Всего записей: 11 | Зарегистр. 22-04-2007 | Отправлено: 23:24 22-04-2007 | Исправлено: Cheery, 23:24 22-04-2007
PRGMM

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




А для кого правила придумали? Еще одна подобная выходка и бан /Cheery/

Всего записей: 11 | Зарегистр. 22-04-2007 | Отправлено: 08:01 23-04-2007 | Исправлено: Cheery, 08:03 23-04-2007
Jokerjar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Сегодня переносил сайт на другой хост и обнаружил, что в PHP 4 нет столь нужной функции str_ireplace. Но это не помеха:

Код:
if(!function_exists('str_ireplace'))  
  {
  function str_ireplace($search,$replace,$subject)  
    {
    $search = preg_quote($search, "/");
    return preg_replace("/".$search."/i", $replace, $subject);  
    }
  }

Всего записей: 591 | Зарегистр. 22-03-2006 | Отправлено: 08:41 23-04-2007
PRGMM

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
 ты издеваешься, я написал то что реально может помочь людям . Один минус, я не профессионал (пока) . Вот была надежда , реально отшлифовать скрипт.




Неумеющие читать (шапки и правила) нам на форуме не нужны /Cheery/
ps: и хватит флеймить.. все вопросы - в пм.. для обсуждения своих потуг создаем отдельные темы, а не гадим в подобных

Всего записей: 11 | Зарегистр. 22-04-2007 | Отправлено: 22:35 23-04-2007 | Исправлено: Cheery, 23:38 23-04-2007
driverok



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Такой мини-скриптик для удаления из строки повторяющихся символов (использовал для удаления пробелов)

Код:
 
 
$good = str_replace (" ","*",$good); //замена  всех пробелов на *
 
//оставляем только одну подряд звездочку
while (strpos($good,'**')){
    $good = str_replace ("**","*",$good);
}
 
//теперь $good содежит не более одного пробела подряд
 

Всего записей: 91 | Зарегистр. 02-08-2004 | Отправлено: 23:57 27-04-2007
Cheery



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

Цитата:
Если ты только взялся изучать php - не стоит сюда писать, так как, заведомо, у тебя не будет такого решения  

это вас тоже касается.

Код:
$str=preg_replace('/\s{2,}/'," ",$str)

решает это в одну строчку


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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:07 28-04-2007 | Исправлено: Cheery, 00:16 28-04-2007
sTa1kEr



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Скрипт для автоинклюда(через магическую функцию __autoload()) файлов с классами. Только не по имени класса (как это показано в примере на php.net), а по реальному нахождению классов. Может ускорить разработку для истинных любителей ООП и снять головную боль с инклюдами. Подробнее...
 
Использовать его очень просто. Задаете пути к сайту, директории с классами и глубину сканирования и инклюдите его. Далее можете в любом месте вашего скрипта сразу обращаться к классам в заданной директории.
 
Надеюсь его можно отнести к уникальным и/или оригинальным и/или красивым решениям

Всего записей: 279 | Зарегистр. 28-07-2005 | Отправлено: 18:07 03-05-2007 | Исправлено: sTa1kEr, 18:10 03-05-2007
Cheery



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

Цитата:
Надеюсь его можно отнести к уникальным и/или оригинальным и/или красивым решениям

но не своим же.. напоминает из  PHP 5. В подлиннике. 2005 года

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 19:47 03-05-2007
sTa1kEr



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

Цитата:
но не своим же..  

От первого до последнего байта своим (включая идею). А то что все уже давно придумано до нас - это известный факт. Т.ч. я не отрицаю, что возможно кто-то уже написал и опубликовал похожее решение. Мне же проще и интереснее (и чаще быстрее) написать самому, чем искать где-либо готовое.

Цитата:
напоминает из  PHP 5. В подлиннике. 2005 года

Это книга? Или же можно ссылку на источник?

Всего записей: 279 | Зарегистр. 28-07-2005 | Отправлено: 20:08 03-05-2007
Cheery



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

Цитата:
Это книга? Или же можно ссылку на источник?

да, книга.. нет, там написано несколько иначе, так что пойдет.. и не будем тут это обсуждать

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 20:12 03-05-2007
Jokerjar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вывод даты нормальным русским языком:
 

Код:
function rusdate($d)    
{  
  $montharr = array("января","февраля","марта","апреля","мая","июня","июля","августа","сентября","октября","ноября","декабря");  
  $i =  date("m",$d) - 1;  
  return date("j",$d)." $montharr[$i] ".date("Y",$d);  
}

Узнаем серверное время со сдвигом часовых поясов:
 

Код:
function zonetime($date,$zone)
{
  $date+=$zone*3600;
  return gmdate("d.m.Y H:i",$date);
}

Например, echo
Код:
zonetime(time(),+3);
покажет московское время (независимо от того, в каком поясе расположен сервер )
 
Следующий скрипт весьма полезен (писал для своей гостевой). Выводит мыла таким образом, чтоб их не смогли воровать роботы-собиральщики мыл (во как):
 

Код:
function showemail($email)
{
  echo "<script language=\"JavaScript\"><!--\n".
  "document.write('".substr($email,0,strpos($email,"@"))."'+'@'+'".
  substr($email,strpos($email,"@")+1,strpos($email,".")-strpos($email,"@")-1)."'+'.'+'".
  substr($email,strpos($email,".")+1, strlen($email) - strpos($email,".")-1)."');\n".
  "//--></script>\n";
}

(подразумевается, что используется валидный параметр вида бла@бла.бла, проверку мутите еще при вносе в БД мыла =))

Всего записей: 591 | Зарегистр. 22-03-2006 | Отправлено: 07:31 27-05-2007
Cheery



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

Цитата:
Следующий скрипт весьма полезен (писал для своей гостевой). Выводит мыла таким образом, чтоб их не смогли воровать роботы-собиральщики мыл (во как):

и при чем тут php??  
Защита от спама: способы сокрытия e-mail-адресов
php просто формирует код страницы и никоим образом не относится к защите
 
 

Цитата:
Вывод даты нормальным русским языком:

было уже

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:09 28-05-2007
RealAnaphema



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
В процессе работы над проектом столкнулся с необходимостью частого создания XML-документов в разных местах. Немного напрягся и сваял пару функций для преобразования массива любой вложенности в XML (а точнее в DOMDocument [PHP 5]).
 
Вот сами функции:

Код:
 
  function doNode($_name, $_data, $_dom) {
    $node = $_dom->createElement($_name);
      # Обработка атрибутов
      if(is_array($_data['@']))
        foreach($_data['@'] as $k => $v)
          $node->setAttribute($k, $v);
      # Обработка элементов
      if(is_array($_data['#']))
        foreach($_data['#'] as $k => $v)
          if(is_array($v))
            $node->appendChild(doNode($k, $v, $_dom));
          else
            $node->appendChild($_dom->createElement($k, $v));
      # Обработка списка
      if(is_array($_data['$']))
        foreach($_data['$']['^'] as $elem)
          $node->appendChild(doNode($_data['$']['%'], $elem, $_dom));
    return $node;
  }
   
  function doXML($_data) {
    $dom = new DOMDocument('1.0', 'utf-8');
    foreach($_data as $name => $node)
      $dom->appendChild(doNode($name, $node, $dom));
    $dom->formatOutput = true;
    return $dom;
  }
 

 
Вот пример вызова:

Код:
 
  $data = array(
    'root' => array(
      '@' => array(
        'attr1' => 'Атрибут 1',
        'attr2' => 'Атрибут 2'
      ),
      '#' => array(
        'elem1' => 'Элемент 1',
        'elem2' => array(
          '#' => array(
            'subelem1' => 'СубЭлемент 1',
            'subelem2' => array(
              '@' => array(
                'subsubattr1' => 'СубСубАтрибут 1',
                'subsubattr2' => 'СубСубАтрибут 1'
              ),
              '#' => array(
                'subsubelem1' => 'СубСубЭлемент 1',
                'subsubelem2' => 'СубСубЭлемент 2'
              )
            ),
            'subelem3' => 'СубЭлемент 3'
          ),
        ),
        'errorlist' => array(
          '@' => array('count' => 3),
          '$' => array(
            '%' => 'error',
            '^' => array(
              array(
                '@' => array('id' => 'Error 1', 'time' => time()),
                '#' => array('message' => 'Message 1')
              ),
              array(
                '@' => array('id' => 'Error 2', 'time' => time()),
                '#' => array('message' => 'Message 2')
              ),
              array(
                '@' => array('id' => 'Error 3', 'time' => time()),
                '#' => array('message' => 'Message 3')
              )
            )
          )
        )
      )
    )
  );
 
  echo(doXml($data)->saveXML());
 

 
Недостаток: можно запутаться в структуре массива данных
 
Пояснения по индексам массива:
1. @ - массив атрибутов XML-элемента
2. # - массив элементов с разными именами
3. $ - массив элементов с одинаковыми именами, далее см. 4 и 5
4. % - название элемента этого списка
5. ^ - собсна сам массив элементов
 
Если кто обнаружит баги - пишите в ПМ.
Спасибо за внимание.

Всего записей: 1 | Зарегистр. 15-06-2007 | Отправлено: 15:29 15-06-2007 | Исправлено: RealAnaphema, 15:30 15-06-2007
andymc

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

Код:
/**
 * Подключает файл $file и возврвщает результат его работы (HTML)
 * Полезно, если вам нужно получить контент инклюда не выводя его сразу
 */
function getIncludeContents($file) {
    ob_start();    
    if (is_file($file)) {
        include($file);
    } else {
        ob_clean();
        return '';
    }    
    $string = ob_get_contents();
    ob_clean();
    return $string;
}
 
/**
 * Создание элементов <option> из массива  
 * @ $array - массив
 * @ $opt   - опции
 *    если $opt = keys именами будут ключи массива
 *    если $opt = base значениями будут basename файла значений  
 * @ $selected_value - выбранное значение
 */
function draw_array_options($array, $opt = '', $selected_value = '') {
    $s = '';
    foreach ($array as $k => $v) {
        $opt == 'keys' ? $value = "value='$k'" : $value = '';
        $opt == 'base' ? $v = basename($v) : true;
        if (!empty($selected_value) && $selected_value == $v) {
            $s .= "<option $value selected>$v</option>";
        } else {
            $s .= "<option $value>$v</option>";
        }            
    }
    return $s;
}
 
/**
 * Размер массива в символах
 */
function array_size($array) {
    $size = 0;
    foreach ($array as $k => $v) {
        if (is_array($v)) {
            $size += array_size($v);
        } else {
            $size += strlen($v);
        }
    }
    return $size;
}
 

Но одно из самых полезнейших решений - это класс для создания таблиц, который я может быть выложе позже

Всего записей: 18 | Зарегистр. 21-09-2006 | Отправлено: 16:27 15-06-2007 | Исправлено: andymc, 16:28 15-06-2007
sr_Fluke



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Народ кто поможет студент с зачетем? Пожалуйста, очень надо....
 
 
 
Просто в PHP вообще не шарю...




тем, кто не умеет читать, мы не помогаем /Cheery/

Всего записей: 9 | Зарегистр. 15-06-2007 | Отправлено: 14:28 24-06-2007 | Исправлено: Cheery, 20:34 25-06-2007
Открыть новую тему     Написать ответ в эту тему

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

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


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

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru