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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
ofj

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Привет всем. Памогите кто может с ткой проблемой:  





В очередь к окулисту, блин /Cheery/

Всего записей: 233 | Зарегистр. 13-10-2008 | Отправлено: 08:42 24-10-2008 | Исправлено: Cheery, 18:59 24-10-2008
ofj

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Памогите, такая проблема: ссылки должны стать актикными в течение определенного времени




Вы терпение модератора испытываете или проблемы с прочтением того, что сказано в шапке? Создайте тему и задайте там свой вопрос.
ps: терпение модератора уже на исходе /Cheery/

Всего записей: 233 | Зарегистр. 13-10-2008 | Отправлено: 12:50 28-10-2008 | Исправлено: Cheery, 18:05 28-10-2008
Alvein

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Использование бит в повседневной жизни (например для хранения данных выбора нескольких значений из небольших списков)
 
Предположим у нас есть 5-ть <input type="checkbox" name="nameinp[ind]" />
где, ind - числовой идентификатор поля.
 
для получения маски выбранных значений можно использовать код:
 

Код:
 
<?php
$nameinp = $_REQUEST['nameinp'];
 
foreach ($nameinp as $key => $val)
    $un = $un ^ pow(2,intval($v));
?>
 

 
дальше это число можно хранить в БД..
 
теперь как считывать.. Тут все просто.. если нам необходимо проверить, входит ли выбранное нами значение в то самое уникальное число, используем в запросе:
 

Код:
 
$sql = "SELECT * FROM `table` WHERE `unfield` & ".pow(2, ind);
 

где ind - это числовой идентификатор нужного нам поля (понятно из списка, что в самом начале поста)
 
если же нам нужно показать пользователю что он выбрал из этих пяти инпутов, то пользуемся кодом:

Код:
 
  foreach($lst as $key => $val ){
    print "<input type='checkbox' ".(( pow(2,$key) & $select )?" checked":"")."/>";
  }
 

где $lst - массив с нашим списком
 
Приятного использования
Лишь напомню то, что не стоит забывать о том, что у нас степень двойки и если значения очень большие, то хранить в полях с соответствующими типами данных, например BIGINT

Всего записей: 55 | Зарегистр. 21-09-2008 | Отправлено: 14:52 21-11-2008
sandyANF



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Требуется на страничку вывести данные, относящиеся к определенному периоду. Для этого пользователю нужно ввести сам этот период с такого-то числа по такое-то. Можно сделать форму с 6-ю полями ввода (день, месяц и год для начала и окончания периода), но на мой взгляд гораздо красивее, если будет одна строчка и пользователь сам укажет тот период, который ему будет необходим.
 
Функция парсит период, введенный в формате [ДД][.ММ][.ГГ[ГГ]] [- [ДД][.ММ][.ГГ[ГГ]]]
Если указана дата только начала, то окончание принимается та же дата.
Если ничего не указано, то за период принимается текущее число.
Если указан только месяц (например так: .10), то период принимается от начала указанного месяца до его окончания. То же и с годом.
 
Возвращается массив, состоящий из двух значений: дата начала и дата окончания периода. На входе функции - строка, введенная пользователем.
 

Код:
//Возвращает дату начала и дату окончания, полученные из строки.
//$_period - это строка типа "ДД.ММ.ГГГГ - ДД.ММ.ГГГГ"
function period_parser($_period) {
    $st = str_replace(" ", "", $_period);
    $st = str_replace(",", ".", $st);
    $ar = explode('-', $st,2);
    list($d1,$m1,$y1) = explode('.', $ar[0],3);
    list($d2,$m2,$y2) = explode('.', $ar[1],3);
    if ($d1==0&&$m1==0&&$y1==0&&$d2==0&&$m2==0&&$y2==0) {$d1 = date("d");$m1 = date("m");$y1 = date("Y");$d2 = date("d");$m2 = date("m");$y2 = date("Y");}
    if ($m1==0&&$m2==0&&$d1==0) {$m1=1;$m2=12;}
    if ($m1==0) {$m1=date("m");}
    if ($m2==0) {$m2=$m1;}
    if ($y1==0) $y1 = date("Y");
    if ($y2==0) $y2 = $y1;
    if ($d1==0&&$d2==0) {$d1=1;$d2=date("d",mktime(0,0,0,$m1+1,0,$y));}
    if ($d1==0) {$d1 = date("d");}
    if ($d2==0) {$d2 = $d1;}
    return array(mktime(0,0,0,$m1,$d1,$y1),mktime(0,0,0,$m2,$d2,$y2));
}

 
У меня к полю ввода периода прикручен java-скрипт с календарем из Yahoo! User Interface Library. Таким образом, можно выбирать период как вручную, так и кнопочкой.

