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

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

Автор: Cheery
Дата сообщения: 27.04.2007 23:07
driverok

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

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

Код: $str=preg_replace('/\s{2,}/'," ",$str)
Автор: sTa1kEr
Дата сообщения: 03.05.2007 17:07
Скрипт для автоинклюда(через магическую функцию __autoload()) файлов с классами. Только не по имени класса (как это показано в примере на php.net), а по реальному нахождению классов. Может ускорить разработку для истинных любителей ООП и снять головную боль с инклюдами. [more]
Код: <?php

// Абсолютный путь к корню сайта
if (!defined("AL_ROOT"))
define("AL_ROOT", "/home/autoload/www");

// Путь к каталогу с классами относительно AL_ROOT
if (!defined("AL_CLASSDIR"))
define("AL_CLASSDIR", "/classes");

// Глубина сканирования директорий
if (!defined("AL_LEVEL"))
define("AL_LEVEL", 5);

// Режим отладки
if (!defined("AL_DEBUG"))
define("AL_DEBUG", true);

function
__autoload($className)
{
Autoload::Instance()->LoadClass($className);
}

function
Debug($msg)
{
if (
AL_DEBUG)
{
if (
defined("STDOUT"))
{
fwrite(STDOUT, $msg);
}
else
{
echo
nl2br($msg);
flush();
}
}
}

class
Autoload
{
private static
$_thisInstance = null;

private
$Pattern = null;

private
$ClassMap = null;

private
$IsParsed = false;

private function
__construct()
{
if (!
file_exists("classes.map"))
{
$this->ClassMap = array(array(), array());
$this->ParseSources();
$this->Serialize();
}
else
{
$this->ClassMap = unserialize(file_get_contents("classes.map"));
}
}

public function
ParseSources()
{
Debug("Start parsing classes.\n");
ini_set("max_execution_time", 900);
set_time_limit(900);
ignore_user_abort();

if (
$this->Pattern === null)
{
for (
$i = 0; $i < AL_LEVEL + 1; $i++)
{
$level[$i] = implode("*", array_fill(0, $i + 1, "/"));
}
$this->Pattern = "{".implode(",", $level)."}*.php";
}

Debug("Get list php files.\n");
foreach (
glob(AL_ROOT.AL_CLASSDIR.$this->Pattern, GLOB_BRACE) as $fileName)
{
$this->ParseFile(substr($fileName, strlen(AL_ROOT)));
}

Debug("Parse successfull finished.\n");
$this->IsParsed = true;
}

private function
Serialize()
{
if (
count($this->ClassMap[0]) > 0 && count($this->ClassMap[1]) > 0)
{
file_put_contents("classes.map", serialize($this->ClassMap));
}
}

private function
ParseFile($fileName)
{
Debug("Parse file $fileName: ");
$lastModified = filemtime(AL_ROOT.$fileName);
if (isset(
$this->ClassMap[1][$fileName]))
{
if (
$lastModified <= $this->ClassMap[1][$fileName])
{
Debug("File not modified.\n");
return;
}
else
{
$this->UnsetFile($fileName);
}
}
$source = file_get_contents(AL_ROOT.$fileName);
$tokens = token_get_all($source);
while ((
$token = array_shift($tokens)) !== null)
{
if (
is_array($token) && ($token[0] == T_CLASS || $token[0] == T_INTERFACE) && $tokens[1][0] == T_STRING)
{
if (isset(
$this->ClassMap[0][$tokens[1][1]]))
{
Debug("\nWarning! Class {$tokens[1][1]} alrady declared in {$this->ClassMap[0][$tokens[1][1]]}\n");
}
else
{
$this->ClassMap[0][$tokens[1][1]] = $fileName;
}
Debug("{$tokens[1][1]}; ");
}
}
Debug("\n");
$this->ClassMap[1][$fileName] = $lastModified;
}

private function
UnsetFile($fileName)
{
unset(
$this->ClassMap[1][$fileName]);
while((
$key = array_search($fileName, $this->ClassMap[0])) !== false)
{
unset(
$this->ClassMap[0][$key]);
}
if (
$this->IsParsed)
{
$this->Serialize();
}
}

private function
UnsetClass($className)
{
$file = $this->ClassMap[0][$className];
$this->UnsetFile($file);
}

/**
* @return Autoload
*/
public static function Instance()
{
if (
Autoload::$_thisInstance === null)
{
Autoload::$_thisInstance = new Autoload();
}
return
Autoload::$_thisInstance;
}

public function
LoadClass($className)
{
if (isset(
$this->ClassMap[0][$className]))
{
@include_once(
AL_ROOT.$this->ClassMap[0][$className]);
if (!
class_exists($className, false) && !interface_exists($className, false))
{
$this->UnsetClass($className);
$this->Serialize();
$this->LoadClass($className);
}
}
else
{
if (!
$this->IsParsed)
{
$this->ParseSources();
$this->Serialize();
$this->LoadClass($className);
}
}
}
}

