Новые книги

Как найти новых клиентов? Этот вопрос, пожалуй, самый важный для любого бизнеса, потому что если у компании недостаточно потребителей, то все остальное уже не так существенно. И наоборот, постоянный поток клиентов способен быстро привести почти любой проект к успеху даже в условиях сильной конкуренции, кризиса и любой иной нестабильности. Проблем с клиентами добавляет быстро меняющаяся рыночная ситуация во всех нишах и отраслях – изменяются вкусы и пристрастия потребителей, мотивы при выборе товаров и услуг и их поставщиков, меняются, в конце концов, технологии и привычные уровни цен. То, что еще вчера в маркетинге давало отличные результаты, сегодня перестает работать и требует перенастройки. Эффективный подход к проблеме – это не «лечение» нежелательных последствий, а устранение причин «заболевания». В случае с маркетингом и продажами таким кардинальным средством является системный подход, то есть выстраивание системы постоянного привлечения новых клиентов. С помощью такой системы можно управлять скоростью притока новых клиентов, пользоваться «тормозом», «газом» и другими элементами. Она позволит контролировать все процессы и в случае необходимости масштабироваться с ростом бизнеса. Есть проверенные инструменты, взяв и настроив которые можно запустить ваш «генератор новых клиентов». Рекомендуется топ-менеджерам, руководителям и владельцам предприятий малого и среднего бизнеса, руководителям служб сбыта.
Практический опыт, описанный в книге, предназначен для освоения во время экономического кризиса, когда цены на новое оборудование – в силу разных причин – завышены, а требования и предпочтения пользователя к функционалу оборудования невысоки и ограничиваются «домашними» задачами. Сегодня почти у каждого активного пользователя скопились запчасти или старые компьютеры, компоненты и детали которых исправны. В то же время покупка нового ПК даже без установленного программного обеспечения (ПО) существенно облегчает кошелек. По сути, вся книга пронизана идеей экономии. При покупке блоков и компонентов ПК в магазинах, вы не только переплачиваете «за бренд» и «в карман посредника», но рискуете впустую потратить время из-за того, что новые компоненты (устройства, платы расширения, приводы, HDD, линейки ОЗУ и др.) не стыкуются со старыми материнскими платами и разъемами, то есть не работают. Чтобы правильно подобрать или заменить отдельные – вышедшие из строя компоненты ПК, или провести частичный апгрейд, необходимо обладать знаниями, которые вполне и всесторонне описаны в данном издании. С другой стороны – разница между новым ПК с тем же функционалом и собранным из деталей двух-трехлетней давности существенна и составляет до 500 %. Таким образом, домашний компьютер для работы становится «золотым». Но не для широкого круга читателей книги, у которых сэкономленные деньги – это заработанные деньги.

То, что сегодня «это наша жизнь» и «рабочие моменты» для специалистов-ремонтников, одновременно является откровением и «секретами» для неподготовленного пользователя персонального компьютера. В книге доступным языком – для непосвященных – описаны приемы восстановления работоспособности ПК, улучшения производительности, рассмотрены часто встречающиеся неисправности ПК и последующие ошибки апргерйда, даются ценные рекомендации практика, которые вы не найдете в Интернете.

Функции LDAP

Учебник РНР
Назад Вперёд

XLIX. Функции LDAP

Введение в LDAP

LDAP это Lightweight Directory Access Protocol - протокол, используемый для доступа к "Directory Servers". Directory это особый вид базы данных, которая содержит информацию как древовидную структуру.

Концепция аналогична структуре директорий жёсткого диска, но в данном контексте root/корневая директория это "The world/Земной шар", а первый уровень поддиректорий это "countries/страны". Ещё ниже идут уровни структуры директорий, содержащие вхождения для companies/компаний, organisations/организаций или мест, а ещё ниже находятся вхождения директорий для people/людей и, возможно, оборудования или документов.

Чтобы обратиться к файлу в поддиректории на жёстком диске, вы вводите что-нибудь вроде

/usr/local/myapp/docs
 

Слэш отделяет каждое подразделение ссылки, а последовательность читается слева направо.

Эквивалентом для полной квалифицированной ссылки на файл в LDAP является "distinguished name/различительное имя", называемое просто "dn". Примером dn может быть:


    cn=John Smith,ou=Accounts,o=My Company,c=US
 

Запятая работает как слэш, а последовательность читается справа налево. Вы можете прочитать это dn как ...


    country = US
    organization = My Company
    organizationalUnit = Accounts
    commonName = John Smith
 

Точно так же, поскольку нет твёрдых правил организации структуры директорий на жёстком диске, directory server manager (менеждер сервера директорий) может настроить любую структуру, необходимую для осуществления поставленных задач. Однако есть некоторые соглашения, которые при этом используются: вы не можете записать код для доступа к серверу директорий, если не знаете его структуру, хотя можете использовать БД без знания того, что доступно.

Полный пример кода

Запрашиваем информацию для всех вхождений, где фамилия начинается с "S", с сервера директорий и отображаем их с именем и email-адресом.

Пример 1. Пример поиска LDAP
<?php
// базовая последовательность в LDAP это: соединиться, связать, найти, интерпретировать
// результат поиска, закрыть соединение