Всего записей: 9 | Зарегистр. 22-09-2005 | Отправлено: 12:26 28-11-2008
sandyANF



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Возвращает ФИО в сокращенном виде. Т.е. на входе, например, "Иванов Петр Сергеевич", а на выходе "Иванов П.С."

Код:
//Возвращает строку вида "Фамилия И.О." в ответ на полные ФИО
function fio($st) {
    $ar='';
    preg_match_all ('/\S+/', $st, $ar);
    $f = $ar[0][0];
    $i = strlen($ar[0][1])>0 ? (substr ($ar[0][1], 0 ,1).'.') : '';
    $o = strlen($ar[0][2])>0 ? (substr ($ar[0][2], 0 ,1).'.') : '';
    return $f.' '.$i.$o;
}
 

Всего записей: 9 | Зарегистр. 22-09-2005 | Отправлено: 15:05 03-12-2008
coolkatala

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ofj Это можно реализовать с помощью javascript.
 
Допустим у тебя есть слово которое потом станет ссылкой <font id=link> Ссылка </font>
ставишь функцию  
 
window.onload = setTimeOut("make_link()",5000); // 5 sec
function make_link(){
 
  document.getElementById("link").innerHTML = "<a href='http://asdfa.com/' > Ссылка </a>";
 
}
 
________________________________________________
http://***.ru/ - искуство HTML, CSS, AJAX, PHP, PS design





Плохо понимаем, что тут не рекламная площадка? третьего предупреждения не будет - будет бан /Cheery/

Всего записей: 8 | Зарегистр. 03-12-2008 | Отправлено: 12:45 04-12-2008 | Исправлено: Cheery, 18:53 04-12-2008
zgonnik

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




Будете флеймить по форуму - схлопочите бан /Cheery/

Всего записей: 16 | Зарегистр. 08-10-2008 | Отправлено: 10:39 05-12-2008 | Исправлено: Cheery, 19:22 05-12-2008
IFKey



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Иногда бывает нужно перевести первый символ в большой или маленький регистр или даже весь текст, но стандартные методы не всегда работают, в решении проблемы Вам помогут две эти функции:

Цитата:
# параметры функции: текст, количество символов начиная с первого
function strtolower_ru($text,$count=false) {
    $alfavitlover = array('ё','й','ц','у','к','е','н','г', 'ш','щ','з','х','ъ','ф','ы','в', 'а','п','р','о','л','д','ж','э', 'я','ч','с','м','и','т','ь','б','ю');
    $alfavitupper = array('Ё','Й','Ц','У','К','Е','Н','Г', 'Ш','Щ','З','Х','Ъ','Ф','Ы','В', 'А','П','Р','О','Л','Д','Ж','Э', 'Я','Ч','С','М','И','Т','Ь','Б','Ю');
   if ($count!=false){
     return str_replace($alfavitupper,$alfavitlover,strtolower($text));
   } else {
     $text[$count] = str_replace($alfavitupper,$alfavitlover,strtolower($text[$count]));
     return $text;
   }
}
 
function strtoupper_ru($text,$count=false) {
    $alfavitlover = array('ё','й','ц','у','к','е','н','г', 'ш','щ','з','х','ъ','ф','ы','в', 'а','п','р','о','л','д','ж','э', 'я','ч','с','м','и','т','ь','б','ю');
    $alfavitupper = array('Ё','Й','Ц','У','К','Е','Н','Г', 'Ш','Щ','З','Х','Ъ','Ф','Ы','В', 'А','П','Р','О','Л','Д','Ж','Э', 'Я','Ч','С','М','И','Т','Ь','Б','Ю');
   if ($count!=false){
     return str_replace($alfavitlover,$alfavitupper,strtoupper($text));  
   } else {
     $text[$count] = str_replace($alfavitlover,$alfavitupper,strtoupper($text[$count]));
     return $text;
   }
}
print strtolower_ru("Привет",0); // Результат: привет
print strtoupper_ru("привет",0);  // Результат: Привет

Всего записей: 331 | Зарегистр. 20-03-2007 | Отправлено: 10:46 10-12-2008 | Исправлено: IFKey, 10:49 10-12-2008
kiloptus

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
IFKey, что мешает вместо ($count!=false) использовать ($count)? На мой взгляд, красивше.
 
