Стандартные решения (велосипеды)

Статус
В этой теме нельзя размещать новые ответы.
  • Заблокирован
  • #21
получение user агента загрузившего страницу + простенький фильтр от назойливого спам бота
А вот велосипедик, который рандомно подставляет user агента(спёр с Для просмотра ссылки Войди или Зарегистрируйся)
PHP:
<?php
    function chooseBrowser($type = NULL)
    {
        $kht = '(KHTML, like Gecko)';
        $awk = 'AppleWebKit/';
        $moz = 'Mozilla';
        $win = 'Windows';
        $chr = 'Chrome';
        $saf = 'Safari';
        $ubu = 'Ubuntu';
        $lin = 'Linux';
        $mac = 'Macintosh';
        $ium = 'Chromium';
        $ope = 'Opera';
        $pre = 'Presto';
        $com = 'compatible';
        $mcp = 'Media Center PC';
        $ncl = '.NET CLR';
 
        $browsers = array(
            'chrome' => array(
                $moz.'/5.0 ('.$win.' NT 5.1) '.$awk.'535.2 '.$kht.' '.$chr.'/15.0.872.0 '.$saf.'/535.2',
                $moz.'/5.0 ('.$win.' NT 5.1) '.$awk.'535.2 '.$kht.' '.$chr.'/15.0.864.0 '.$saf.'/535.2',
                $moz.'/5.0 ('.$win.' NT 6.1) '.$awk.'535.2 '.$kht.' '.$chr.'/15.0.861.0 '.$saf.'/535.2',
                $moz.'/5.0 ('.$mac.'; Intel Mac OS X 10_7_0) '.$awk.'535.2 '.$kht.' '.$chr.'/15.0.861.0 '.$saf.'/535.2',
                $moz.'/5.0 ('.$mac.'; Intel Mac OS X 10_6_8) '.$awk.'535.2 '.$kht.' '.$chr.'/15.0.861.0 '.$saf.'/535.2',
                $moz.'/5.0 ('.$win.' NT 5.1) '.$awk.'535.2 '.$kht.' '.$chr.'/15.0.860.0 '.$saf.'/535.2',
                $moz.'/5.0 (X11; '.$lin.' x86_64) '.$awk.'535.1 '.$kht.' '.$chr.'/14.0.824.0 '.$saf.'/535.1',
                $moz.'/5.0 ('.$win.' NT 6.1) '.$awk.'535.1 '.$kht.' '.$chr.'/14.0.815.10913 '.$saf.'/535.1',
                $moz.'/5.0 ('.$win.' NT 5.1) '.$awk.'535.1 '.$kht.' '.$chr.'/14.0.815.0 '.$saf.'/535.1',
                $moz.'/5.0 ('.$win.' NT 6.1; WOW64) '.$awk.'535.1 '.$kht.' '.$chr.'/14.0.814.0 '.$saf.'/535.1',
                $moz.'/5.0 ('.$win.' NT 6.1; WOW64) '.$awk.'535.1 '.$kht.' '.$chr.'/14.0.813.0 '.$saf.'/535.1',
                $moz.'/5.0 ('.$win.' NT 5.2) '.$awk.'535.1 '.$kht.' '.$chr.'/14.0.813.0 '.$saf.'/535.1',
                $moz.'/5.0 ('.$win.' NT 5.1) '.$awk.'535.1 '.$kht.' '.$chr.'/14.0.813.0 '.$saf.'/535.1',
                $moz.'/5.0 ('.$mac.'; Intel Mac OS X 10_6_7) '.$awk.'535.1 '.$kht.' '.$chr.'/14.0.813.0 '.$saf.'/535.1',
                $moz.'/5.0 ('.$win.' NT 6.1) '.$awk.'535.1 '.$kht.' '.$chr.'/14.0.812.0 '.$saf.'/535.1',
                $moz.'/5.0 ('.$win.' NT 6.1; WOW64) '.$awk.'535.1 '.$kht.' '.$chr.'/14.0.811.0 '.$saf.'/535.1',
                $moz.'/5.0 ('.$win.' NT 6.1; WOW64) '.$awk.'535.1 '.$kht.' '.$chr.'/14.0.810.0 '.$saf.'/535.1',
                $moz.'/5.0 ('.$win.' NT 5.1) '.$awk.'535.1 '.$kht.' '.$chr.'/14.0.810.0 '.$saf.'/535.1',
                $moz.'/5.0 ('.$win.' NT 5.1) '.$awk.'535.1 '.$kht.' '.$chr.'/14.0.809.0 '.$saf.'/535.1',
                $moz.'/5.0 (X11; '.$lin.' x86_64) '.$awk.'535.1 '.$kht.' '.$chr.'/14.0.803.0 '.$saf.'/535.1',
                $moz.'/5.0 (X11; '.$lin.' i686) '.$awk.'535.1 '.$kht.' '.$chr.'/14.0.803.0 '.$saf.'/535.1',
                $moz.'/5.0 ('.$mac.'; Intel Mac OS X 10_7_0) '.$awk.'535.1 '.$kht.' '.$chr.'/14.0.803.0 '.$saf.'/535.1',
                $moz.'/5.0 ('.$mac.'; Intel Mac OS X 10_6_7) '.$awk.'535.1 '.$kht.' '.$chr.'/14.0.803.0 '.$saf.'/535.1',
                $moz.'/5.0 ('.$mac.'; Intel Mac OS X 10_5_8) '.$awk.'535.1 '.$kht.' '.$chr.'/14.0.803.0 '.$saf.'/535.1',
                $moz.'/5.0 ('.$win.' NT 6.1) '.$awk.'535.1 '.$kht.' '.$chr.'/14.0.801.0 '.$saf.'/535.1',
                $moz.'/5.0 ('.$mac.'; Intel Mac OS X 10_5_8) '.$awk.'535.1 '.$kht.' '.$chr.'/14.0.801.0 '.$saf.'/535.1',
                $moz.'/5.0 ('.$win.' NT 5.2) '.$awk.'535.1 '.$kht.' '.$chr.'/14.0.794.0 '.$saf.'/535.1',
                $moz.'/5.0 ('.$mac.'; Intel Mac OS X 10_7_0) '.$awk.'535.1 '.$kht.' '.$chr.'/14.0.794.0 '.$saf.'/535.1',
                $moz.'/5.0 ('.$win.' NT 6.0) '.$awk.'535.1 '.$kht.' '.$chr.'/14.0.792.0 '.$saf.'/535.1',
                $moz.'/5.0 ('.$win.' NT 5.2) '.$awk.'535.1 '.$kht.' '.$chr.'/14.0.792.0 '.$saf.'/535.1',
                $moz.'/5.0 ('.$win.' NT 5.1) '.$awk.'535.1 '.$kht.' '.$chr.'/14.0.792.0 '.$saf.'/535.1',
                $moz.'/5.0 ('.$mac.'; PPC Mac OS X 10_6_7) '.$awk.'535.1 '.$kht.' '.$chr.'/14.0.790.0 '.$saf.'/535.1',
                $moz.'/5.0 ('.$mac.'; Intel Mac OS X 10_6_7) '.$awk.'535.1 '.$kht.' '.$chr.'/14.0.790.0 '.$saf.'/535.1',
                $moz.'/5.0 (X11; CrOS i686 13.587.48) '.$awk.'535.1 '.$kht.' '.$chr.'/13.0.782.43 '.$saf.'/535.1',
                $moz.'/5.0 Slackware/13.37 (X11; U; '.$lin.' x86_64; en-US) '.$awk.'535.1 '.$kht.' '.$chr.'/13.0.782.41',
                $moz.'/5.0 Arch'.$lin.' (X11; '.$lin.' x86_64) '.$awk.'535.1 '.$kht.' '.$chr.'/13.0.782.41 '.$saf.'/535.1',
                $moz.'/5.0 (X11; '.$lin.' x86_64) '.$awk.'535.1 '.$kht.' '.$chr.'/13.0.782.41 '.$saf.'/535.1',
                $moz.'/5.0 (X11; '.$lin.' i686) '.$awk.'535.1 '.$kht.' '.$chr.'/13.0.782.41 '.$saf.'/535.1',
                $moz.'/5.0 ('.$win.' NT 6.0; WOW64) '.$awk.'535.1 '.$kht.' '.$chr.'/13.0.782.41 '.$saf.'/535.1',
                $moz.'/5.0 ('.$win.' NT 6.0) '.$awk.'535.1 '.$kht.' '.$chr.'/13.0.782.41 '.$saf.'/535.1',
                $moz.'/5.0 ('.$win.' NT 5.2; WOW64) '.$awk.'535.1 '.$kht.' '.$chr.'/13.0.782.41 '.$saf.'/535.1',
                $moz.'/5.0 ('.$win.' NT 5.1) '.$awk.'535.1 '.$kht.' '.$chr.'/13.0.782.41 '.$saf.'/535.1',
                $moz.'/5.0 ('.$mac.'; Intel Mac OS X 10_6_7) '.$awk.'535.1 '.$kht.' '.$chr.'/13.0.782.41 '.$saf.'/535.1',
                $moz.'/5.0 ('.$mac.'; Intel Mac OS X 10_6_3) '.$awk.'535.1 '.$kht.' '.$chr.'/13.0.782.41 '.$saf.'/535.1',
                $moz.'/5.0 ('.$mac.'; Intel Mac OS X 10_6_2) '.$awk.'535.1 '.$kht.' '.$chr.'/13.0.782.41 '.$saf.'/535.1'
            ),
            'opera' => array(
                $ope.'/9.80 ('.$win.' NT 6.1; U; es-ES) '.$pre.'/2.9.181 Version/12.00',
                $ope.'/9.80 ('.$win.' NT 5.1; U; en) '.$pre.'/2.9.168 Version/11.51',
                $ope.'/9.80 (X11; '.$lin.' x86_64; U; fr) '.$pre.'/2.9.168 Version/11.50',
                $ope.'/9.80 (X11; '.$lin.' i686; U; hu) '.$pre.'/2.9.168 Version/11.50',
                $ope.'/9.80 (X11; '.$lin.' i686; U; ru) '.$pre.'/2.8.131 Version/11.11',
                $ope.'/9.70 ('.$lin.' ppc64 ; U; en) '.$pre.'/2.2.1',
                $ope.'/9.70 ('.$lin.' i686 ; U; zh-cn) '.$pre.'/2.2.0',
                $ope.'/9.70 ('.$lin.' i686 ; U; en-us) '.$pre.'/2.2.0',
                $ope.'/9.70 ('.$lin.' i686 ; U; en) '.$pre.'/2.2.1',
                $ope.'/9.70 ('.$lin.' i686 ; U; en) '.$pre.'/2.2.0',
                $ope.'/9.70 ('.$lin.' i686 ; U; ; en) '.$pre.'/2.2.1',
                $ope.'/9.70 ('.$lin.' i686 ; U; ; en) '.$pre.'/2.2.1',
                $ope.'/9.64 ('.$win.' NT 5.1; U; en) '.$pre.'/2.1.1',
                $ope.'/9.64 (X11; '.$lin.' x86_64; U; pl) '.$pre.'/2.1.1',
                $ope.'/9.64 (X11; '.$lin.' x86_64; U; hr) '.$pre.'/2.1.1',
                $ope.'/9.64 (X11; '.$lin.' x86_64; U; en-GB) '.$pre.'/2.1.1',
                $ope.'/9.64 (X11; '.$lin.' x86_64; U; en) '.$pre.'/2.1.1',
                $ope.'/9.64 (X11; '.$lin.' x86_64; U; de) '.$pre.'/2.1.1',
                $ope.'/9.64 (X11; '.$lin.' x86_64; U; cs) '.$pre.'/2.1.1',
                $ope.'/9.64 (X11; '.$lin.' i686; U; tr) '.$pre.'/2.1.1',
                $ope.'/9.64 (X11; '.$lin.' i686; U; sv) '.$pre.'/2.1.1',
                $ope.'/9.64 (X11; '.$lin.' i686; U; pl) '.$pre.'/2.1.1',
                $ope.'/9.62 ('.$win.' NT 6.1; U; en) '.$pre.'/2.1.1',
                $ope.'/9.62 ('.$win.' NT 6.1; U; de) '.$pre.'/2.1.1',
                $ope.'/9.62 ('.$win.' NT 6.0; U; pl) '.$pre.'/2.1.1',
                $ope.'/9.62 ('.$win.' NT 6.0; U; nb) '.$pre.'/2.1.1',
                $ope.'/9.62 ('.$win.' NT 6.0; U; en-GB) '.$pre.'/2.1.1'
            ),
            'msie' => array(
                $moz.'/5.0 ('.$win.'; U; MSIE 9.0; Windows NT 9.0; en-US))',
                $moz.'/5.0 ('.$win.'; U; MSIE 9.0; '.$win.' NT 9.0; en-US)',
                $moz.'/5.0 ('.$com.'; MSIE 9.0; '.$win.' NT 7.1; Trident/5.0)',
                $moz.'/5.0 ('.$com.'; MSIE 9.0; '.$win.' NT 6.1; WOW64; Trident/5.0; chromeframe/12.0.742.112)',
                $moz.'/5.0 ('.$com.'; MSIE 8.0; '.$win.' NT 5.2; Trident/4.0; '.$mcp.' 4.0; SLCC1; '.$ncl.' 3.0.04320)',
                $moz.'/5.0 ('.$com.'; MSIE 8.0; '.$win.' NT 5.1; Trident/4.0; '.$ncl.' 1.1.4322; '.$ncl.' 2.0.50727)',
                $moz.'/5.0 ('.$win.'; U; MSIE 6.0; '.$win.' NT 5.1; SV1; '.$ncl.' 2.0.50727)',
                $moz.'/5.0 ('.$com.'; MSIE 6.0; '.$win.' NT 5.1; SV1; '.$ncl.' 2.0.50727)',
                $moz.'/5.0 ('.$com.'; MSIE 6.0; '.$win.' NT 5.1; SV1; '.$ncl.' 1.1.4325)',
                $moz.'/5.0 ('.$com.'; MSIE 6.0; '.$win.' NT 5.1)',
                $moz.'/45.0 ('.$com.'; MSIE 6.0; '.$win.' NT 5.1)',
                $moz.'/4.08 ('.$com.'; MSIE 6.0; '.$win.' NT 5.1)',
                $moz.'/4.01 ('.$com.'; MSIE 6.0; '.$win.' NT 5.1)',
                $moz.'/4.0 (X11; MSIE 6.0; i686; '.$ncl.' 1.1.4322; '.$ncl.' 2.0.50727; FDM)',
                $moz.'/4.0 ('.$win.'; MSIE 6.0; '.$win.' NT 6.0)',
                $moz.'/4.0 ('.$win.'; MSIE 6.0; '.$win.' NT 5.2)',
                $moz.'/4.0 ('.$win.'; MSIE 6.0; '.$win.' NT 5.0)',
                $moz.'/4.0 ('.$win.'; MSIE 6.0; '.$win.' NT 5.1; SV1; '.$ncl.' 2.0.50727)'
            ),
            'firefox' => array(
                $moz.'/5.0 (X11; U; '.$lin.' i586; de; rv:5.0) Gecko/20100101 Firefox/5.0',
                $moz.'/5.0 (X11; U; '.$lin.' amd64; rv:5.0) Gecko/20100101 Firefox/5.0 (Debian)',
                $moz.'/5.0 (X11; U; '.$lin.' amd64; en-US; rv:5.0) Gecko/20110619 Firefox/5.0',
                $moz.'/5.0 (X11; '.$lin.') Gecko Firefox/5.0',
                $moz.'/5.0 (X11; '.$lin.' x86_64; rv:5.0) Gecko/20100101 Firefox/5.0 FirePHP/0.5',
                $moz.'/5.0 (X11; '.$lin.' x86_64; rv:5.0) Gecko/20100101 Firefox/5.0 Firefox/5.0',
                $moz.'/5.0 (X11; '.$lin.' x86_64) Gecko Firefox/5.0',
                $moz.'/5.0 (X11; '.$lin.' ppc; rv:5.0) Gecko/20100101 Firefox/5.0',
                $moz.'/5.0 (X11; '.$lin.' AMD64) Gecko Firefox/5.0',
                $moz.'/5.0 (X11; FreeBSD amd64; rv:5.0) Gecko/20100101 Firefox/5.0',
                $moz.'/5.0 ('.$win.' NT 6.2; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0',
                $moz.'/5.0 ('.$win.' NT 6.1; Win64; x64; rv:5.0) Gecko/20110619 Firefox/5.0',
                $moz.'/5.0 ('.$win.' NT 6.1; Win64; x64; rv:5.0) Gecko/20100101 Firefox/5.0',
                $moz.'/5.0 ('.$win.' NT 6.1.1; rv:5.0) Gecko/20100101 Firefox/5.0',
                $moz.'/5.0 ('.$win.' NT 5.2; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0',
                $moz.'/5.0 ('.$win.' NT 5.1; U; rv:5.0) Gecko/20100101 Firefox/5.0',
                $moz.'/5.0 ('.$win.' NT 5.1; rv:2.0.1) Gecko/20100101 Firefox/5.0',
                $moz.'/5.0 ('.$win.' NT 5.0; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0',
                $moz.'/5.0 ('.$win.' NT 5.0; rv:5.0) Gecko/20100101 Firefox/5.0',
                $moz.'/5.0 (U; '.$win.' NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0'
            )
        );
        if (isset($type))
        {
            $browsers = $browsers[$type];
            return $browsers[rand(0, count($browsers)-1)];
        }
        else
        {
            $allbrowsers = array();
            foreach ($browsers as $browser_type){$allbrowsers = array_merge($allbrowsers, $browser_type);}
            return $allbrowsers[rand(0, count($allbrowsers)-1)];
        }
    }
