<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>IT science: заметки с тегом php</title>
<link>https://itscience.pro/tags/php/</link>
<description>IT science — статьи и инструкции из мира IT</description>
<author></author>
<language>ru</language>
<generator>Aegea 11.4 (v4171)</generator>

<itunes:subtitle>IT science — статьи и инструкции из мира IT</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit></itunes:explicit>

<item>
<title>массовая регистрация graphisoft id</title>
<guid isPermaLink="false">41</guid>
<link>https://itscience.pro/all/massovaya-registraciya-graphisoft-id/</link>
<pubDate>Fri, 24 Sep 2021 18:45:02 +0300</pubDate>
<author></author>
<comments>https://itscience.pro/all/massovaya-registraciya-graphisoft-id/</comments>
<description>
&lt;p&gt;Встал вопрос получить сотрудникам Graphisoft id, но никакого функционала у производителя нет, чтобы сделать это массово.  Печаль.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://itscience.pro/pictures/izobrazhenie_2021-09-24_184451.png" width="250" height="237" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Итак, проанализировав механизм регистрации и добавления пользователя в состав компании получаем следующий алгоритм:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;регистрация пользователя на сайте graphisoft.com&lt;/li&gt;
&lt;li&gt;подтверждение регистрации в посте пользователя&lt;/li&gt;
&lt;li&gt;авторизация на сайте graphisoft.com под административной учетной записью&lt;/li&gt;
&lt;li&gt;отправка приглашения пользователю&lt;/li&gt;
&lt;li&gt;авторизация  на сайте graphisoft.com под пользовательской учетной записью&lt;/li&gt;
&lt;li&gt;подтверждение приглашения&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;как родилось решение описано тут:&lt;br /&gt;
&lt;a href="https://voronin.one/all/kak-nelzya-otnositsya-k-korporativnym-klientam/"&gt;1 часть, «как нельзя относиться к корпоративным клиентам»&lt;/a&gt;&lt;br /&gt;
&lt;a href="https://voronin.one/all/analiz-poluchenie-ishodnyh-dannyh/"&gt;2 часть, «анализ, получение исходных данных»&lt;/a&gt;&lt;br /&gt;
&lt;a href="https://voronin.one/all/kropotlivaya-rabota-i-dolgozhdanny-uspeh/"&gt;3 часть, «кропотливая работа и долгожданный успех»&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;получилось неплохо, полностью автоматизированная система, работает следующим образом:&lt;br /&gt;
при появлении нового сотрудника создается для него graphisoft id, добавляется в состав компании и на почту высылаются данные с логином и паролем, а так же инструкция по использованию последних;&lt;br /&gt;
после увольнения сотрудника или ухода в декрет — graphisoft id исключается из списка сотрудников компании.&lt;/p&gt;
&lt;p&gt;ниже сам код регистрации одно пользователя, как сделать это массово — я думаю разберетесь&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;&amp;lt;?php

// данные регистрируемого сотрудника
$fname = &amp;#039;Иван&amp;#039;;
$sname = &amp;#039;Петров&amp;#039;;
$email = &amp;#039;user@domain.ru&amp;#039;;
$pasword = &amp;#039;koo0ovo5Kamu&amp;#039;;

// данные администратора компании
$admin_login = &amp;#039;admin@domain.ru&amp;#039;;
$admin_password = &amp;#039;P@5$w0rD&amp;#039;;

$header = &amp;#039;&amp;#039;;

