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

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

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
hire
Много буков
 
Исправленный класс dBug
 
Использование:

Код:
 
<?php
require_once("dBug.php");
 
$a = "123";
$b = "456";
 
// Просто вывод
dBug::dump($a, $b);
 
// Вывод и прекращение работы скрипта
dBug::stop($a, $b);
 
?>
 

 
Число аргументов также не ограничено.

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 10:43 25-11-2006
andymc

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ГЕНЕРАТОР ПАРОЛЕЙ
$length - длина пароля
$dig    - использовать ли цифры (по умолчанию - да)
$lchar  - использовать ли латинские буквы (по умолчанию - да)
$rchar  - использовать ли русские буквы
$symb   - использовать ли дополнительные символы и какие
 

Код:
 
function generate_password($length,$dig=1,$lchar=1,$rchar=0,$symb=''){
    $dig=array(0,1,2,3,4,5,6,7,8,9);
    $rus=array(
    "а","б","в","г","д","е","ж","з","и","к",
    "л","м","н","о","п","р","с","т","у","ф",
    "х","ц","ч","ш","щ","ь","ы","ъ","э","ю",
    "я","ё","й");
    $for=array(
    "a","b","c","d","e","f","g","h","j","k",
    "l","m","n","o","p","q","r","s","t","u",
    "v","w","x","y","z");
    $main=array();
    $dig?$main=array_merge($main,$dig):true;
    $rchar?$main=array_merge($main,$rus):true;
    $lchar?$main=array_merge($main,$for):true;
    !empty($symb)?$main=array_merge($main,explode(' ',$symb)):true;
    shuffle($main);
    return $pass=substr(implode('',$main),0,$length);
}
 

Оптимизитор кода

Код:
 
function optimize_html($s){
    $s=str_replace("\n"," ",$s);
    $s=str_replace("\r"," ",$s);    
    //$s=str_replace("href=\"http://".$_SERVER['HTTP_HOST']."/","/",$s);
    while(strchr($s,"  ")){
        $s=str_replace("  "," ",$s);
    }
    while(strchr($s,"    ")){
        $s=str_replace("    "," ",$s);
    }    
    while(strchr($s,"  ")){
        $s=str_replace("  "," ",$s);
    }    
    return $s;
}
 

 
Функция записи строки в новый файл

Код:
 
function fw_($file,$str){
    $fo=fopen($file,'w+') or die("Не удалось открыть файл");
    if(fwrite($fo,$str)){
        fclose($fo);
        return true;
    }else{
        fclose($fo);
        return false;
    };
}
 

 
Функция дозаписи строки в существующий файл

Код:
 
function fa_($file,$str){
    $fo=fopen($file,'a+') or die("Не удалось открыть файл");
    if(fwrite($fo,$str)){
        fclose($fo);
        return true;
    }else{
        fclose($fo);
        return false;
    };    
}
 

Всего записей: 18 | Зарегистр. 21-09-2006 | Отправлено: 23:41 09-12-2006 | Исправлено: andymc, 09:08 10-12-2006
LusAvedus

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

Цитата:
LusAvedus
дебют не удался - php.net/is_numeric
 
ps: 2.5 это уже не число?
pps: [0-9]+[0-9] эквивалентно [0-9]{2,}
ppps: (-)? чтобы не дублировать по 10 раз

 
1. is_numeric определяет число или не число. А этот код вырезает число из строки если оно есть.
2. Забыл написать что это все только для целых чисел.
3. За подсказки спасибо,  учу матчасть по регулярным выражениям.

Всего записей: 2 | Зарегистр. 30-10-2006 | Отправлено: 16:03 10-12-2006
andymc

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LusAvedus
Чтобы "вырезать число из строки", попробуй eregi_replace("[0-9]*",$input).
Хотя не советую увлекаться регулярами, они выполняются адско медленно
 
 
Добавлено:
Время выполнения скрипта
(другой вариант)
Есть функции (смысл их не важен)

Код:
 
function startTimer(){
    global $starttime;
    $starttime = microtime();
    return $starttime;
}
function endTimer(){
    global $starttime;
    $pageendtime = microtime();
    $starttime2 = explode(" ",$starttime);
    $endtime = explode(" ",$pageendtime);
    $totaltime = $endtime[0]-$starttime2[0]+$endtime[1]-$starttime2[1];
    $totaltime = round($totaltime, 3);
    return $totaltime;
}
 

Начиннаем контроль времени так:

Код:
 
$start_time=startTimer();
$timer=array();
$timer['start']=endTimer();
 

А далее в самых разных точках кода ставим вызов массива $timer['параметр']=endTimer();

Код:
 
$timer['modules']=endTimer();
...
$timer['content']=endTimer();
 

Результат получаем пропечатав массив $timer

Код:
 
echo "<pre style='font-size:10px'>";
print_r($timer);
echo "</pre>";
 

 
Добавлено:
Папка, в которой находится скрипт
полезно для определение папки, в которую установлена программа, при установке

Код:
 
