Ru-Board.club
← Вернуться в раздел «Web-программирование»

» PHP: Полезные (интересные и оригинальные) решения

Автор: Jokerjar
Дата сообщения: 09.02.2007 15:57
Может кому-то понадобится. Вывод даты нормальным русским языком:

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


Код:
function cutstr($linkstrip,$strip) {
$linkstrip=stripslashes($linkstrip);
if (strlen($linkstrip) > $strip) $linkstrip="".substr($linkstrip,0,$strip)."...";
return $linkstrip;
}

// Колличество символов
$strip = 25;

// Содержимое
$text = "Здравствуйте. Я делаю журнал посещений для домашнего сайта.";

// Обрабатываем текст
$linkstrip = cutstr($text, $strip);

// Вывод
echo "$linkstrip";
Автор: andymc
Дата сообщения: 26.02.2007 04:40
Подключаем все файлы php из папки $dir
Код: function include_dirfiles($dir){
    if(!file_exists($dir) || !is_dir($dir)) {
        return false;
    }
    $d=opendir($dir);
    $array = array();
    while($file = readdir($d)) {
        $filepath = $dir . "/" . $file;        
        if ($file == "." || $file == ".." || is_dir($filepath) || !strrchr($file, '.php')) continue;
        include_once($filepath);
    }
}
include_dirfiles('lib');
Автор: G_Drey_V
Дата сообщения: 26.02.2007 08:51
У меня есть конструктивное предложение! Я уже давно читаю все, что здесь пишут... предлагаю все-таки обсуждать публикуемый код и вносить в него конструктивные изменения, если необходимо. И предлагать более удобные, по возможности стандартные решения тех или иных проблем... ну это так, к слову...

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

Цитата:

@error_reporting($error_flags);
@ini_set ('error_reporting', $error_flags);
$old_error_handler = set_error_handler("err_handler");

не будет работать - в большинстве случаев вызов этих функций не приводит ни к каким результатам (доказано опытом на различных серверах, как российских, так и зарубежных). Чтобы установить флаги ошибок необходимо использовать .htaccess

antyan, как-то странно режет текст функция, прям по словам. По-моему следует первым шагом определить ближайший пробел к "месту разреза" и уже обрезать по нему.
А вообще, имхо, это не очень хорошо использовать такие функции. Т.к. при это, насколько я понимаю смысл функции, происходит объединение кода с версткой, что очень плохо. Лучше использовать шаблоны и модули для их обработки... так вот в этих модулях уже есть такие функции, причем с флагами. Например, обрезка под пробел, дополнение какими-либо символами (не обязательно "...", но и "далее..." и др.)
Автор: Oleg_de
Дата сообщения: 07.03.2007 13:41

Цитата:
а ещё я сделал вот это http://fan.h17.ru/metric/mod.timeline.php

http://fan.h17.ru/metric/mod.timeline.php?image=text:Любимцу;time:-1982534339;line:line_typeb1_s.gif;begun:d_typeb2.gif;color:000000

что-то не совсем правильно
Автор: Radface
Дата сообщения: 09.03.2007 17:54
Автор: ZaIbalo
Дата сообщения: 19.03.2007 15:17
Видел во многих скриптах: для разбивки урла используют регулярку.

Имхо http://php.net/parse_url


Пример полезного скрипта:



Код:
// Хост поисковой системмы
$host = 'www.google.com';
// Если доступен реферер
if (isset($_SERVER['HTTP_REFERER']))
{
// Разбеваем http://php.net/parse_url
$url = parse_url($_SERVER['HTTP_REFERER']);
// Если хост реферера совподает с $host
if ($url['host'] === $host2)
{
// Разбеваем GET запрос реферера
// http://php.net/parse_str
parse_str($url['query'], $query);
// Выводим результат
echo 'Ты искал <b>'.$query['q'].'</b> нас через '.$host;
}
}
Автор: Cheery
Дата сообщения: 20.03.2007 19:52
ZaIbalo

Цитата:
Видел во многих скриптах: для разбивки урла используют регулярку.

не приучайте к плохим вещам.. через регулярку это делается одной строкой вместе с проверкой реферера..

Цитата:
Разбеваем

да и выучите русский.
Автор: fregat18
Дата сообщения: 21.03.2007 14:05
Кто знает как построить свой сайт

Автор: G_Drey_V
Дата сообщения: 21.03.2007 20:30
элементарно!..
каков вопрос, таков и ответ
Автор: andymc
Дата сообщения: 21.03.2007 20:55
Очень простые и полезные функции