function get_url($url, $method, $ctype, $referer, $data) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
if ($data!==&amp;#039;&amp;#039;) {
if ($ctype == 1) {
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
} else if ($ctype == 2) {
curl_setopt($ch, CURLOPT_POSTFIELDS,http_build_query($data));
} else if ($ctype == 3) {
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE);
curl_setopt($ch, CURLOPT_POSTFIELDS,http_build_query($data));
}
}
curl_setopt($ch, CURLOPT_ENCODING, &amp;#039;gzip, deflate&amp;#039;);
$headers = array();
$headers[] = &amp;#039;Connection: keep-alive&amp;#039;;
$headers[] = &amp;#039;Sec-Ch-Ua: \&amp;quot; Not;A Brand\&amp;quot;;v=\&amp;quot;99\&amp;quot;, \&amp;quot;Opera\&amp;quot;;v=\&amp;quot;79\&amp;quot;, \&amp;quot;Chromium\&amp;quot;;v=\&amp;quot;93\&amp;quot;&amp;#039;;
$headers[] = &amp;#039;Dnt: 1&amp;#039;;
$headers[] = &amp;#039;Sec-Ch-Ua-Mobile: ?0&amp;#039;;
$headers[] = &amp;#039;User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36 OPR/79.0.4143.22&amp;#039;;
if ($ctype == 1) {
$headers[] = &amp;#039;Content-Type: application/json; charset=UTF-8&amp;#039;;
} else {
$headers[] = &amp;#039;Content-Type: application/x-www-form-urlencoded; charset=UTF-8&amp;#039;;
}
$headers[] = &amp;#039;Accept: application/json, text/javascript, */*; q=0.01&amp;#039;;
$headers[] = &amp;#039;X-Requested-With: XMLHttpRequest&amp;#039;;
$headers[] = &amp;#039;Sec-Ch-Ua-Platform: \&amp;quot;Windows\&amp;quot;&amp;#039;;
$headers[] = &amp;#039;Sec-Fetch-Site: same-origin&amp;#039;;
$headers[] = &amp;#039;Sec-Fetch-Mode: cors&amp;#039;;
$headers[] = &amp;#039;Sec-Fetch-Dest: empty&amp;#039;;
$headers[] = &amp;#039;Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7&amp;#039;;
$headers[] = &amp;#039;Origin: &amp;#039;.$referer;
$headers[] = &amp;#039;Referer: &amp;#039;.$referer;
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__).&amp;#039;/cookie.txt&amp;#039;);
curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__).&amp;#039;/cookie.txt&amp;#039;);
$response = curl_exec($ch);
global $header;
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $header_size);
return $response;
if (curl_errno($ch)) {
echo &amp;#039;Error:&amp;#039; . curl_error($ch);
}
curl_close($ch);
}