Плюс setlocale() в большинстве случаев выручает.
 
P.S. Пролистал мельком тему... предлагаю скинуться уважаемому Cheery на корвалол обсуждение в ПС

Всего записей: 5 | Зарегистр. 16-12-2008 | Отправлено: 18:15 16-12-2008 | Исправлено: kiloptus, 18:32 16-12-2008
mouser

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
как закодировать HTML строку чтоб не было видно в SOURCE коде когда страница уже загрузилась... нужно сделать на сайте с движком DLE




Сначала обратиться к окулисту, затем прочитать шапку темы /Cheery/

Всего записей: 800 | Зарегистр. 10-11-2006 | Отправлено: 12:45 19-12-2008 | Исправлено: Cheery, 16:25 19-12-2008
spbalex777

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Требуется PHP программист для компании in-joy.Вакансии по адресу http://www.***.ru




К окулисту заходили? /Cheery/
Работа для веб-мастера (объявления от РАБОТОДАТЕЛЕЙ)

Всего записей: 2 | Зарегистр. 29-01-2009 | Отправлено: 14:42 29-01-2009 | Исправлено: Cheery, 00:01 30-01-2009
WEBMASTERR

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Создание сайтов под заказ и все для сайта - http://***.net




Будете спамить - забаним оба ника /Cheery/

Всего записей: 2 | Зарегистр. 09-02-2009 | Отправлено: 23:48 09-02-2009 | Исправлено: Cheery, 01:59 10-02-2009
Le Droy

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

Цитата:
# параметры функции: текст, количество символов начиная с первого
function strtolower_ru($text,$count=false) {
    $alfavitlover = array('ё','й','ц','у','к','е','н','г', 'ш','щ','з','х','ъ','ф','ы','в', 'а','п','р','о','л','д','ж','э', 'я','ч','с','м','и','т','ь','б','ю');
    $alfavitupper = array('Ё','Й','Ц','У','К','Е','Н','Г', 'Ш','Щ','З','Х','Ъ','Ф','Ы','В', 'А','П','Р','О','Л','Д','Ж','Э', 'Я','Ч','С','М','И','Т','Ь','Б','Ю');
   if ($count!=false){
     return str_replace($alfavitupper,$alfavitlover,strtolower($text));
   } else {
     $text[$count] = str_replace($alfavitupper,$alfavitlover,strtolower($text[$count]));
     return $text;
   }
}
...
 

 
Поднимаю старое сообщение, но объясните, зачем такой, простите, изврат? Ведь существует функция ucfirst();

Всего записей: 23 | Зарегистр. 24-02-2009 | Отправлено: 19:22 24-02-2009
Cheery



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

Цитата:
Поднимаю старое сообщение, но объясните, зачем такой, простите, изврат? Ведь существует функция ucfirst();

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

Код:
<?php
$userdir='.';
$start=microtime(true);
echo "Method#1: ".dsize($userdir)." Bytes<br>";
$end=microtime(true);
echo "Time:".($end-$start)." seconds<br>";  
$start=microtime(true);
echo "Method#2: ".getsize($userdir)." Bytes<br>";
$end=microtime(true);
echo "Time:".($end-$start)." seconds<br>";
 
function dsize($dir)
{
if (!file_exists($dir)||!is_dir($dir)) return -1;
$size=0;
if (eregi("Windows",$_ENV['OS']))
 {    
    $dirs=dirslist($dir);
    if(is_array($dirs))
     foreach($dirs as $d)
       $size+=dir_size($d);
    return $size;
 }
 else
 {
  $du = @popen('/usr/bin/du -sb ' . escapeshellarg($dir), 'r');  
  $result = fgets($du, 256); pclose($du);  
  list($result,) = explode("\t", $result);  
  return intval($result);  
 }
return 0;  
}
function dirslist($dir)
{
 $dir=str_replace('/','\\',$dir);
 $out=shell_exec("dir /AD /b /s ".escapeshellarg($dir));
 $dirs=split("[\n\r]+",$out);
 if (is_array($dirs)&&trim($dirs[count($dirs)-1])=='') array_pop($dirs);
 $dirs[]=$dir;
 return $dirs;
}
 