?>
А вообще Для просмотра ссылки Войди или Зарегистрируйся вам просто громадная библиотека велосипедов. Единственный 'минус' на английском.
 
Полезный баян, сверхбыстрое удаление дубликатов строк столбца data (можно указать несколько столбцов) из таблицы Names
Код:
ALTER IGNORE TABLE Names ADD UNIQUE INDEX(data);
 
Функция удаления лишнего HTML который сгенерирован WORDом при копипасте (или експорт HTML)

PHP:
function clearhtmlword($text)
{ // BEGIN function clearhtmlword
    $text = preg_replace
    (
    array(
    // Remove invisible content
    '@<head[^>]*?>.*?</head>@siu',
    '@<style[^>]*?>.*?</style>@siu',
    '@<script[^>]*?.*?</script>@siu',
    '@<object[^>]*?.*?</object>@siu',
    '@<embed[^>]*?.*?</embed>@siu',
    '@<applet[^>]*?.*?</applet>@siu',
    '@<noframes[^>]*?.*?</noframes>@siu',
    '@<noscript[^>]*?.*?</noscript>@siu',
    '@<noembed[^>]*?.*?</noembed>@siu',
 
    // Add line breaks before & after blocks
    '@<((br)|(hr))@iu',
    '@</?((address)|(blockquote)|(center)|(del))@iu',
    '@</?((div)|(h[1-9])|(ins)|(isindex)|(p)|(pre))@iu',
    '@</?((dir)|(dl)|(dt)|(dd)|(li)|(menu)|(ol)|(ul))@iu',
    '@</?((table)|(th)|(td)|(caption))@iu',
    '@</?((form)|(button)|(fieldset)|(legend)|(input))@iu',
    '@</?((label)|(select)|(optgroup)|(option)|(textarea))@iu',
    '@</?((frameset)|(frame)|(iframe))@iu',),
 
    array(
    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
    "\n\$0", "\n\$0", "\n\$0", "\n\$0", "\n\$0", "\n\$0",
    "\n\$0", "\n\$0",),$text
    )
 
$text = preg_replace('/<!--\[if gte mso 9\]>.*?<!\[endif\]-->/is','',$text);
$text = preg_replace('/<!--\[if gte mso 8\]>.*?<!\[endif\]-->/is','',$text);
$text = preg_replace('/<!--\[if gte mso 10\]>.*?<!\[endif\]-->/is','',$text);
$text = preg_replace('/<!--\[if !mso\]>.*?<!\[endif\]-->/is','',$text);
 
 
  $text = ereg_replace("<(/)?(font|span|del|ins)[^>]*>","",$text); 
  $text = ereg_replace("<([^>]*)(lang|style|size|face)=(\"[^\"]*\"|'[^']*'|[^>]+)([^>]*)\s>","<\\1>",$text);
  $text = ereg_replace("<([^>]*)(lang|style|size|face)=(\"[^\"]*\"|'[^']*'|[^>]+)([^>]*)>","<\\1>",$text);
  $text = ereg_replace(" class=\"MsoNormal\" ","",$text);
  $text = preg_replace("'(<\w+)\s{1,}((?:/)?>)'", "$1$2", $text);
  $text = ereg_replace("<([^>]*)(/strong)([^>]*)><([^>]*)(strong)([^>]*)>","\\1",$text);
  $text = preg_replace('/<!--\[if gte mso \d{1,2}+.*\[endif\]-->/si','',$text);   
 
 
 
  return $text;
} // END function clearhtmlword
 
  • Заблокирован
  • #24