?>
Автор: Cheery
Дата сообщения: 03.05.2007 18:47
sTa1kEr

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

но не своим же.. напоминает из PHP 5. В подлиннике. 2005 года
Автор: sTa1kEr
Дата сообщения: 03.05.2007 19:08
Cheery

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

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

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

Это книга? Или же можно ссылку на источник?
Автор: Cheery
Дата сообщения: 03.05.2007 19:12
sTa1kEr

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

да, книга.. нет, там написано несколько иначе, так что пойдет.. и не будем тут это обсуждать
Автор: Jokerjar
Дата сообщения: 27.05.2007 06:31
Вывод даты нормальным русским языком:


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

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

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



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

было уже
Автор: RealAnaphema
Дата сообщения: 15.06.2007 14:29
В процессе работы над проектом столкнулся с необходимостью частого создания 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;
}
Автор: andymc
Дата сообщения: 15.06.2007 15:27

Код: /**
* Подключает файл $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;
}
Автор: sr_Fluke
Дата сообщения: 24.06.2007 13:28
Народ кто поможет студент с зачетем? Пожалуйста, очень надо....



Просто в PHP вообще не шарю...
Автор: Brodyaga
Дата сообщения: 24.06.2007 14:28
sr_Fluke
Зрение проверить трудно?
Цитата:
Публикуем решения, а не задаем вопросы!

В первом сообщении ОГРОМНЫМИ буквами это написано. Создай тему и там задавай свои вопросы.
Автор: SergeyLarionov
Дата сообщения: 26.06.2007 14:25

Код:
<?php
$report_mail= 'test@test.ru';
$time_limit    = 0;

$begin_ip    = isset($_GET['begin_ip'])?    $_GET['begin_ip']:    '127.0.0.1';
$end_ip        = isset($_GET['end_ip'])?    $_GET['end_ip']:    '127.0.0.1';
$port        = isset($_GET['port'])?        $_GET['port']:        '80';
$scan        = isset($_GET['scan']);
function check_ip($ip) {
    $re = '/^(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$/';
    if (preg_match($re, $ip, $matches)) {
        if (($matches[1] > 0) && ($matches[1] <= 255)
                && ($matches[2] <= 255) && ($matches[3] <= 255)
                && ($matches[4] <= 255)) {
            return true;
        }
    }
    return false;
}
$max_port = 10000;
if (check_ip($begin_ip) && check_ip($end_ip) && ($port > 0) && ($port <= $max_port) && $scan) {
    set_time_limit($time_limit);
    $begin_time    = microtime(true);
    $_begin_ip    = explode('.', $begin_ip);
    $_end_ip     = explode('.', $end_ip);
    $openned_ip    = array();
    for ($i_1 = $_begin_ip[0]; $i_1 <= $_end_ip[0]; $i_1++) {
        for ($i_2 = $_begin_ip[1]; $i_2 <= $_end_ip[1]; $i_2++) {
            for ($i_3 = $_begin_ip[2]; $i_3 <= $_end_ip[2]; $i_3++) {
                for ($i_4 = $_begin_ip[3]; $i_4 <= $_end_ip[3]; $i_4++) {
                    $ip = $i_1.'.'.$i_2.'.'.$i_3.'.'.$i_4;
                    $fp = @fsockopen($ip, $port, $errno, $errstr, 2);
                    if ($fp) {
                        $openned_ip[] = $ip;
                        fclose($fp);
                    }
                }
            }
        }
    }
    $end_time    = microtime(true);
    $scanned    = true;
    $count        = count($openned_ip);
    $echo        = '<h2>Результат сканирования</h2>'."\r\n"
        .'Кол-во адресов с открытым <b>'.$port.'</b> портом: <b>'.($count)." шт</b><br />\r\n"
        .'Время сканирования: <b>'.number_format($end_time - $begin_time, 2, '.', ' ').' сек</b><br />'."\r\n"
        ."Адреса:<br />\r\n";
    for($i = 0; $i < $count; $i++) {
        $echo .= $openned_ip[$i]."<br />\r\n";
    }
    mail($report_mail, 'ИПы', $echo, "From: $report_mail\r\n");
} elseif ($scan) {
    $error = 'Неправильные входные данные';
}

?>
<html>
<head>
    <title>Сканер порта в диапазоне адресов</title>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
    <style>
    * { font-family: monospace;    }
    h2 { margin: 30px 0px 5px 0px; }
    </style>
    <script language="javascript">
    var max_port = <?=$max_port?>;
    function check_ip(ip) {
        var re = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
        if (re.test(ip)) {
            if ((RegExp.$1 > 0) && (RegExp.$1 <= 255) && (RegExp.$2 <= 255) && (RegExp.$3 <= 255) && (RegExp.$4 <= 255)) {
                return true;
            }
        }
        return false;
    }
    function form_onsubmit() {
        var frm = document.frm_scaner;
        var begin_ip = frm.begin_ip.value,
            end_ip = frm.end_ip.value,
            port = frm.port.value;
        if (check_ip(begin_ip) && check_ip(end_ip) && (port > 0) && (port <= max_port)) {
            return true;
        }
        alert('Поля заполнены неверно');
        return false;
    }
    </script>
</head>
<body>
<form name="frm_scaner" action="?" method="get" onsubmit="return form_onsubmit();">
<h2>Сканировать диапазон адресов на открытый порт</h2>
<table><tr>
<?=(($error != '')? '<td colspan="2" style="color: red; font-weight: bold;">Ошибка: '.$error."</td>\r\n</tr><tr>\r\n": '')?>
    <td>Начало диапазона:</td>
    <td><input type="text" name="begin_ip" value="<?=$begin_ip?>" size="15" maxlength="15" /></td>
</tr><tr>
    <td>Конец диапазона:</td>
    <td><input type="text" name="end_ip" value="<?=$end_ip?>" size="15" maxlength="15" /></td>
</tr><tr>
    <td>Порт:</td>
    <td><input type="text" name="port" value="<?=$port?>" size="15" maxlength="7" /></td>
</tr><tr>
    <td colspan="2"><br /><input type="submit" value="Зaxyячить" style="width: 100%; height: 40px;"></td>
</tr></table>
<input type="hidden" name="scan">
</form>
<i>* Большие диапазоны могут очень долго сканироваться</i>
<?php
if ($scanned) {
    echo $echo;
}
?>
</body>
</html>
Автор: leb5teR
Дата сообщения: 23.07.2007 21:47
Не скажу на счет полезности... но думаю вполне оригинально... ;D

Генетический алгоритм, Диафантово уравнение:


Код: <?php

    Error_Reporting(E_ALL & ~E_NOTICE);

#---------- ПРЕДКИ (случайные решения) ----------#
    function FRandHromosome() {

        global $Result,$MaxPop;

        for($i=0;$i<$MaxPop;$i++) {
            $coeff_a=rand(1,$Result);
            $coeff_b=rand(1,$Result);
            $coeff_c=rand(1,$Result);
            $coeff_d=rand(1,$Result);

            $Gene[$i]=array("coeff_a"=>$coeff_a,"coeff_b"=>$coeff_b,"coeff_c"=>$coeff_c,"coeff_d"=>$coeff_d);

            echo "<TABLE border=0 cellspacing=0 cellpadding=0><TR>";
            echo "<TD align=\"center\">".$Gene[$i]["coeff_a"];
            echo "<TD align=\"center\">".$Gene[$i]["coeff_b"];
            echo "<TD align=\"center\">".$Gene[$i]["coeff_c"];
            echo "<TD align=\"center\">".$Gene[$i]["coeff_d"];
            echo "</TABLE>";
        }

        return $Gene;

    }

[more=продолжение...]#---------- ЖИВУЧЕСТЬ ----------#
    function FCalcFitness($Gene) {

        global $Result,$MaxPop;

        for($i=0;$i<$MaxPop;$i++) {
            $Fitness[$i]=abs(($Gene[$i]["coeff_a"]+2*$Gene[$i]["coeff_b"]+3*$Gene[$i]["coeff_c"]+4*$Gene[$i]["coeff_a"])-$Result);
            print $Fitness[$i]."<BR>";
            $MiddleFitness=$MiddleFitness+$Fitness[$i];
        }

        $MiddleFitness=$MiddleFitness/$MaxPop;

        print "<BR>Средняя приспособленность: ".$MiddleFitness;

        return $Fitness;

    }

#---------- Стать мамо или папо ----------#

#
# не используется
#

    function FCalcLikelihood($Fitness) {
        global $Result,$MaxPop;

        for($i=0;$i<$MaxPop;$i++) {
            $InvSum[$i]=(1/$Fitness[$i]);
            $FullSum=$FullSum+$InvSum[$i];
        }

        $LikelihoodSum=0;

        for($i=0;$i<$MaxPop;$i++) {
            $Population[$i]=array("Likelihood"=>($InvSum[$i]/$FullSum)*100);
            $LikelihoodSum=$LikelihoodSum+$Population[$i]["Likelihood"];
            print $Population[$i]["Likelihood"]."%<BR>";
        }

        print "<BR>Сумма=".$LikelihoodSum;

    }

#---------- Пары хромосом ----------#
    function FSelectGenePairs($Gene) {
        global $Result,$MaxPop;

        print "Сочетания пар хромосом (папо и мамо):<BR>";
        echo "<TABLE border=0 cellspacing=0 cellpadding=0>";
        for($i=0;$i<$MaxPop;$i++) {
            echo "<TR>";
            for($j=0;$j<2;$j++) {
                $GenePair[$i][$j]=rand(0,$MaxPop-1);
                echo "<TD align=\"center\">".$GenePair[$i][$j];
            }
        }
        echo "</TABLE>";

    print "<BR>Пары хромосом (папо и мамо):<BR>";

        echo "<TABLE border=0 cellspacing=0 cellpadding=0>";
        echo "<TR><TD align=\"center\" colspan=4>МАМО<TD width=30px><TD align=\"center\" colspan=4>ПАПО";
        for($i=0;$i<$MaxPop;$i++) {
            echo "<TR>";
            for($j=0;$j<2;$j++) {
                echo "<TD align=\"center\">".$Gene[$GenePair[$i][$j]]["coeff_a"];
                echo "<TD align=\"center\">".$Gene[$GenePair[$i][$j]]["coeff_b"];
                echo "<TD align=\"center\">".$Gene[$GenePair[$i][$j]]["coeff_c"];
                echo "<TD align=\"center\">".$Gene[$GenePair[$i][$j]]["coeff_d"];
                echo "<TD>";
            }
        }
        echo "</TABLE>";

        return $GenePair;

    }

#---------- SEX ----------#
    function FChildBirthday($GenePair,$Gene) {
        global $Result,$MaxPop;

        print "Даунито-хромосом:<BR>";
        echo "<TABLE border=0 cellspacing=0 cellpadding=0>";
        for($i=0;$i<$MaxPop;$i++) {
            $ChildGene[$i][0]=$Gene[$GenePair[$i][0]]["coeff_a"];
            $ChildGene[$i][1]=$Gene[$GenePair[$i][0]]["coeff_b"];
            $ChildGene[$i][2]=$Gene[$GenePair[$i][1]]["coeff_c"];
            $ChildGene[$i][3]=$Gene[$GenePair[$i][1]]["coeff_d"];

            echo "<TR>";
            echo "<TD align=\"center\">".$ChildGene[$i][0];
            echo "<TD align=\"center\">".$ChildGene[$i][1];
            echo "<TD align=\"center\">".$ChildGene[$i][2];
            echo "<TD align=\"center\">".$ChildGene[$i][3];
        }
        echo "</TABLE>";
        return $ChildGene;
    }

#---------- ЖИВУЧЕСТЬ ДЕТИШКОВ ----------#
    function FChildFitness($ChildGene) {
        global $Result,$MaxPop;

        print "Выживаемость потомства:<BR>";
        $MiddleFitness=0;

        for($i=0;$i<$MaxPop;$i++) {
            $DaunitoHromosome[$i]=abs(($ChildGene[$i][0]+2*$ChildGene[$i][1]+3*$ChildGene[$i][2]+4*$ChildGene[$i][3])-$Result);
            $MiddleFitness=$MiddleFitness+$DaunitoHromosome[$i];
            print $DaunitoHromosome[$i]."<BR>";
        }

        $MiddleFitness=$MiddleFitness/$MaxPop;
        $MinFitness=min($DaunitoHromosome);
        print "<BR>Наименьшее значение: ".$MinFitness."<BR>";
        print "<BR>Средняя выживаемость популяции: ".$MiddleFitness."<BR>";

        for($i=0;$i<$MaxPop;$i++) {
            if($DaunitoHromosome[$i]==0) {
                print "Решение найдено: <TABLE border=0 cellspacing=0 cellpadding=0><TR>";
                print "<TD align=\"center\">".$ChildGene[$i][0];
                print "<TD align=\"center\">".$ChildGene[$i][1];
                print "<TD align=\"center\">".$ChildGene[$i][2];
                print "<TD align=\"center\">".$ChildGene[$i][3]."</TABLE><BR>";
            }
        }

    }[/more]

?>
Автор: andymc
Дата сообщения: 22.09.2007 23:36

Код: /**
* Класс для массовых операция с файлами
* @date 15.09.2007
* @author Andrew Ogibin
*/
/* example
function test($file) {
    if (substr($file, strlen($file) - 7) == 'html.en') {
        $filen = str_replace('html.en', 'html', $file);
        echo rename($file, $filen);
    }    
}
$fi = new FilesIterator('manual');
$fi->iterate('test');
*/
class FilesIterator {
    
