asp.net — Запуск функции в DLL (.net) в Ничто, кажется, не работает

Хорошо, я рассмотрел почти каждый вопрос, руководство по PHP и опубликовал эту проблему по всему Интернету. Кажется, ничто не поможет.

Я работаю над проектом, который требует от меня аутентификации (или, по крайней мере, возможности поиска UID) различных пользователей в моей организации в Active Directory. Для подключения и проверки подлинности они предоставили мне файл dll, в котором есть функции, необходимые для проверки подлинности. Мне нужно использовать этот DLL-файл и функции, чтобы заставить мое приложение работать.

Ниже приведены различные вещи, которые я пробовал до сих пор, а также ошибки для каждого из них.

  1. использование дл () загрузить DLL.

Я пытался с помощью

dl('filename.dll');

и получил ошибку

Call to undefined function dl() in C:\xampp\htdocs\OOP_curater\index.php on line 16

Осмотревшись, я наткнулся этот а также этот Я понял, что больше не поддерживается.

Затем я попытался поместить dll в C: \ xampp \ php \ ext и добавить строку расширения в php.ini. (Просто так) перезапуск php дал мне сообщение об ошибке, в котором говорилось, что это недопустимое расширение PHP.

  1. Пробовал с помощью COM ()

Затем я попытался с помощью

$action = new COM("ProjectName.FunctionName") or die ("Could not initialise MS Word object.");

и получил следующую ошибку

Fatal error: Uncaught exception 'com_exception' with message 'Failed to create COM object `ProjectName.FunctionName': Invalid syntax ' in C:\xampp\htdocs\OOP_curater\index.php:3 Stack trace: #0 C:\xampp\htdocs\OOP_curater\index.php(3): com->com('FBA_Provider1.a...') #1 {main} thrown in C:\xampp\htdocs\OOP_curater\index.php on line 3

Оглядевшись, я получил ссылки, похожие на этот. Я понял, что мне нужно зарегистрировать DLL, так что попробовал

regsvr32 C:\xampp\htdocs\OOP_curater\filename.dll

и получил ошибку

DllRegisterServer entry point was not found

Я тогда попробовал

regsvr32 /i /n C:\xampp\htdocs\OOP_curater\filename.dll

и получил ошибку «Установка DLL не найдена».

Я должен признать, я все еще не уверен, правильно ли я понял часть (Projectname.FunctionName), я действительно не мог понять большую часть документации по этой теме.

  1. Пробовал с помощью Dotnet ()

Затем я попробовал следующий код

$comobj = new DOTNET("projectname", "projectname.function");

и получил эту ошибку

Fatal error: Uncaught exception 'com_exception' with message 'Failed to instantiate .Net object [CreateInstance] [0x80070002] The system cannot find the file specified. ' in C:\xampp\htdocs\OOP_curater\index.php:21 Stack trace: #0 C:\xampp\htdocs\OOP_curater\index.php(21): dotnet->dotnet('ProjectName', 'Function') #1 {main} thrown in C:\xampp\htdocs\OOP_curater\index.php on line 21

Теперь у меня есть следующие вопросы относительно загрузки DLL для PHP

Каков наилучший способ загрузить DLL, где:

а. Это не совсем функция PHP

б. Источник недоступен

с. Это не может быть зарегистрировано (при условии, что из-за ошибок выше)

д. Он не может быть перекомпилирован для расширения / регистрации PHP

Несколько вещей на заметку

  1. В настоящее время установка находится на XXAMP для разработки и тестирования.
  2. У меня нет прав администратора, но я могу организовать это при необходимости.
  3. Производственная среда будет на сервере под управлением IIS.

У меня очень мало знаний о .net и Active Directory, поэтому я нахожу это еще сложнее. Также учитывая длину вопроса, надеюсь, я не упустил ничего важного. Дайте мне знать, если вам нужно больше информации.

РЕДАКТИРОВАТЬ

Я был в состоянии декомпилировать DLL с помощью рефлектор, и теперь иметь исходный код и доступ к Microsoft Visual Studio для приложений 2.0. Если вам нужно, чтобы я внес изменения в саму DLL.

Также я попытался собрать его с опцией «make visible to com», но все еще получал ту же ошибку с regsvr 32 и regasm.

4

Решение

Исходя из вашего описания ваших требований, я не уверен, что вы поступите правильно. Я подозреваю, что вы сбились с пути, когда «они» предоставили вам файл DLL, как будто вы создаете приложение для настольного компьютера (или ASP.NET?).

Насколько я понимаю, вам просто нужно аутентифицировать пользователей вашего PHP-приложения через Active Directory (предположительно, чтобы разрешить проверку авторизации в вашем приложении). С IIS это стандартная функция и ее легко активировать. Увидеть мой ответ на другой вопрос здесь так о том, как это сделать.

Если вам нужно выполнить какие-либо запросы к AD (например, получить UID пользователя, электронную почту и т. Д.), Вы можете использовать встроенный Функции LDAP.

Быстрый и грязный пример:

$server ='ldaps://server_hostname'; // could also use 'ldap://' for non-encrypted connection.
$username = 'username'; // should be a restricted 'service account' to be used only by this app.
$password = '';
$base_dn = '';
$search_filter = 'cn=' . $_SERVER['AUTH_USER']; // search based on username provided by IIS single-sign on.
$attributes = ['mail', 'sn', 'cn']; // array of fields you want AD to provide.

$ldap = ldap_connect($server);
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3); // generally needed with AD.
ldap_bind($ldap, $username, $password);
$search = ldap_search($ldap, $base_dn, $search_filter, $attributes);
$data = ldap_get_entries($ldap, $search);

Если совпадение найдено $data будет массив указанных атрибутов.

0

Другие решения

Это не дает прямого ответа на поставленный вопрос, но решает вашу проблему.

Использовать adLDAP (http://adldap.sourceforge.net/) в PHP это все для вас. Вам не нужна внешняя DLL или ваша собственная.

Образец:

    $adldap = new adLDAP();
$aUserInfo = getLDAPUserInfo($adldap, $username);
if ($aUserInfo) {
if (strlen($aUserInfo['mail']) > 0) {
$email = $aUserInfo['mail'];
if ($email) {
$userRow['email'] = $email;
}
}
}

или же

$adldap = new adLDAP();
$authUser = $adldap->user()->authenticate($username, $password);
if ($authUser == true) {
if ($adldap->user()->inGroup($username,'ServerAdmins')) {
// This user is in server admins
}
}
1

Запустите командную строку от имени администратора и попробуйте зарегистрировать свою DLL в Windows.

Выполните следующие шаги:

  1. Запустите CMD от имени администратора
  2. Запустите команду: cd C: \ xampp \ htdocs \ OOP_curater \ (выберите путь к DLL)
  3. Выполнить команду: regsvr32 filename.dll

Я надеюсь, что это может решить вашу проблему.

0