Скрипт который сделает вотермарки на всех изображениях в указанной вами папке, с указанным ввиде ссылке на изображения вотермарком, и экспортирует все обработанные вотермарки в указанную вами папку (можно исходную, тогда изображения с вотермарками заменят исходные).
PHP:
<?php
 
if ($papkaLogs = opendir("img")) // вместо img пишим путь к вашей папке исходников изображений
{
while ($fileLogs = readdir($papkaLogs))
{
if ($fileLogs != "." && $fileLogs != ".." )
{
 
$watermark = "animechild.png"; // путь к изображению, которое будет нашим вотермарком
$watermarkname = "animechild.png"; // путь к изображению, которое будет нашим вотермарком
$placement = "bottom=2,right=1"; // указываем геометрию размещения и отспуты. bottom=2,right=1 - это означает что вотермарк будет находится "внизу с отсупом 2 пикселя, в правом краю с отступом 1 пиксель.
$original_name = "img2/".$fileLogs; // вместо img пишим путь к вашей папке куда будем экспортировать изображения с вотермарком, можно ипользовать туже что и исходную, тогда все изображения с вотермарками просто заменят исходные изображения
$original = "img/".$fileLogs; // вместо img пишим путь к вашей папке исходников изображений
$info_o = @getImageSize($original);
 
if( ($info_o[0] >= 200) && ($info_o[1] >= 200) ) //лимит по высоте и ширине, по которому скрипт определит необходимость наложения вотермарка на данное изображение
{
$info_w = @getImageSize($watermark);
}
 
list ($vertical, $horizontal) = explode(',', $placement);
list($vertical, $sy) = explode('=', trim($vertical));
list($horizontal, $sx) = explode('=', trim($horizontal));
 
$original = @imageCreateFromString(file_get_contents($original));
$watermark = @imageCreateFromString(file_get_contents($watermark));
 
 
if( ($info_o[0] >= 200) && ($info_o[1] >= 200) ) //лимит по высоте и ширине, по которому скрипт определит необходимость наложения вотермарка на данное изображение
{
$info_w = @getImageSize($watermarkname );
}
 
$out2 = @imageCreateTrueColor($info_o[0],$info_o[1]);
@imageCopy($out2, $original, 0, 0, 0, 0, $info_o[0], $info_o[1]);
 
switch (trim($vertical))
{
case 'bottom':
$y = $info_o[1] - $info_w[1] - (int)$sy;
break;
 
case 'middle':
$y = ceil($info_o[1]/2) - ceil($info_w[1]/2) + (int)$sy;
break;
default:
$y = (int)$sy;
break;
}
 
switch (trim($horizontal))
{
case 'right':
$x = $info_o[0] - $info_w[0] - (int)$sx;
break;
case 'center':
$x = ceil($info_o[0]/2) - ceil($info_w[0]/2) + (int)$sx;
break;
default:
$x = (int)$sx;
break;
}
//echo $info_w[0]." ".$info_w[1]." ".$x." ".$y;die;
if( ($info_o[0] >= 200) && ($info_o[1] >= 200) ) //лимит по высоте и ширине, по которому скрипт определит необходимость наложения вотермарка на данное изображение
{
@imageCopy($out2, $watermark, $x, $y, 0, 0, $info_w[0], $info_w[1]);
}
 
switch ($info_o[2])
{
case 1:
imagegif($out2,$original_name);
break;
case 2:
imagejpeg($out2,$original_name);
break;
case 3:
imagepng($out2,$original_name);
break;
}
 
@imageDestroy($out2);
@imageDestroy($original);
@imageDestroy($watermark);
 
 
}
}
}
 
 
 
 
?>
 