// удаляем старые куки
if (file_exists(dirname(__FILE__).&amp;#039;/cookie.txt&amp;#039;)) {
   unlink(dirname(__FILE__).&amp;#039;/cookie.txt&amp;#039;);
}
// заходим на главную
get_url(&amp;#039;https://graphisoft.com/ru&amp;#039;,&amp;#039;GET&amp;#039;,1,&amp;#039;&amp;#039;,&amp;#039;&amp;#039;);
// переходим на форму пользователя
get_url(&amp;#039;https://graphisoftid.graphisoft.com/Account/ServiceLogin?Application=GRAPHISOFT&amp;amp;ReturnUrl=https://graphisoft.com/ru&amp;#039;,&amp;#039;GET&amp;#039;,1,&amp;#039;https://graphisoftid.graphisoft.com/&amp;#039;,&amp;#039;&amp;#039;);
// переходим на форму регистрации
get_url(&amp;#039;https://graphisoftid.graphisoft.com/#/register/3/https%3a%2f%2fgraphisoft.com%2fru&amp;#039;,&amp;#039;GET&amp;#039;,1,&amp;#039;https://graphisoftid.graphisoft.com/&amp;#039;,&amp;#039;&amp;#039;);

//проверяем e-mail
$check_mail = get_url(&amp;#039;https://graphisoftid.graphisoft.com/api/user/CheckEmail/&amp;#039;,&amp;#039;PUT&amp;#039;,2,&amp;#039;https://graphisoftid.graphisoft.com/&amp;#039;,array(&amp;quot;EmailAddress&amp;quot; =&amp;gt; $email));
if ($check_mail == &amp;#039;true&amp;#039;) {
$data = array(&amp;#039;applicationName&amp;#039; =&amp;gt; null,
  &amp;#039;customDataObject&amp;#039; =&amp;gt; null,
  &amp;#039;redirectUrl&amp;#039; =&amp;gt; null,
  &amp;#039;emailHintLocalizationKey&amp;#039; =&amp;gt; null,
  &amp;#039;firstName&amp;#039; =&amp;gt; $fname,
  &amp;#039;lastName&amp;#039; =&amp;gt; $sname,
  &amp;#039;isValidated&amp;#039; =&amp;gt; true,
  &amp;#039;email&amp;#039; =&amp;gt; $email,
  &amp;#039;password&amp;#039; =&amp;gt; $pasword,
  &amp;#039;confirmPassword&amp;#039; =&amp;gt; $pasword,
  &amp;#039;isPrivacyPolicyAccepted&amp;#039; =&amp;gt; true,
  &amp;#039;companyName&amp;#039; =&amp;gt; &amp;#039;ООО &amp;quot;Рога и Копыта&amp;quot;&amp;#039;,
  &amp;#039;countryId&amp;#039; =&amp;gt; 186,
  &amp;#039;federated&amp;#039; =&amp;gt; false,
  &amp;#039;callbackUrl&amp;#039; =&amp;gt; &amp;#039;https://graphisoft.com/ru&amp;#039;,
  &amp;#039;isDirty&amp;#039; =&amp;gt; true,
  &amp;#039;errors&amp;#039; =&amp;gt; array());

//echo json_encode($data).&amp;quot;\n&amp;quot;;

$ecoded_json = get_url(&amp;#039;https://graphisoftid.graphisoft.com/api/user/CreateUser&amp;#039;,&amp;#039;POST&amp;#039;,1,&amp;#039;https://graphisoftid.graphisoft.com/&amp;#039;,$data);

$jsonObj = json_decode($ecoded_json);

if ($jsonObj === null &amp;amp;&amp;amp; json_last_error() !== JSON_ERROR_NONE) {
   echo &amp;quot;у меня не получилось отправить регистрационную форму с данными...  извините\n&amp;quot;;
} else {
// удаляем старые куки
unlink(dirname(__FILE__).&amp;#039;/cookie.txt&amp;#039;);
get_url($jsonObj-&amp;gt;{&amp;#039;VerificationURL&amp;#039;}.$jsonObj-&amp;gt;{&amp;#039;VerificationCode&amp;#039;},&amp;#039;GET&amp;#039;,1,&amp;#039;&amp;#039;,&amp;#039;&amp;#039;);
$gsid_url = get_url(&amp;#039;https://graphisoftid.graphisoft.com/api/user/VerifyUser&amp;#039;,&amp;#039;PUT&amp;#039;,2,&amp;#039;https://graphisoftid.graphisoft.com/&amp;#039;,array(&amp;quot;code&amp;quot; =&amp;gt; $jsonObj-&amp;gt;{&amp;#039;VerificationCode&amp;#039;}));
$parts = parse_url($gsid_url);
parse_str($parts[&amp;#039;query&amp;#039;], $query);
$user_gsid = $query[&amp;#039;gsid&amp;#039;];
if ($user_gsid !== &amp;#039;&amp;#039;) {
echo &amp;quot;пользователь &amp;quot;.$email.&amp;quot; успешно зарегистрирован (Graphisoft sid: &amp;quot;.$user_gsid.&amp;quot;)\n&amp;quot;;
// удаляем старые куки
unlink(dirname(__FILE__).&amp;#039;/cookie.txt&amp;#039;);
// заходим на главную
get_url(&amp;#039;https://graphisoft.com/ru&amp;#039;,&amp;#039;GET&amp;#039;,1,&amp;#039;&amp;#039;,&amp;#039;&amp;#039;);
get_url(&amp;#039;https://graphisoftid.graphisoft.com/&amp;#039;,&amp;#039;GET&amp;#039;,1,&amp;#039;&amp;#039;,&amp;#039;&amp;#039;);
// авторизуемся под пользователем
$data = array(&amp;#039;email&amp;#039; =&amp;gt; $admin_login,
  &amp;#039;errors&amp;#039; =&amp;gt; array(),
  &amp;#039;isDirty&amp;#039; =&amp;gt; true,
  &amp;#039;isNullo&amp;#039; =&amp;gt; false,
  &amp;#039;password&amp;#039; =&amp;gt; $admin_password);
$json_response = get_url(&amp;#039;https://graphisoftid.graphisoft.com/api/Authenticate/Login&amp;#039;,&amp;#039;POST&amp;#039;,1,&amp;#039;https://graphisoftid.graphisoft.com/&amp;#039;,$data);
$obj = json_decode($json_response);
$companyGsId = $obj-&amp;gt;{&amp;#039;Company&amp;#039;}-&amp;gt;{&amp;#039;GsId&amp;#039;};
// Загружаем список подключенных пользователей
foreach ($obj-&amp;gt;{&amp;#039;Company&amp;#039;}-&amp;gt;{&amp;#039;CompanyUsers&amp;#039;} as $user) {
$users_list[] = array(&amp;quot;FirstName&amp;quot; =&amp;gt; $user-&amp;gt;{&amp;#039;FirstName&amp;#039;},&amp;quot;LastName&amp;quot; =&amp;gt; $user-&amp;gt;{&amp;#039;LastName&amp;#039;},&amp;quot;EmailAddress&amp;quot; =&amp;gt; $user-&amp;gt;{&amp;#039;EmailAddress&amp;#039;},&amp;quot;GsId&amp;quot; =&amp;gt; $user-&amp;gt;{&amp;#039;GsId&amp;#039;});
}


$data = array(&amp;#039;companyGsId&amp;#039; =&amp;gt; $companyGsId,
  &amp;#039;email&amp;#039; =&amp;gt; $email,
  &amp;#039;errors&amp;#039; =&amp;gt; array(),
  &amp;#039;isDirty&amp;#039; =&amp;gt; true,
  &amp;#039;requestedGraphisoftUserId&amp;#039; =&amp;gt; $user_gsid);
get_url(&amp;#039;https://graphisoftid.graphisoft.com/api/user/SendInvitation&amp;#039;,&amp;#039;PUT&amp;#039;,2,&amp;#039;https://graphisoftid.graphisoft.com/&amp;#039;,$data);
echo &amp;quot;выслано приглашение присоединиться к компании\n&amp;quot;;
// удаляем старые куки
unlink(dirname(__FILE__).&amp;#039;/cookie.txt&amp;#039;);
// переходим на форму пользователя
get_url(&amp;#039;https://graphisoftid.graphisoft.com/&amp;#039;,&amp;#039;GET&amp;#039;,1,&amp;#039;&amp;#039;,&amp;#039;&amp;#039;);
// авторизуемся под пользователем
$data = array(&amp;#039;email&amp;#039; =&amp;gt; $email,
  &amp;#039;errors&amp;#039; =&amp;gt; array(),
  &amp;#039;isDirty&amp;#039; =&amp;gt; true,
  &amp;#039;isNullo&amp;#039; =&amp;gt; false,
  &amp;#039;password&amp;#039; =&amp;gt; $pasword);
$json_response = get_url(&amp;#039;https://graphisoftid.graphisoft.com/api/Authenticate/Login&amp;#039;,&amp;#039;POST&amp;#039;,1,&amp;#039;https://graphisoftid.graphisoft.com/&amp;#039;,$data);
$obj = json_decode($json_response);
$user_gsid = $obj-&amp;gt;{&amp;#039;GraphisoftUser&amp;#039;}-&amp;gt;{&amp;#039;GsId&amp;#039;};
if ($user_gsid == &amp;#039;&amp;#039;) {
echo &amp;quot;не смог зайти под пользователем в личный кабинет\n&amp;quot;;
} else {
$data = array(&amp;#039;actionId&amp;#039; =&amp;gt; 2,
  &amp;#039;companyGsId&amp;#039; =&amp;gt; $companyGsId,
  &amp;#039;graphisoftUserGsId&amp;#039; =&amp;gt; $user_gsid,
  &amp;#039;reactionId&amp;#039; =&amp;gt; 1);
get_url(&amp;#039;https://graphisoftid.graphisoft.com/api/user/ProcessingPendingRequest&amp;#039;,&amp;#039;PUT&amp;#039;,1,&amp;#039;https://graphisoftid.graphisoft.com/&amp;#039;,$data);
echo &amp;quot;сотрудник подтвердил приглашение\n&amp;quot;;
}
} else {
echo &amp;quot;у меня не получилось подтвердить регистрацию...  извините\n&amp;quot;;
}
}
} else {
echo &amp;quot;$email уже зарегистрирован в системе\n&amp;quot;;
}
// удаляем старые куки
unlink(dirname(__FILE__).&amp;#039;/cookie.txt&amp;#039;);
?&amp;gt;&lt;/code&gt;&lt;/pre&gt;</description>
</item>

<item>
<title>скрипт php, возвращает SID пользователя по sAMAccountName</title>
<guid isPermaLink="false">2</guid>
<link>https://itscience.pro/all/skript-php-vozvraschaet-sid-polzovatelya-po-samaccountname/</link>
<pubDate>Wed, 03 Apr 2019 11:28:13 +0300</pubDate>
<author></author>
<comments>https://itscience.pro/all/skript-php-vozvraschaet-sid-polzovatelya-po-samaccountname/</comments>
<description>
&lt;p&gt;Очередная часть глобального проекта по смене домена в корпорации, по сути переезд из домена ActiveDirectory в домен Samba4.&lt;/p&gt;
&lt;p&gt;Сегодня мы публикуем вспомогательный скрипт, который возвращает SID пользователя используя sAMAccountName. Написан скрипт на php, состоит из двух частей — конфига и самого скрипта. Нам потребуются эти данные для миграции профилей пользователей на локальных машинах., но не будем забегать вперед.&lt;/p&gt;
&lt;p&gt;конфиг вынесен в отдельный файл, т. к. будет использоваться в других утилитах&lt;/p&gt;
&lt;p&gt;&lt;b&gt;config.php&lt;/b&gt;&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;&amp;lt;?php
  define(&amp;#039;SOURCE_AD_SERVER&amp;#039;, &amp;#039;old_domain.loc&amp;#039;);
  define(&amp;#039;SOURCE_AD_USER&amp;#039;, &amp;#039;user_name&amp;#039;);
  define(&amp;#039;SOURCE_AD_PASSWORD&amp;#039;, &amp;#039;secret_password&amp;#039;);
  
  define(&amp;#039;TARGET_AD_SERVER&amp;#039;, &amp;#039;new_domain.loc&amp;#039;);
  define(&amp;#039;TARGET_AD_USER&amp;#039;, &amp;#039;user_name&amp;#039;);
  define(&amp;#039;TARGET_AD_PASSWORD&amp;#039;, &amp;#039;secret_password&amp;#039;);
?&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;настроек минимум, указаны старый и новый домен, логины и пароли пользователей у которых есть права читать LDAP атрибуты, по сути рядовые пользователи домена.&lt;/p&gt;
&lt;p&gt;Мы будем подключаться к корню одного или другого домена, поэтому озаботьтесь, чтобы ваш DNS разрешал оба домена, т. е. ’old_domain.loc’ и ’new_domain.loc’ должны одновременно пинговаться на нашем сервере.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;get_data.php&lt;/b&gt;&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;&amp;lt;?php

include(&amp;quot;config.php&amp;quot;);

function SIDtoString($ADsid)
{
   $sid = &amp;quot;S-&amp;quot;;
   //$ADguid = $info[0][&amp;#039;objectguid&amp;#039;][0];
   $sidinhex = str_split(bin2hex($ADsid), 2);
   // Byte 0 = Revision Level
   $sid = $sid.hexdec($sidinhex[0]).&amp;quot;-&amp;quot;;
   // Byte 1-7 = 48 Bit Authority
   $sid = $sid.hexdec($sidinhex[6].$sidinhex[5].$sidinhex[4].$sidinhex[3].$sidinhex[2].$sidinhex[1]);
   // Byte 8 count of sub authorities - Get number of sub-authorities
   $subauths = hexdec($sidinhex[7]);
   //Loop through Sub Authorities
   for($i = 0; $i &amp;lt; $subauths; $i++) {
      $start = 8 + (4 * $i);
      // X amount of 32Bit (4 Byte) Sub Authorities
      $sid = $sid.&amp;quot;-&amp;quot;.hexdec($sidinhex[$start+3].$sidinhex[$start+2].$sidinhex[$start+1].$sidinhex[$start]);
   }
   return $sid;
}

if ((($_REQUEST[&amp;#039;action&amp;#039;] == &amp;#039;get_sid&amp;#039;) or ($_REQUEST[&amp;#039;action&amp;#039;] == &amp;#039;get_bin_sid&amp;#039;)) and ($_REQUEST[&amp;#039;domain&amp;#039;] != &amp;#039;&amp;#039;) and ($_REQUEST[&amp;#039;samaccountname&amp;#039;] != &amp;#039;&amp;#039;))
{
    if ($_REQUEST[&amp;#039;domain&amp;#039;] == &amp;#039;new&amp;#039;) {
        $ldap_server = TARGET_AD_SERVER;
        $ldap_user = TARGET_AD_USER;
        $ldap_password = TARGET_AD_PASSWORD;
    } elseif ($_REQUEST[&amp;#039;domain&amp;#039;] == &amp;#039;old&amp;#039;) {
        $ldap_server = SOURCE_AD_SERVER;
        $ldap_user = SOURCE_AD_USER;
        $ldap_password = SOURCE_AD_PASSWORD;
    }
    $ldapconn = ldap_connect($ldap_server) or die(&amp;quot;Could not connect to LDAP server.&amp;quot;); 
    if($ldapconn) {
        ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3) or die (&amp;quot;Could not set ldap protocol&amp;quot;);
        ldap_set_option($ldapconn, LDAP_OPT_REFERRALS, 0); 
        ldap_set_option($ldapconn, LDAP_OPT_SIZELIMIT, 10000);
        $source_ldapbind = ldap_bind($ldapconn, $ldap_user.&amp;quot;@&amp;quot;.$ldap_server, $ldap_password) or die (&amp;quot;Error trying to bind: &amp;quot;.ldap_error($ldapconn));
        
        $tree_pieces = explode(&amp;quot;.&amp;quot;, $ldap_server);
        $ldaptree = &amp;quot;DC=&amp;quot;.$tree_pieces[0].&amp;quot;,DC=&amp;quot;.$tree_pieces[1];
      
        $attributes = array(&amp;quot;cn&amp;quot;, &amp;quot;samaccountname&amp;quot;, &amp;quot;objectsid&amp;quot;);
       
        $query = &amp;quot;(samaccountname=&amp;quot;.$_REQUEST[&amp;#039;samaccountname&amp;#039;].&amp;quot;)&amp;quot;;
        
        $result = ldap_search($ldapconn,$ldaptree, $query, $attributes) or die (&amp;quot;Error in search query: &amp;quot;.ldap_error($ldapconn));
     $data = ldap_get_entries($ldapconn, $result);
        
        for ($i=0; $i&amp;lt;$data[&amp;quot;count&amp;quot;]; $i++) {
           if ($_REQUEST[&amp;#039;action&amp;#039;] == &amp;#039;get_sid&amp;#039;) {
            echo SIDtoString($data[$i][&amp;quot;objectsid&amp;quot;][0]);
            //echo $i.&amp;#039;. - &amp;#039;.$data[$i][&amp;quot;cn&amp;quot;][0].&amp;quot;&amp;lt;/br&amp;gt;&amp;quot;;
           }
           elseif ($_REQUEST[&amp;#039;action&amp;#039;] == &amp;#039;get_bin_sid&amp;#039;) {
            echo wordwrap(bin2hex($data[$i][&amp;quot;objectsid&amp;quot;][0]), 2, &amp;#039;,&amp;#039;, true);
           }
        }

        ldap_close($ldapconn);
    }
} else {
    echo &amp;#039;off&amp;#039;;
}
?&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;функция SIDtoString заимствована из интернета, остальное критикуйте =)&lt;/p&gt;
&lt;p&gt;работает следующим образом:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://ip_server/get_data.php?action=get_sid&amp;domain=new&amp;samaccountname=user_login"&gt;http://ip_server/get_data.php?action=get_sid&amp;domain=new&amp;samaccountname=user_login&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;возвращает SID в виде строки, параметр «domain» может принимать значения «new» и «old»&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;S-1-5-21-2225672442-1781935378-3171287829-1104&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://ip_server/get_data.php?action=get_bin_sid&amp;domain=new&amp;samaccountname=user_login"&gt;http://ip_server/get_data.php?action=get_bin_sid&amp;domain=new&amp;samaccountname=user_login&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;возвращает SID в виде hex строки (потребуется для добавления в реестр)&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;01,05,00,00,00,00,00,05,15,00,00,00,f6,4b,a9,84,8e,0d,2f,6a,25,71,0f,bd,a2,04,00,00&lt;/p&gt;
&lt;/blockquote&gt;
</description>
</item>


</channel>
</rss>