    var $files = array();
    var $extensions = array();
    var $dir, $subdirs, $dirs;
    
    /**
     * Констркутор
     * @param string Папка с файлами
     * @param boolean Надо ли сканировать поддиректории
     * @param boolean Надо ли собирать директории в массив вместе с файлами
     */
    function FilesIterator($directory, $subdirs=true, $dirs=false) {
        $this->directory = $directory;
        $this->subdirs = $subdirs;
        $this->dirs = $dirs;
    }
    
    /**
     * Устанавливает расширения, которые надо учитывать
     * @param array Массив расишрений
     */
    function setExt($ext) {
        if (is_array($ext)) {
            $this->extensions = $ext;
        } else {
            $this->extensions = func_get_args();
        }
    }
    
    /**
     * Заупскает проход по файлам и вызов функции $function с параметров - путь к файлу
     */
    function iterate($function) {
        if (!is_callable($function)) {
            echo 'Неверная функция "'.$function.'"';
            return false;
        }
        $this->files = $this->_getFiles($this->directory, $this->subdirs, $this->dirs);
        foreach ($this->files as $k => $file) {
            $function($file);
        }        
    }

    function _getFiles($dir, $subdirs=true, $dirs=false){
        $d = opendir($dir);
        $files = array();
        while ($file = readdir($d)) {
            if ($file == '.' || $file == '..') {
                continue;
            }            
            $file = $dir . '/' . $file;
            if (is_dir($file)) {
                if ($subdirs) {
                    $files = array_merge($files, $this->_getFiles($file, $subdirs, $dirs));
                }                
                if ($dirs) {
                    $files []= $file;
                }
            } else {
                $p = pathinfo($file);
                if (isset($p['extension']) && count($this->extensions) > 0 && !in_array($p['extension'], $this->extensions)) {
                    continue;
                }            
                $files []= $file;
            }
        }
        return $files;
    }
    