Присоединюсь к теме "великов"...
Однажды мне понадобилось на некоторых сайта привести HTML в нормальный вид для xHTML.
Почесав свою "репую"... программеры они ведь лентяи :)
Написал вот такую штуку для коррекции HTML.
тоесть там где <br> делаем <br />.
Там где <input type="text"> делаем правильный тег <input type="text" />
Ну и так далее

PHP:
  function xhtml_correction($text)
  {
      if( !empty($text) ) {
          $_ = preg_replace("#\s*(cellspacing|cellpadding|border|width|height|colspan|rowspan)\s*=\s*(\d+)\s*((\%|px)?)(\s*)#si"," $1=\"$2$3\" ", $text);
          $_ = preg_replace("#\s*(align|valign)\s*=\s*(\w+)\s*#si"," $1=\"$2\"", $_);
          $_ = preg_replace("#<(img|input|meta|link|base)\s*(.*?)\s*/?>#is","<$1 $2 />", $_);
          $_ = preg_replace("#<br\s*/?>#is","<br />", $_);
          $_ = preg_replace("#<hr(.*?)\s*/?>#is","<hr$1 />", $_);
          $_ = preg_replace("#\s+>#is",">", $_);
          $_ = preg_replace("#\s*=\s*#is","=", $_);
          return $_;
      }
     
      return '';
  }
 