$root_base=str_replace('/'.basename($_SERVER['PHP_SELF']),'',$_SERVER['PHP_SELF']);
$root_dir=str_replace('/','',$root_base);
// $root_dir - требуемая папка
 

 
Выявление робота, зашедшего на сайт (не оптимально, но очевидно)

Код:
 
$is_robot=(strchr($_SERVER['HTTP_USER_AGENT'],'StackRambler') || stristr($_SERVER['HTTP_USER_AGENT'],'Yandex') || strchr($_SERVER['HTTP_USER_AGENT'],'Googlebot') || strchr($_SERVER['HTTP_USER_AGENT'],'Yahoo! Slurp')|| strchr($_SERVER['HTTP_USER_AGENT'],'Mail.ru'));
 


Динамические стили
Есть файл стилей, где используются PHP коды. Определение переменных соответственно в другом месте

Код:
 
....
a:link,  a{text-decoration: none; color: <?php echo $linkColor ?>;}
....
 

Подключаем файл в заголовок

Код:
 
<html><head><style><?php include($dir_images.'/style2.css');?></style>...
 

Дополнительно можно оптимизировать файл стилей, убрать отбивки и пробелы
 
Добавлено:

Создание фактического текущего УРЛ
$_SERVER['HTTP_HOST']=str_replace("www.","",$_SERVER['HTTP_HOST']);
if ($QUERY_STRING!=''){
   $current_url="http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']."?".$QUERY_STRING;
} else {
   $current_url="http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
}
 

Извлечение сайта из ссылки
function extract_site($url){
    $part=substr($url,8);
    $end=strchr($part,"/");
    $site=str_replace($end,'',$url)."/";    
    $site=str_replace('www.','',$site);    
    return $site;        
}
 

извлекает из строки подстроку от подстроки $s до подстроки $e
function extract_str($str,$s,$e){
    if (!strchr($str,$s)) return $str;
    $start=strpos($str,$s);
    $end=strpos($str,$e,$start);
    return substr($str,$start,$end-$start);
}
 

Значение параметра строки запроса
// $string - строка запроса (предположительно $QUERY_STRING)
// $name - параметр
function get_query_value($string,$name){
    if (strchr($string,"$name=")){
        $string=substr(strchr($string,"$name="),1+strlen($name));
        if (strchr($string,'&')){
            $string=str_replace(strchr($string,'&'),'',$string);    
        }
        return $string;        
    } else {
        return false;        
    }
}

Всего записей: 18 | Зарегистр. 21-09-2006 | Отправлено: 19:45 10-12-2006 | Исправлено: andymc, 21:38 10-12-2006
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
andymc
давайте будем писать то, что понимаем?

Цитата:
if ($QUERY_STRING!=''){

не будет установлена при register_globals=off.. при этом в куске используется $_SERVER

Цитата:
Извлечение сайта из ссылки

www.php.net/parse_url

Цитата:
Значение параметра строки запроса

www.php.net/parse_url  + www.php.net/parse_str
 
 
ps: мое высказывание не предполагает его обсуждение в этом топике.

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 07:07 12-12-2006
chs52ncm

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Функция скачивающая файл по HTTP на PHP. Срочно. Помогите кто может.
 
 
 
 





У тебя действительно серого вещества не хватает? Прочитай шапку темы. Тут не задают вопросы /Cheery/

Всего записей: 4 | Зарегистр. 01-09-2006 | Отправлено: 14:45 15-12-2006 | Исправлено: Cheery, 15:22 15-12-2006
andymc

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Разборщик стилей (я так назвал)
Утром сегодня написал код, который разбирает текст стилей либо из файла .css либо встроенных. Надо указать только файл.
Стили помещаются в массив $styles в виде
$a['имя стиля']['параметр']=значение

Код:
 
//$s=file_get_contents('style.css');
$s=file_get_contents("index.htm");
$styles=array();
if (strchr($s,'<style>')){
    $start=strpos($s,'<style>')+7;
    $end=strpos($s,'</style>');
    $s=substr($s,$start,$end-$start);
}
$start=0;
if (substr_count($s,'{')>0&&substr_count($s,'}')>0){    
    while (strchr($s,'{')){
         
        $st0=strpos($s,'{');
        $st1=strpos($s,'}');
        $style_name=trim(substr($s,$start,$st0));
        $style_body=trim(substr($s,$st0+1,$st1-$st0-1));
        $styles[$style_name]=array();        
         
        while (strchr($style_body,':')){            
            $dv=strpos($style_body,':');
            $tz=strpos($style_body,';');
            $name=trim(substr($style_body,0,$dv));
            $value=trim(substr($style_body,$dv+1,$tz-$dv-1));
            $style_body=substr($style_body,$tz+1);
            $styles[$style_name][$name]=$value;
        }
         
        $s=substr($s,$st1+1);
    }
}
print_br($styles);
 

// хочу ещё написать разборщик html  
// разбор стилей мне нужен был, чтобы иметь к ним доступ из PHP (дизайн шаблона)

Всего записей: 18 | Зарегистр. 21-09-2006 | Отправлено: 13:25 18-12-2006 | Исправлено: andymc, 13:26 18-12-2006
drew2006

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
перевод текста с русского на английский через translate.ru
используется для получения ЧПУ из русского названия страницы.
 
function translate ($src) {
 
    $ch = curl_init();
 
    curl_setopt($ch, CURLOPT_URL, 'http://www.translate.ru/text.asp');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, 'status=translate&direction=re&transliterate=ON&source='.urlencode($src));
 
    $html = curl_exec($ch);
    curl_close($ch);
 
    preg_match('|<span id="r_text" name="r_text">(.*?)</span>|s', $html, $rst);
    $rst = strtolower(preg_replace('|[\s]+|', '_', trim($rst[1])));
 
    return $rst;
 
}