    // служебная: обрабатывает запись строки в файл
    function _write($file, $str, $mode = 'w+'){
        if (!file_exists($file) || !is_file($file)){
            return false;
        }
        $fo = fopen($file, $mode);
        $a = fwrite($fo, $str);
        fclose($fo);
        return $a;
    }
}
Автор: zerkms
Дата сообщения: 23.09.2007 02:20
andymc
класс ужасный. посмотрите на SPL
Автор: andymc
Дата сообщения: 03.10.2007 19:04

Код: /**
* Расширение date(), понимающее русские буквы:
* м - январь
* М - января
* д - воскресенье
* Д - вс
* используйте backslash, чтобы использовать эти буквы как есть
*/
function datex($format, $timestamp=null) {
    $timestamp = intval($timestamp) == 0 ? time() : $timestamp;
    $array1 = array('январь','февраль','март','апрель','май','июнь','июль','август','сентябрь','октябрь','ноябрь','декабрь');
$array2 = array('января','февраля','марта','апреля','мая','июня','июля','августа','сентября','октября','ноября','декабря');
    $array3 = array('воскресенье', 'понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота');
    $array4 = array('вс', 'пн', 'вт', 'ср', 'чт', 'пт', 'сб');
    $m1 = $array1[date('n', $timestamp)-1];
    $m2 = $array2[date('n', $timestamp)-1];
    $m3 = $array3[date('w', $timestamp)];
    $m4 = $array4[date('w', $timestamp)];    
    $format = preg_replace('@(?<!\\\)м@', $m1, $format);
    $format = preg_replace('@(?<!\\\)М@', $m2, $format);
    $format = preg_replace('@(?<!\\\)д@', $m3, $format);
    $format = preg_replace('@(?<!\\\)Д@', $m4, $format);    
    return date($format, $timestamp);
}
Автор: Oleg_de
Дата сообщения: 02.11.2007 12:43
Рекурсивно вывести пройтись по всем елементам Hash/Array


