Архив рубрики: PHP

Плагин для DNSManager, обрабатывающий создание зоны

 

#!/usr/bin/perl
#Скрипт обрабатывает события
#Функция: domain.edit
#Функция: domain.delete
#
#
#
#Да, при создании зоны в DNSmanager запускается функция domain.edit с параметрами:.
#
#clicked_button=ok&dtype=master&email=<E-mail>&func=domain.edit&ip=<IP адрес>&masterip=&na
#
#
use CGI;


#Функции
#

sub l
{
        my $filename = $0.'.log';
        open(my $fh, '>>', $filename) or die "Не могу открыть '$filename' $!";
                print $fh "$_[0]\n";
        close $fh;
}

# Тело скрипта
my $Q = new CGI;
$func = $Q->param("func");
$elid = $Q->param("elid");
l('Вызов скрипта. СТАРТ.');
l(`date`);
l('func:'.$func);
l('elid:'.$elid);
l('clicked_button='.$Q->param('clicked_button'));
l('dtype='.$Q->param('dtype'));
l('email='.$Q->param('email'));
l('func='.$Q->param('func'));
l('ip='.$Q->param('ip'));
l('masterip='.$Q->param('masterip'));
l('name='.$Q->param('name'));
l('progressid='.$Q->param('progressid'));
l('sfrom='.$Q->param('sfrom'));
l('sok='.$Q->param('sok'));

#
#Отличить в плагине создание домена от редактирования можно по параметру elid, он пустой п
#

if ( $func eq "domain.edit" )
{
#редактирвоание домена

    unless ( $elid )
    {
        #   /*
        #    Параметр elid пустой. Домен создается.
        # Нужно разобрать входные параметры функции
        # clicked_button=ok
        # dtype=master
        # email=<E-mail>
        # func=domain.edit
        # ip=<IP адрес>
        # masterip=
        # name=<Домен>
        # progressid=false
        # sfrom=ajax
        # sok=ok.
        # Это доступно из.
        # $Q->param("ПАРАМЕТР")
        #У скрипта на ISPManager входные параметры:
        #zone - текстовый параметр, имя зоны
        #ipmaster - IP адрес мастера зоны
        #del - любое значение, признак удаления зоны.
        #*/
        l('elid пустой');
        $zone = $Q->param('name');
        #ipmaster - передается в скрипт на ISPManager IP адрес мастера зоны
        $ipmaster = $Q->param('ip');
        l("$zone master $ipmaster");

    }
    else
    {
        #/*
        # Параметр elid не пустой. Зона уже существует. Ни чего делать не надо.
        # Или надо проверить существование зоны на вторичном и "передернуть" его?
        #TO-DO - удаление зоны!!!!
        #*/
        l("$elid существует");
        unless ( $Q->param('name') )
        {
            $zone=$elid;
        }...
        else
        {
            $zone = $Q->param('name');
        }
        l("создание домена $zone на $ipmaster");
    }
}
if ( $func eq "domain.delete")
{
    # Удаление домена
    l("Удаление домена $zone");
}
l("end");
print "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<doc/>\n";


 

 

PHP Хранение временных данных в методах

Проблема: реализация алгоритмов обработки данных требует генерации и дальнейшего использования неких промежуточных данных. Хранение которых требует выделение места в оперативной памяти.  Что, при неаккуратном использовании, может создавать «мусор», засорять память и, в итоге, замедлять работу приложения.

Предлагаемый способ:

В моих приложениях всегда существует некий базовый класс, на основании которого я  создаю остальные классы. В этот базовый у меня скидываются те методы, которые оказываются нужны всем объектам. Даже если в некоторых классах я потом переопределяю метод.

И так в этом базовом классе создаем новое свойство

private $ini = array();

 

Приватное, что бы даже если случайно где-то ошибся и обратился к нему, то в лучшем случае получил бы ошибку.  Название свойства не важно, и почему оно у меня получилось именно ini я не знаю. так получилось.

В деструкторе, конечно, есть строчка

function __destruct() {
unset($this->ini);
}

Теперь как использовать.

class НОВЫЙ_КЛАCС extends БАЗОВЫЙ_КЛАСС

function __destruct() {
    parent::_destruct();
}

Ну и метод, в котором используем:

function methodTwoTwo() {
$this->ini[__FUNCTION__] = 2*2;
return ( $this->ini[__FUNCTION__] );
}

 

function methodTwoSix() {
$this->ini[__FUNCTION__] = 2*6;
return$this->ini[__FUNCTION__);
}

Если бы мы использовали $this->ini в обоих случаях, то в случае вызова метода в методе мы бы получили путаницу, поскольку свойство $this->ini в зоне видимости всех методов класса. Добавляя ключ массива __FUNCTION__ мы используем массив $this->ini раздельно в разных методах, не допуская путаницы данных.

Освобождается память при уничтожении экземпляра объекта автоматическим вызовом __destruct().