Быстрый поиск файла в поддиректориях.
Тестировался в директории, в которой 45 папок (1, 2,...45), а в них по 900 файлов.
PHP:
function rglob($dir, $file) {
    $files = glob($dir."/[0-9]*/".$file, GLOB_NOSORT);
    if(count($files) > 0) return $files[0];
    else return false;
}
 
// пример
$file = rglob('my_dir', 'search_file.txt');
if ($file) {
    echo 'файл найден';
}
 
убираем лишние пробелы и x0D, x0A в строке
PHP:
$s = preg_replace("/(\s){2,}/",' ',$s);

определение кодировки текста (только UTF-8, CP1251)
PHP:
preg_match('#.#u', $s);
 
Возникла задача оптимизировать (проверить починить оптимизировать) все базы данных mysql на сервере. Проверено, работает.
нашел где то в просторах интернета в свое время.
делюсь:



latteo: решение полезное, но очень уж простое да еще и с говнокодом и отдельной темы тем более в разделе php pro совсем не достойно...
 
Писал/отлаживал одну библиотеку.
В процессе отладки получился такой вот класс вывода данных в браузер.
Для продакшн-скриптов не очень подходит, но для всяких тестов, апдейтов данных и прочих скриптов без четкой структуры и с табличками - самое то.
Вызывается как-то так:
PHP:
<?php
require_once 'view.php';
view::start('Это тайтл >>> Тестируем библиотеку');
// **********************************************************
view::head('Это заголовок, чтобы жирно было....');
view::show('Это обычный текстовый блок. Ну так, чтобы не жирно.....');
view::show('Интересно, что этот же метод получив массив, выведет таблицу');
view::head('Собственно таблица:');
// ***********************************************************
$zarplata = array();
$zarplata[] = array('id'=>'1','FIO'=>'Иванов И.И.','work'=>'Директор','money'=>'200');
$zarplata[] = array('id'=>'2','FIO'=>'Прикладов Е.А.','work'=>'Кадровик','money'=>'100');
$zarplata[] = array('id'=>'3','FIO'=>'Шмурдяков М.А.','work'=>'Дворник','money'=>'80');
$zarplata[] = array('id'=>'4','FIO'=>'Чапаев В.И.','work'=>'Охранник','money'=>'75');
$zarplata[] = array('id'=>'5','FIO'=>'Шарапов Ю.Ю.','work'=>'Зоотехник','money'=>'95');
$zarplata[] = array('id'=>'6','FIO'=>'Стервина С.Е.','work'=>'Старший по шлангу','money'=>'50');
$zarplata[] = array('id'=>'7','FIO'=>'Турников Т.А.','work'=>'Тренер','money'=>'100');
$zarplata[] = array('id'=>'8','FIO'=>'Шапокляк Ш.Р.','work'=>'Аниматор','money'=>'150');
$zarplata[] = array('id'=>'9','FIO'=>'Калькуляторова А.И.','work'=>'Бухгалтер','money'=>'200');
$zarplata[] = array('id'=>'10','FIO'=>'Шнобель К.Л.','work'=>'Завуч','money'=>'120');
$zarplata[] = array('id'=>'11','FIO'=>'Крокодилов К.И.','work'=>'Космонавт','money'=>'1200');
$zarplata[] = array('id'=>'12','FIO'=>'Чиновников Ч.К.','work'=>'Скромный служащий','money'=>'10');
view::show($zarplata);
// **********************************************************
view::end();
На выходе довольно читабельный как для генеренного код.
Заточен под UTF-8, но правится легко.
Формат таблиц такой как возвращает база - массив массивов, где каждая строка имеет одинаковые названия полей.