echo "<h3>LDAP query test</h3>";
echo "Connecting ...";
$ds=ldap_connect("localhost");  // обязан быть правильный LDAP-сервер!
echo "connect result is ".$ds."<p>";

if ($ds) { 
    echo "Binding ..."; 
    $r=ldap_bind($ds);     // это "anonymous" связка, обычно с доступом read-only

    echo "Bind result is ".$r."<p>";

    echo "Searching for (sn=S*) ...";
    // Search surname entry
    $sr=ldap_search($ds,"o=My Company, c=US", "sn=S*");  
    echo "Search result is ".$sr."<p>";

    echo "Number of entires returned is ".ldap_count_entries($ds,$sr)."<p>";

    echo "Getting entries ...<p>";
    $info = ldap_get_entries($ds, $sr);
    echo "Data for ".$info["count"]." items returned:<p>";

    for ($i=0; $i<$info["count"]; $i++) {
        echo "dn is: ". $info[$i]["dn"] ."<br>";
        echo "first cn entry is: ". $info[$i]["cn"][0] ."<br>";
        echo "first email entry is: ". $info[$i]["mail"][0] ."<p>";
    }

    echo "Closing connection";
    ldap_close($ds);

} else {
    echo "<h4>Unable to connect to LDAP-сервер</h4>";
}
?>

Использование вызовов PHP LDAP

Вам нужно получить и скомпилировать клиентские библиотеки LDAP из пакета ldap-3.3 University of Michigan или Netscape Directory SDK 3.0. Вам нужно также перекомпилировать PHP с включённой поддержкой LDAP, прежде чем вызовы PHP к LDAP заработают.

Прежде чем начать использование вызовов LDAP, вам необходимо знать:

  • Имя или адрес сервера директорий, который вы будете использовать

  • "base dn" сервера (часть world-директории, которая содержится на этом сервере, которая может быть "o=My Company,c=US")

  • Нужен ли вам пароль для доступа к этому серверу (многие серверы предоставляют доступ для чтения для "anonymous bind", но требуют пароля для других действий)

Типичная последовательность вызова LDAP в вашем приложении будет соответствовать такому патэрну:

ldap_connect()    // установить соединение с сервером
     |
ldap_bind()       // anonymous/анонимный или аутентифицированный "login"
     |
сделать что-нибудь типа поиска или обновления директории
  и вывести результаты
     |
ldap_close()      // "logout"

Дополнительная информация

Большое количество информации о LDAP можно найти на:

Netscape SDK содержит хороший Programmer's Guide в формате .html.

Содержание
ldap_8859_to_t61 - транслирует 8859-символы в t61-символы
ldap_add - добавляет вхождения в LDAP-директорию
ldap_bind - связывает с LDAP-директорией
ldap_close - закрывает ссылку на LDAP-сервер
ldap_compare - сравнивает значение атрибута, найденного во вхождении, специфицированном с помощью DN
ldap_connect - соединяет с LDAP-сервером
ldap_count_entries - подсчитывает количество вхождений при поиске
ldap_delete - удаляет вхождение их директории
ldap_dn2ufn - конвертирует DN в формат User Friendly Naming
ldap_err2str - конвертирует номер ошибки LDAP в строку сообщения об ошибке
ldap_errno - возвращает номер ошибки LDAP последней команды LDAP
ldap_error - возвращает сообщение об ошибке LDAP последней команды LDAP
ldap_explode_dn - делит DN на части-компоненты
ldap_first_attribute - возвращает первый атрибут
ldap_first_entry - возвращает первый результирующий id
ldap_first_reference - возвращает первую ссылку
ldap_free_result - освобождает память результата
ldap_get_attributes - получает атрибуты из вхождения результата поиска
ldap_get_dn - получает DN результирующего вхождения
ldap_get_entries - получает все результирующие вхождения
ldap_get_option - получает текущее значение данной опции
ldap_get_values_len - получает все бинарные значения из результирующего вхождения
ldap_get_values - получает все значения из результирующего вхождения
ldap_list - одноуровневый поиск
ldap_mod_add - добавляет значения атрибутов текущим атрибутам
ldap_mod_del - удаляет значения атрибутов из текущих атрибутов
ldap_mod_replace - заменяет значения атрибутов новыми
ldap_modify - модифицирует LDAP-вхождение
ldap_next_attribute - получает следующий атрибут в результате
ldap_next_entry - получает следующее результирующее вхождение
ldap_next_reference - получает следующую ссылку
ldap_parse_reference - извлекает информацию из вхождения ссылки
ldap_parse_result - извлекает информацию из результата
ldap_read - читает вхождение
ldap_rename - модифицирует имя вхождения
ldap_search - ищет дерево LDAP
ldap_set_option - устанавливает значение данной опции
ldap_set_rebind_proc - устанавливает callback-функцию для выполнения повторных связок при referral chasing
ldap_sort - сортирует результирующие вхождения LDAP
ldap_start_tls - стартует TLS
ldap_t61_to_8859 - транслирует t61-символы в 8859-символы
ldap_unbind - отвязывает от LDAP-директории

Назад Оглавление Вперёд
java_last_exception_get Вверхldap_8859_to_t61