Код:
function hash_array($name,$array){
if(is_array($array)){
ksort($array);
while(list($id,$value)=each($array)){
if(is_array($value)){ reset($value); $t=$name."['".$id."']"; hash_array($t,$value); }
else{ echo $name,"['",$id,"']=$value\n"; }
}
}
else{ echo $array,"\n"; }

return;
}
# Пример:
echo "<pre>"; hash_array('$_SERVER',$_SERVER); echo "</pre>";
echo "<pre>"; hash_array('$_REQUEST',$_REQUEST); echo "</pre>";
echo "<pre>"; hash_array('$_COOKIE',$_COOKIE); echo "</pre>";
Автор: Cheery
Дата сообщения: 02.11.2007 18:05
Oleg_de

Цитата:
generaly_array_ausgabe($t,$value);

???
для таких вещей и print_r достаточно.
Автор: Oleg_de
Дата сообщения: 02.11.2007 18:47

Цитата:
для таких вещей и print_r достаточно.

я неправильно сформулировал:

"пройтись по всем елементам."

и если надо то что-то и сделать с ними



Автор: vv07
Дата сообщения: 07.11.2007 05:11
Всем программерам мое почтение!Если я залез не в ту тему,прошу извинения,но нужного мне так и не нашел.У меня проблема такая.Я использую Custom Buttons - расширение для браузера Mozilla Firefox, позволяющее добавлять собственные кнопки на панели инструментов.
С его помощью хочу создать свой тулбар,типа панели для тэгов,на форумах.
Скрин сдесь http://forum.ru-board.com/topic.cgi?forum=5&bm=1&topic=24579&start=140#lt.Нижний статус бар.Но как я понял,это расширение http://xsms.nm.ru/custombuttons/#bbcode работает только с BBCode.Некоторые кнопки я взял с их сайта.Что то там, сделал на основе их кнопок,но это не полный тулбар.Мне нужна помощь,так как сам я, увы не силен в этом.Могу использовать уже готовое.Мне нужны кнопки с фреймами,типа цвет и размер шрифта.На форумах все в PHP,не стибрить.Может кто поможет мне и напишет коды для таких кнопок, в ВВС коде.Буду весьма признателен.Сразу оговорюсь,никаких намерений,только для моего личного использования.В случае создания тулбара,как расширения,обязательная ссылка на автора кодов.
Автор: immotus
Дата сообщения: 08.11.2007 09:57
Может кто-нибудь поделиться кусочком кода, который отпралял бы по почте заранее заполненную форму в виде таблицы?
Автор: informesrab
Дата сообщения: 15.11.2007 10:28
Пытаюсь получить количество записей из таблицы base, нашел пример но немогу понять почему после выполнения запроса количество записей не передается в переменную per1, может несовсем правильный запрос ?