Собственно сам класс:
PHP:
<?php
/**
* Класс вывода табличек и текста. Чисто для тестов.
* В продакшене лучше использовать что-то другое
*
*/
class view {
    public static $start;
    public static function start($title) {
        self::$start = microtime(true);
        header('Content-type: text/html; charset=UTF-8');
        echo('<!DOCTYPE html>'.PHP_EOL);
        echo('<html>'.PHP_EOL);
        echo('    <head>'.PHP_EOL);
        echo('        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">'.PHP_EOL);
        echo('        <title>'.$title.'</title>'.PHP_EOL);
        echo('    </head>'.PHP_EOL);
        echo('    <body>'.PHP_EOL);
    }
    public static function end() {
        $t = ceil((microtime(true) - self::$start)*1000)/1000;
        self::show('Выполненно за '.$t.' секунд');
        echo('    </body>'.PHP_EOL);
        echo('</html>');
    }
    public static function head($data) {
        echo(PHP_EOL.'<h2>'.$data.'</h2>'.PHP_EOL);
    }
    public static function show($data) {
        if(!is_array($data)) {
            echo(PHP_EOL.'<br>'.$data.'<br>'.PHP_EOL);
        }
        else {
            if(count($data) == 0) echo(PHP_EOL.'<b>EMPTY array</b><br><br>'.PHP_EOL);
            else {
                // создаем табличку
                $table='';
                $head = array();
                foreach($data as $tmp) {
                    foreach ($tmp as $key => $value) {
                        $head[$key]=$key;
                    }
                    $table.='    <tr><td>'.  implode('</td><td>', $tmp).'</td></tr>'.PHP_EOL;
                }
                $head = '<tr><th>'.implode('</th><th>', $head).'</th></tr>';
                $table = '<table border="1">'.PHP_EOL.$head.PHP_EOL.$table.'</table>'.PHP_EOL;
                echo($table);
            }
        }
    }
}
 
На тему слияния массивов. Функция для рекурсивного слияния двух массивов с заменой по одинаковым ключам, а не дописыванием как это делает array_merge_recursive().

Код:
function MergeArrays($Arr1, $Arr2)
{
  foreach($Arr2 as $key => $Value)
  {
    if(array_key_exists($key, $Arr1) && is_array($Value))
      $Arr1[$key] = MergeArrays($Arr1[$key], $Arr2[$key]);
 
    else
      $Arr1[$key] = $Value;
 
  }
 
  return $Arr1;
 
}

Код не мой был наглым образом позаимствован с комментариев на php.net (Для просмотра ссылки Войди или Зарегистрируйся), после не долгих поисков перед началом изобретения велосипеда, в очередной раз убедился что с начало надо проверять паблик на наличие уже имеющегося решения, перед началом изобретения велосипедов.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху