Verification: a143cc29221c9be0

Php array filter empty values

Конфигурационный файл

Для работы скрипта используется практически тот же самый конфигурационный файл. Его содержание приведено в Листинге 1.

Листинг 1. Конфигурационный файл скрипта phpldapread.php

#LDAP сервер для подключения ldap_server=10.54.200.1 #Base DN для подключения ldap_basedn="dc=shelton,dc=int" #Bind DN для подключения [email protected] #Пароль для пользователя, от имени которого будет выполняться подключение ldap_password="cXdlcnR5YXNkZgo 1" #Фильтр отбора записей. Он означает: отобрать объекты типа Пользователь, # у которых не установлено свойство "Заблокировать учетную запись" ldap_common_filter="(&(!(userAccountControl:1.2.840.113556.1.4.803:=2)) (sAMAccountType=805306368))" #Игнорировать перечисленных пользователей - это системные объекты ignore_list="SQLAgentCmdExec,SMSService,SMSServer_001, wsus" #Каталог, куда будет сохранен файл etcdir=/tmp #Имя файла со списком sarglist=sargusers

Зависимости, вспомогательные функции

Для работы скрипта потребуются дополнительные компоненты pear-Config и pear-Console_Getopt, а также расширение языка php-ldap. Pear-Config потребуется для чтения конфигурационного файла, pear-Console_Getopt - для разбора параметров командной строки. Надо сказать, рассматривается не весь скрипт: такие вопросы, как чтение конфигурационного файла, отображение справки или разбор командной строки являются вопросами уже достаточно хорошо описанными, поэтому соответствующие функции будут опущены, полную версию скрипта можно скачать с . Рассмотрено будет только то, что непосредственно относится к чтению данных из AD, как сервера LDAP, и некоторые нестандартные вспомогательные функции.

Функция обратного преобразования пароля приведена в Листинге 2. Вся роль так называемой "защиты" - предотвратить случайную утечку (ту, что называется eyedropper) и не более того.

Листинг 2. Функция обратного преобразования пароля.

/* * Обратное преобразование пароля * @param string $converted преобразованный пароль * @return string $passwd пароль в текстовой форме */ function demux_passwd($converted) { $_conved = explode(" ", $converted); $_passwd = ""; if ($_conved != 0) for (;$_conved != 0; $_conved--) { $_conved = $_conved . "="; } $_passwd = base64_decode($_conved); return rtrim($_passwd); }

Ничего особо интересного, конечно же, здесь нет: как уже было сказано в предыдущих частях, в конфигурационном файле хранится пароль, преобразованный в base64, заполнители отброшены и заменены числом. Эта функция выполняет обратное преобразование.

Функция перекодировки из UTF-8 в KOI8-R приведена в Листинге 3. Необходимость в этой функции возникает вследствие того, что консоль во FreeBSD не использует UTF-8.

Листинг 3. Функция перекодировки строки из UTF-8 в KOI8-R

/* * Перекодировать строку из UTF-8 в KOI8-R * @param string $source строка в кодировке UTF-8 * @return string $dest строка в кодировке KOI8-R */ function _from_utf8($source) { $converted = iconv("UTF-8", "KOI8-R", $source); return($converted); }

Кроме того, используется совершенно неинтересная функция safe_logger, в задачу которой входит вывод сообщений в лог или на консоль с завершением или без завершения работы скрипта. Все эти функции сохранены в файле utils.php.

Подключение к AD

Для подключения к AD используется функция ldap_server_connect, приведенная в Листинге 4. Функция выполняет все операции по подключению и возвращает идентификатор соединения для работы с сервером. Функция сохранена в отдельный файл ldapquery.php

Листинг 4. Функция подключения к серверу AD

require_once $PATH_LIB."/utils.php"; /* * Подключение к серверу LDAP * @param array $_config массив параметров конфигурации * @return resource $ldapconn идентификатор соединения с LDAP-сервером */ function ldap_server_connect($_config) { // Получить пароль в текстовом виде $_ldap_pwd = demux_passwd($_config["root"]["ldap_password"]); // Установить соединение с сервером if (!$ldapconn = ldap_connect($_config["root"]["ldap_server"])) safe_logger(sprintf("Невозможно подключиться к LDAP-серверу %s", $_config["root"]["ldap_server"]), "DIE"); // Для подключения к AD Windows 2003 и выше нужно установить эти опции ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3); ldap_set_option($ldapconn, LDAP_OPT_REFERRALS, 0); // Авторизоваться на сервере ldap_bind($ldapconn, $_config["root"]["ldap_binddn"], $_ldap_pwd); return $ldapconn; }

На что хотелось бы обратить внимание здесь.

Во-первых, опции LDAP_OPT_PROTOCOL_VERSION ("версия протокола") и LDAP_OPT_REFERRALS ("отключить реферальные ссылки") должны быть обязательно установлены соответственно в 3 и 0 - без них можно увидеть странное: авторизация на сервере пройдет, но любой поиск будет возвращать ровно нуль записей.

Во-вторых, Bind DN должен быть задан в точности как в конфигурационном файле и никаким другим образом. Неверным будет в том числе и указание полного DN.

Use array_filter() Function to Remove the Empty Array Elements in PHP

The built-in function array_filter() removes all the empty elements, zeros, false and null values from an array. This function uses a callback function to filter the array values. If no callback function is specified, it removes the empty elements, zeros, false and null values.

The correct syntax to use this function is as follows

array_filter($arrayName, $callbackFunction, $callbackParameter)

Here the $arrayName is the only mandatory parameter. The parameter $callbackFunction is the callback function specified for the operation on the array. The parameter $callbackParameter tells about the parameters passed to the callback function.

We have not specified any callback function, hence the returned array has no empty elements, zeros, and null values.

Output:

The array is:
Array
(
    [0] => Rose
    [1] => Lili
    [3] => Jasmine
    [4] => Hibiscus
    [6] => Tulip
    [8] => Sun Flower
    [10] => Daffodil
    [11] => Daisy
)

Use array_diff() Function to Remove the Empty Array Elements in PHP

The built-in function array_diff() is used to find the difference between two or more arrays. It can be used to delete empty elements from an array. It does not re-index the array. The correct syntax to use this function is as follows.

array_diff($array1, $array2, $array3, ... , $arrayN);

It takes N number of the parameters (arrays). It compares the first array with all other arrays. It returns an array that contains all the elements of the first array that are not present in other arrays.

Here, we have compared our array with an array that contains the empty string, 0, and null value. Then the returned array has no empty elements.

Output:

The array is:
Array
(
    [0] => Rose
    [1] => Lili
    [3] => Jasmine
    [4] => Hibiscus
    [6] => Tulip
    [8] => Sun Flower
    [10] => Daffodil
    [11] => Daisy
)

Use unset() Function to Remove the Empty Array Elements in PHP

The unset() function removes the value stored in a variable. We can use it to remove the empty elements from an array. The correct syntax to use this function is as follows.

unset($variableName);

It only accepts one parameter $variableName. The $variableName is a variable of which we want to remove the value.

 $link) 
{ 
    if($link === '') 
    { 
        unset($flowers[$key]); 
    } 
} 
echo "The array is:\n";
print_r($flowers);
?>

Here, we have used a foreach loop to find the empty array elements. If an array element is empty, its index along with array name is passed as a parameter to the unset() function.

Output:

The array is:
Array
(
    [0] => Rose
    [1] => Lili
    [3] => Jasmine
    [4] => Hibiscus
    [5] => Tulip
    [6] => Sun Flower
    [8] => Daffodil
    [9] => Daisy
)

Contribute

DelftStack is a collective effort contributed by software geeks like you. If you like the article and would like to contribute to DelftStack by writing paid articles, you can check the write for us page.