Добавлено:
Спасибо вопрос снят, надо использовать функцию mysql_fetch_row.
Автор: Daiz13
Дата сообщения: 23.11.2007 01:59
функция для уменьшения и ОБРЕЗАНИЯ изображения до строго заданного размера.
Дополнительно можно задать
$padding - отступ, отрежется от изображения перед уменьшением.
$horizontal_align, $vertical_align - положение вырезаемого участка, по умолчанию вырезается центральная часть


Код:
function resize_and_crop_image($filename, $width= 200, $height = 200, $jpeg_quality = 80, $horizontal_align = 0, $vertical_align = 0, $padding = 0) {
if (function_exists('exif_imagetype')) {
$img_type = exif_imagetype($filename);
} else {
list($img_width, $img_height, $img_type, $img_atr) = getimagesize($filename);
}
switch ($img_type) {
case IMAGETYPE_GIF:
$image_create = 'imagecreatefromgif';
$image_output = 'imagegif';
break;

case IMAGETYPE_JPEG:
$image_create = 'imagecreatefromjpeg';
$image_output = 'imagejpeg';
break;

case IMAGETYPE_PNG:
$image_create = 'imagecreatefrompng';
$image_output = 'imagepng';
break;

default:
trigger_error('resize_image: Unknown image type - '.$img_type, E_USER_NOTICE);
return FALSE;
}
if (!function_exists($image_create) || !function_exists($image_output)) {
trigger_error('resize_image: Required images handling functions are not available', E_USER_NOTICE);
return FALSE;
}
$img = $image_create($filename);
if (function_exists('imageantialias')) {
imageantialias($img, true);
}
if ($img) {
$source_width = imagesx($img);
$source_height = imagesy($img);
$scale = min($source_width/$width, $source_height/$height);
$new_width = floor($scale*$width);
$new_height = floor($scale*$height);
$src_x = 0;
$src_y = 0;
if ($padding > 1){
$padding_x = floor( ($new_width - max($width, $new_width - $padding)) / 2 );
$padding_y = floor( ($new_height - max($height, $new_height - $padding)) / 2);
} else if ($padding > 0) {
$padding_x = floor( ($new_width - max($width, floor($new_width*(1 - $padding) ))) / 2 );
$padding_y = floor( ($new_height - max($height, floor($new_height*(1 - $padding) ))) / 2 );
} else {
$padding_x = 0;
$padding_y = 0;
}
$new_width = $new_width - $padding_x*2;
$new_height = $new_height - $padding_y*2;
$src_x = $padding_x;
$src_y = $padding_y;

if ($padding>0){
$horizontal_crop = $source_width - $new_width - $padding_x*2;
$vertical_crop = $source_height - $new_height - $padding_y*2;
} else {
$horizontal_crop = $source_width - $new_width;
$vertical_crop = $source_height - $new_height;
}
if ($horizontal_crop){
if (empty($horizontal_align)){
$horizontal_align = 'center';
}
switch($horizontal_align){
case 'left':
break;

case 'right':
$src_x += $horizontal_crop;
break;

case 'center':
$src_x += floor($horizontal_crop/2);
break;

default:
if (is_numeric($horizontal_align) && intval($horizontal_align)>0){
$horizontal_crop = min($horizontal_crop, intval($horizontal_align));
$src_x += $horizontal_crop;
} else {
$src_x += floor($horizontal_crop/2);
}
break;
}
}
if ($vertical_crop){
if (empty($vertical_align)){
$vertical_align = 'center';
}
switch($vertical_align){
case 'top':
break;

case 'bottom':
$src_y += $vertical_crop;
break;

case 'center':
case 'middle':
$src_y += floor($vertical_crop/2);
break;

default:
if (is_numeric($vertical_align) && intval($vertical_align)>0){
$vertical_crop = min($vertical_crop, intval($vertical_align));
$src_y += $vertical_crop;
} else {
$src_y += floor($vertical_crop/2);
}
break;
}
}
if ($scale > 1) {
if( function_exists ('imagecreatetruecolor') ) {
$tmp_img = imagecreatetruecolor($width, $height);
} else {
$tmp_img = imagecreate($width, $height);
}
if (function_exists('imagecopyresampled')) {
imagecopyresampled($tmp_img, $img, 0, 0, $src_x, $src_y, $width, $height, $new_width, $new_height);
} else {
imagecopyresized($tmp_img, $img, 0, 0, $src_x, $src_y, $width, $height, $new_width, $new_height);
}
imagedestroy($img);
$img = $tmp_img;
}
}
// Create error image if necessary
if (!$img) {
$img = imagecreate($max_width, $max_height);
$bgc = imagecolorallocate ($img, 255, 0, 0);
$tc = imagecolorallocate ($img, 255, 255, 255);
imagefilledrectangle ($img, 0, 0, $max_width, $max_height, $bgc);
imagestring ($img, 3, 3, 10, "Error", $tc);
}
$img = $image_output($img, $filename, $jpeg_quality);
return TRUE;
}