Код:
function GET($name, $num = 0) {
    if (isset($_GET[$name])) {
        return urldecode($_GET[$name]);
    } else {
        return '';
    }
}
function POST($name) {
    if (isset($_POST[$name])) {
        return $_POST[$name];
    } else {
     return '';
    }
}
Автор: Cheery
Дата сообщения: 21.03.2007 20:59
andymc

Цитата:
Очень простые и полезные функции

плиз. не захламляйте топик примитивными вещами. нужны оригинальные и интересные решения.
вы же вытащили откуда то.. учитывая ненужное
Цитата:
$num = 0

и к тому же все пишется еще проще
Автор: nu_nah
Дата сообщения: 22.03.2007 22:21
РЕБЯТ, нужна помощь... помогите мне придумать тему к дипломному проекту....
Автор: danil74
Дата сообщения: 25.03.2007 14:30
Всем привет. Мне понравилась эта ветка и я тоже решил поделиться свом творчеством. Иногда для ускорения разработки скриптов я использую вспомогательные скрипты. Думаю, не я один страдаю этим недостатком. Парочкой таких скриптов я и хочу поделиться.
Помню я какое-то время долго и упорно искал в литературе и инете полное описание суперглобальных массивов($_REQUEST, $_SERVER и т.д.), но так ничего толкового не нашёл. И тут мне пришла в голову идея написать скрипт, который будет выволить значения ключей всех уровней и значений исследуемого массива. В результае получилось вот это(привожу на примере суперглобального массива $_SERVER)

Код:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Изучам массивы</title>
</head>

<body>

<?php

function view($var1, $var2){//Создаю рекурсивную функцию для отображения всех ключей и всех значений массива

foreach ($var1 as $name => $value) {if(gettype($value)=="array") view($var1[$name], "$var2 [$name]");
else echo "<b>\$$var2 [$name]</b> = $value<br>\n";

}
};

///////////////////////////////////////////////////////////////////////////
$var_name="_SERVER";//Сюда нужно вписать имя переменной без знака $ вначале
///////////////////////////////////////////////////////////////////////////
view($$var_name, $var_name);//А теперь запускаю вывод ключей и значений массива

?>
</body>

</html>
Автор: morjov
Дата сообщения: 25.03.2007 14:43
danil74
походу дела ты поиздеваться пришёл...


Цитата:
Помню я какое-то время долго и упорно искал в литературе и инете полное описание суперглобальных массивов($_REQUEST, $_SERVER и т.д.), но так ничего толкового не нашёл. И тут мне пришла в голову идея написать скрипт, который будет выволить значения ключей всех уровней и значений исследуемого массива.

http://php.net и http://php.net/print_r в помощь!
Автор: Cheery
Дата сообщения: 25.03.2007 15:55
danil74

Цитата:
Модератор здесь смешной. Во всей России принято посылать на три буквы а от к окулисту.

посмеешься в другом месте..

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

ps: добавил в шапку.. надоело уже читать извращенные решения.
Автор: G_Drey_V
Дата сообщения: 25.03.2007 20:31
Модератор нормальный, не выпендривайтесь!

danil74, вместо view($var1, $var2) лучше использовать стандартную функцию print_r($var) намного быстрее и эффективнее.
Автор: danil74
Дата сообщения: 26.03.2007 20:10
Привет, Друзья.
Большое Спасибо за радушный приём. Меня радует резонанс, который вызвало моё первое сообщение в этом форуме, что даже такой авторитет как Cheery схватился за шапку. Вы безусловно правы, я действительно был не знаком с print_r(). Теперь мне это пригодится. Я даже рад, что ткнули носом. Но почему-то никто и никак не оценил моё второе творение про регулярные выражения. Сегодня мне это очень пригодилось. Я обнаружил, что regular.php работает намного стабильнее если строки

Цитата:
//Рускодируем символы, которые почему-то приходят в UTF-8(необходим модуль iconv для php)
$expression = iconv('UTF-8', 'windows-1251', $expression);

удалить а взамен в самом начале файла после header вставить

Код: $expression = iconv('UTF-8', 'windows-1251', $expression);
$regul = iconv('UTF-8', 'windows-1251', $regul);
Автор: Cheery
Дата сообщения: 26.03.2007 20:31
danil74
интересно.. вы вообще русский язык понимаете? судя по коду вы только изучаете php.. я же просил не постить подобные вещи..
насчет второго поста с регуляркой.. программерам не нужны такие вещи - достаточно просто написать регулярку в пустой странице с кодом и посмотреть результат.
это раз.. второе - ваш код с ajax неправильно обработает данные, если в регулярке будет & или в тестируемом выражении.
третье.. сейчас никто не рассчитывает на register_globals=on
в четвертых..