Всего записей: 12 | Зарегистр. 28-01-2006 | Отправлено: 21:38 28-12-2006 | Исправлено: drew2006, 21:39 28-12-2006
mctaddy



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




Я могу только предложить банан за несоблюдение правил. Проблемы со зрением? /Cheery/
ps: PHP распространяется бесплатно

Всего записей: 28 | Зарегистр. 20-04-2006 | Отправлено: 00:03 18-01-2007 | Исправлено: Cheery, 00:04 18-01-2007
Jokerjar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Существует ли функция, которая возвращает часть строки после символа "?" в строке адреса (т.е. всю строку параметров)?
 
Извините, не туда задал




Не извиню.. шапку читать надо ! /Cheery/

Всего записей: 591 | Зарегистр. 22-03-2006 | Отправлено: 19:51 21-01-2007 | Исправлено: Cheery, 21:22 21-01-2007
G_Drey_V

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
$GLOBALS['HTTP_RAW_GET_DATA'] - должно заработать по аналогии с $GLOBALS['HTTP_RAW_POST_DATA'], хотя насколько я помню, документации по этим переменным я ни разу нигде не встречал что-то наподобие недокументированных констант... хотя на самом деле, по-моему, какой-то из header-переменных это содержит.. попробуй заодно посмотреть print_r($_SERVER)

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



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
G_Drey_V
бр.. первым делом надо смотреть phpinfo();
 
$_SERVER["QUERY_STRING"]
 
 
 
ps: чувствую, что пора банить тех, кто постит тут не по делу

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:24 21-01-2007
Jokerjar



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

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

Всего записей: 591 | Зарегистр. 22-03-2006 | Отправлено: 16:57 09-02-2007
antyan



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

Код:
 
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";
 





давайте, может быть, что то более серьезное? а не то, что сами придумываем только изучая php /Cheery/

Всего записей: 24 | Зарегистр. 08-09-2006 | Отправлено: 03:55 26-02-2007 | Исправлено: Cheery, 04:06 26-02-2007
andymc

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подключаем все файлы 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');

Оптимизация html
Код:
function callback ($buffer) {    
    $patterns = array (
    "/<!--.{0,}-->/", "/<!--.{0,}-->/", "/ {2,}/",  
    "/\t{1,}/", "/\r\n/", "/^\s{1,}/m");
    $replaces = array ( "", "", " ", " ", "\n", "");    
    return( preg_replace ($patterns, $replaces, $buffer ) );
}
ob_start("callback");
а ещё я сделал вот это http://fan.h17.ru/metric/mod.timeline.php

Всего записей: 18 | Зарегистр. 21-09-2006 | Отправлено: 05:40 26-02-2007
G_Drey_V

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
У меня есть конструктивное предложение! Я уже давно читаю все, что здесь пишут... предлагаю все-таки обсуждать публикуемый код и вносить в него конструктивные изменения, если необходимо. И предлагать более удобные, по возможности стандартные решения тех или иных проблем... ну это так, к слову...
 
SafeWay, я что-то не совсем понял для чего нужна эта функция??? какие она действия осуществляет??? проще просто установить необходимые флаги отображения ошибок.
потом вот это:

Цитата:
 
@error_reporting($error_flags);
@ini_set ('error_reporting', $error_flags);
$old_error_handler = set_error_handler("err_handler");  
 

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

Всего записей: 158 | Зарегистр. 20-12-2003 | Отправлено: 09:51 26-02-2007
Oleg_de



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

Цитата:
а ещё я сделал вот это 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
 
что-то не совсем правильно

----------
Германия глазами переселенцев и мигрантов ...

Всего записей: 336 | Зарегистр. 03-09-2001 | Отправлено: 14:41 07-03-2007
Radface

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





читаем внимательно правила форума.. /Cheery/

Всего записей: 1 | Зарегистр. 09-03-2007 | Отправлено: 18:54 09-03-2007 | Исправлено: Cheery, 20:25 10-03-2007
ZaIbalo

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

Имхо 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;
    }
}
 





cоветую сменить ник - этот будет заблокирован /Cheery/

Всего записей: 3 | Зарегистр. 19-03-2007 | Отправлено: 15:17 19-03-2007 | Исправлено: Cheery, 18:38 19-03-2007
Cheery



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

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

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

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

да и выучите русский.


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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 19:52 20-03-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