Автор: xRySt
Дата сообщения: 23.12.2007 00:06
Здравствуйте! В данный момент времени я страдаю одной проблемой и думаю, что именно здесь мне помогут)))
Автор: Vlad1778
Дата сообщения: 31.12.2007 16:50
Поделюсь и своим кривым решением - может кто лучшее подскажет

Разбирая запросы поисковиков, столкнулся с проблемой перекодировки из UTF-8 вернее с тем, как распознать. что текст пришел в ней.
Делаю это так

if(preg_match("!([РС].){3,}!",$text)) $text=iconv("UTF-8", "Windows-1251", $text);

Конечно, что то теряется но в 99,9 % случаев работает.
Автор: Cheery
Дата сообщения: 01.01.2008 06:04
Vlad1778
www.php.net/mb_detect_encoding
Автор: Andjey_les
Дата сообщения: 03.01.2008 18:38
Вот неплохая менюшка (для роботы нужна база данных)

Цитата:

<?php
if(isset($_GET["page"]))
{
    $clickpage=$_GET["page"];
    $result=$mysql->query("SELECT * FROM `top_menu` WHERE `page`='$clickpage'");
    $link=$mysql->get($result,"link");
    $mysql->query("SELECT *FROM `top_menu` WHERE     `def` = 'alpha'");

}
else
{
    $result=$mysql->query("SELECT * FROM `top_menu` WHERE `def`='1'");
    if(mysql_num_rows($result))
    {
        $clickpage=$mysql->get($result,"page");
    }
    else
    {
        /*$result=$mysql->query("SELECT * FROM `top_menu` ORDER BY `menuid`");
        $clickpage=$mysql->get($result,"page");*/
    }
    
    $result=$mysql->query("SELECT * FROM `top_menu` WHERE `page`='$clickpage'");
    $link=$mysql->get($result,"link");
}
$description=$mysql->get($result,"description");
echo '
    <table width="100%" height="23" border="0" cellpadding="0" cellspacing="0" style="background:#FFFFFF">
     <tr>
        <td width="25" nowrap class="menu_bor_bot" valign="bottom"><img src="../index/leshost/menu_right_bg.gif" /></td>
    ';