Цитата:
//Рускодируем символы, которые почему-то приходят в UTF-8(необходим модуль iconv для php)

справедливо только для IE (для остальных не нужно), так как он не воспринимает иначе в случае ajax
но даже и в этом случае вы

Цитата:
header("Content-Type: text/html; charset=windows-1251");//Это нужно для корректного отображения русской кодеровки.

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

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


ps: и я не люблю паясов..

Автор: morjov
Дата сообщения: 26.03.2007 21:46
Cheery
а может его "того" - в БАН?
Автор: G_Drey_V
Дата сообщения: 26.03.2007 22:32
danil74, убедительная просьба, когда выкладываешь скрипт для чтения делай его удобочитаемым, т.е. с пробелами, отступами и т.д.
Потом, а для чего нужен длинный массив?.. обычно это делается просто при помощи LIMIT START, COUNT в запросе к БД... и замечательно можно обойтись без длинного массива.

register_globals=on - зависит исключительно от желаний пользователя - хочешь включай, хочешь выключай, но в целях безопасности register_globals отключена.

Очень не советую использовать iconv, может я конечно ошибаюсь, но на работа этой функции зависит от того подключены ли кодовые страницы на сервере, если они не подключены, но их включение дело достаточно сложное. Вместо нее лучше прибегать при запросе к БД использовать в htaccess CharsetDisable On и при запросе "SET CHARACTER SET кодировка".

Cheery! danil74 - молодец, пусть выкладывает скрипты, может чего-нибудь реально полезное выложит, а другие будут в процессе учиться на его ошибках. И вместо того, чтобы писать фразы в стиле "можно сделать..." лучше выложи свое гениальное решение - покажи другим, как это надо сделать!
Автор: Cheery
Дата сообщения: 27.03.2007 03:55
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));
Автор: danil74
Дата сообщения: 28.03.2007 04:37
Привет, Cheery!!!
Ещё раз перечитал СОГЛАШЕНИЕ ПО ИСПОЛЬЗОВАНИЮ ФОРУМА «RU-BOARD» и не нашёл каких-либо причин неня предупреждать или банить. Если я лично Вас чем-либо, например
Цитата:
Модератор здесь смешной
обидил, извините, я не со зла.
Хочу расставить точки над i.

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

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

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

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

Мне бы хотелось получить внятный ответ о Вашем отношении ко мне и мнеподобным, чтобы точно знать как поступить дальше. Мне просто лень искать другой форум, но если нужно, то, ИМХО, найду и осяду там.
Автор: ply
Дата сообщения: 08.04.2007 18:01
Вывод номеров страниц

Код:
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>';
}
Автор: G_Drey_V
Дата сообщения: 08.04.2007 20:20
я прям какой-то критикан, но, как я уже говорил, код надо отделять от верстки!!! иначе эта функция теряет всекую смысловую нагрузку, т.к. применима только к данной верстке!
а что за константа PAGES?
никогда так не делай: "$i = $i"! Это ужасно.
вместо $i++ лучше использовать ++$i.

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

- это не самый лучший вариант, лучше это проверять в процессе создания ссылок.
а еще мне интересно мнение народа - как вы относитесь в списке страниц к кнопке "далее"? мне, например, не нравится, когда я не могу выбрать страницу, а должен передвигаться по одной до нужной страницы.. а если мне нужна страница номер 152, то как мне туда попасть с первой?
Автор: PRGMM
Дата сообщения: 22.04.2007 22:24
Огромная просьба подсказать, как можно сделать более компактным , удобным, красивым этот скрипт.
Не судите строго !!!
Автор: PRGMM
Дата сообщения: 23.04.2007 07:01
Прикол какойто кретин убрал мой код, для чего форум придумали ???
А еще боремся за образцовый дом культуры ...
Автор: Jokerjar
Дата сообщения: 23.04.2007 07:41
Сегодня переносил сайт на другой хост и обнаружил, что в 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);
}
}
Автор: PRGMM
Дата сообщения: 23.04.2007 21:35
Cheery
ты издеваешься, я написал то что реально может помочь людям . Один минус, я не профессионал (пока) . Вот была надежда , реально отшлифовать скрипт.
Автор: driverok
Дата сообщения: 27.04.2007 22:57
Такой мини-скриптик для удаления из строки повторяющихся символов (использовал для удаления пробелов)

Код:

$good = str_replace (" ","*",$good); //замена всех пробелов на *

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

//теперь $good содежит не более одного пробела подряд

Страницы: 12345678910

Предыдущая тема: Perl: Полезные решения


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.