function dir_size($dir)
{
$dir=str_replace('/','\\',$dir);
$out=shell_exec("dir ".escapeshellarg($dir));
$out=preg_split('/[\n\r]+/',$out);
if (is_array($out)&&count($out)>2)
{
 preg_match('/([0-9,\.]+)\s+bytes/i',$out[count($out)-3],$bytes);
 if (isset($bytes[1])) return intval(str_replace(array(',','.'),'',$bytes[1]));
}
return 0;  
}
 
function getsize($path){
    if (!is_dir($path))
        return filesize($path);
    $size=0;
    foreach (scandir($path) as $file){
        if ($file=='.' or $file=='..')
            continue;
    $size+=getsize($path.'/'.$file);
  }
  return $size;
}
?>  

Результаты для небольших директорий (101 файл) :

Цитата:
Method#1: 586954 Bytes
Time:0.326451063156 seconds
Method#2: 586954 Bytes
Time:0.0679850578308 seconds

Что и следовало, конечно же (все под виндой).
Но вот для большого количества мелких файлов (6960 файлов, 26 поддиректорий):  

Цитата:
Method#1: 1872467391 Bytes
Time:3.764564991 seconds
Method#2: 1872467391 Bytes
Time:6.11785697937 seconds

почти в два раза быстрее
 
ps: можно, конечно же, еще модернизировать - не читать весь вывод в переменную под виндой, а только последние две строчки. В них размер и есть

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:19 27-02-2009 | Исправлено: Cheery, 00:42 27-02-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Для никсов те же файлы интереснее..

Цитата:
Method#1: 831488 Bytes
Time:0.00887012481689 seconds
Method#2: 586954 Bytes
Time:0.000932931900024 seconds

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

Цитата:
Method#1: 1890906112 Bytes
Time:0.209075212479 seconds
Method#2: 1872467391 Bytes
Time:0.0663659572601 seconds

разница с виндами приличная
ps: с большими файлами первая цифра потом стала, вроде, 0.02 - не знаю что повлияло, но файлы уже удалил.
правда видно, что все равно как считать

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:43 27-02-2009 | Исправлено: Cheery, 22:45 27-02-2009
kloha



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

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




Читаем шапку! + Не дублируем вопросы в разных темах! /Cheery/

Всего записей: 4 | Зарегистр. 05-03-2009 | Отправлено: 11:45 08-03-2009 | Исправлено: Cheery, 18:20 08-03-2009
Blinda_J



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




А читать мы умеем??? /Cheery/

Всего записей: 364 | Зарегистр. 04-03-2007 | Отправлено: 22:45 12-03-2009 | Исправлено: Blinda_J, 16:41 13-03-2009
deman_ru

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ребят помогите советом, в php  я сравнительно недавно, можно сказать еще нуб...мне нужно получить доступ к БД под управлением сервера Firebird 1.5.
для соединения использую следующий код...
Fatal error: Call to undefined function ibase_pconnect() in ...





Но читать то мы умеем? Так прочитайте шапку, блин. /Cheery/

Всего записей: 96 | Зарегистр. 28-04-2008 | Отправлено: 22:26 12-04-2009 | Исправлено: Cheery, 22:27 12-04-2009
bleff_power



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Не хочет вводится string null, хотя другие значения работают нормально. Поле из таблицы не имеет атрибут NOT NULL. Вот исходник:





Да как же вы надоели - неужели поголовно посадили зрение? /Cheery/

Всего записей: 137 | Зарегистр. 05-08-2006 | Отправлено: 16:59 27-04-2009 | Исправлено: Cheery, 19:25 27-04-2009
evil63

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

Цитата:
 
Возвращает ФИО в сокращенном виде. Т.е. на входе, например, "Иванов Петр Сергеевич", а на выходе "Иванов П.С."  
 
Код:
//Возвращает строку вида "Фамилия И.О." в ответ на полные ФИО  
function fio($st) {  
    $ar='';  
    preg_match_all ('/\S+/', $st, $ar);  
    $f = $ar[0][0];  
    $i = strlen($ar[0][1])>0 ? (substr ($ar[0][1], 0 ,1).'.') : '';  
    $o = strlen($ar[0][2])>0 ? (substr ($ar[0][2], 0 ,1).'.') : '';  
    return $f.' '.$i.$o;  
}  

function fio($string)
{
    list($first, $second, $third) = explode(' ', $string);
    return $first.' '.$second[0].'.'.$third[0].'.';
}

Всего записей: 1 | Зарегистр. 08-06-2009 | Отправлено: 13:47 08-06-2009
Открыть новую тему     Написать ответ в эту тему

Страницы: 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