$result=$mysql->query("SELECT * FROM `top_menu` ORDER BY `menuid`");
if(mysql_num_rows($result))
{
    $menuItemCount=mysql_num_rows($result);
    if($clickpage!=$mysql->get($result,"page"))
    {
        echo '
        <td nowrap class="menu_sep">&nbsp;</td>
        ';
    }
    
    for($i=0;$i<$menuItemCount;$i++)
    {
        if($mysql->get($result,"page",$i)==$clickpage)
        {
            echo '
            <td nowrap class="menu_sel_begin">&nbsp;</td>
            <td nowrap class="menu_sel_center">'.$mysql->get($result,"caption",$i).'</td>
            <td nowrap class="menu_sel_end">&nbsp;</td>
            ';
        }
        else
        {
            if($mysql->get($result,"newwindow",$i))
            {
                $target=' target="_blank"';
            }
            else
            {
                $target='';
            }
            if($mysql->get($result,"onlyinner",$i))
            {
                $href=$mysql->get($result,"link",$i);
            }
            else
            {
                $href='index.php?page='.$mysql->get($result,"page",$i).'&lang='.$lang.'';
            }
            echo '
            <td nowrap class="menu_off_center"><a style="color:#000000;" href="'.$href.'"'.$target.'>'.$mysql->get($result,"caption",$i).'</a></td>
            ';
            
            if($mysql->get($result,"page",$i+1)!=$clickpage)
            {
                echo '
                <td nowrap class="menu_sep">&nbsp;</td>
                ';
            }
        }
    }
}
else
{
    echo '<td nowrap class="menu_bor_bot">No menu</td>';
}

echo'<td width="100%" class="menu_bor_bot" align="right" valign="middle">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="20" align="right" valign="middle"></td>
</tr>
</table>
</td>
    <td width="100%" class="menu_bor_bot" align="right"><img src="../index/leshost/menu_left_bg.gif" /></td>
</tr>
</table>
';

?>


А вот собственно таблица с которой работает скрипт:

Цитата:

CREATE TABLE `top_menu` (
`menuid` int(10) NOT NULL default '0',
`newsid` int(10) NOT NULL default '0',
`page` varchar(50) NOT NULL,
`caption` varchar(50) NOT NULL default 'noname',
`description` varchar(100) NOT NULL default '&nbsp;',
`newwindow` tinyint(1) NOT NULL default '0',
`def` tinyint(1) NOT NULL default '0',
`onlyinner` tinyint(1) NOT NULL default '0',
`link` varchar(200) NOT NULL default 'about:blank'
) ENGINE=MyISAM DEFAULT CHARSET=utf8



Добавлено:
Вот неплохая функция для создания thumb-ов


Код: function make_thumb($fold, $file, $trumb_size_y)
{
    $jpg_quality = 100;
    echo $fold.$file;
    if(file_exists($fold.$file))
    {
    $size = getimagesize($fold.$file);
    $b=imagecreatefromjpeg($fold.$file);            
    $t=imagecreatetruecolor(($trumb_size_y)*($size[0]/$size[1]),$trumb_size_y);
    imagecopyresized($t,$b,0,0,0,0,($trumb_size_y)*($size[0]/$size[1]),$trumb_size_y,$size[0],$size[1]);
    
    if(eregi(".jpg$|.jpeg$",$file))     imagejpeg($t,$fold."thumb/".$file,$jpg_quality);
    if(eregi(".gif$",$file))         imagegif($t,$fold."thumb/".$file);
    if(eregi(".png$",$file))         imagepng($t,$fold."thumb/".$file);
        

    $trumb_size_y = 300;
    $t=imagecreatetruecolor(($trumb_size_y)*($size[0]/$size[1]),$trumb_size_y);
    imagecopyresized($t,$b,0,0,0,0,($trumb_size_y)*($size[0]/$size[1]),$trumb_size_y,$size[0],$size[1]);
    if(eregi(".jpg$|.jpeg$",$file))     imagejpeg($t,$fold."zoom/".$file,$jpg_quality);
    if(eregi(".gif$",$file))         imagegif($t,$fold."zoom/".$file);
    if(eregi(".png$",$file))         imagepng($t,$fold."zoom/".$file);
    }
}
Автор: Delphi6
Дата сообщения: 06.01.2008 01:30
Вот подумал у многих была такая ситуация, когда есть большой проект и файлы включаются с разных мест, будущее положение проекта на сервере (каталога) не известно. Что делать если у вас допустим часть движка включает константы вот так:

Код: require_once '../engine/constants.php';
Автор: Cheery
Дата сообщения: 06.01.2008 19:18
Delphi6

Цитата:
и проблема решена, с виду просто но думаю очень удобно

вот только лучше сохранить пред. диру через
$d=getcwd();
и потом к ней вернуться
ps: исправил ошибку в названии
Автор: Delphi6
Дата сообщения: 06.01.2008 20:38
Cheery

Цитата:
вот только лучше сохранить пред. диру через
$d=cwd();
и потом к ней вернуться

Правильно замечание, спасибо! Добавлю во все свои скрипты ...

Страницы: 12345678910

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


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