Соберите TagLib# DLL из исходного кода и сделайте его видимым для PHP
Здравствуйте, я хочу сканировать аудио-видео файлы и сохранять их метаданные в базе данных, используя php. Я нашел эту оболочку командной строки, которая использует TagLib.dll, скомпилированную разработчиками Banshee для выполнения этой работы. Работает нормально, но ограничено реализованными функциями. Я хочу получить доступ напрямую к методам DLL через PHP.
В PHP у нас есть функция ( DOTNET), которая позволяет мне создавать экземпляр класса из сборки.Net, вызывать его методы и обращаться к его свойствам следующим образом:
/*$obj = new DOTNET("assembly", "classname");*/
$stack = new DOTNET("mscorlib", "System.Collections.Stack");
$stack->Push(".Net");
$stack->Push("Hello ");
echo $stack->Pop() . $stack->Pop();
//Returns string(10) "Hello .Net";
Вот исходники проекта Taglib# в github
Я видел много вопросов, связанных с PHP-DLL-COM и есть несколько рекомендаций:
- Сделайте dll доступным;
- Зарегистрируйте dll с
regsvr32
; - Используйте файл определения модуля, похожий на
;
;
DESCRIPTION "Simple COM object"
EXPORTS
DllGetClassObject PRIVATE
DllCanUnloadNow PRIVATE
DllRegisterServer PRIVATE
DllUnregisterServer PRIVATE
У меня вопрос: как я могу собрать DLL и использовать ее метод через PHP?
Мой конфиг:
Операционные системы
Windows Server 2012 R2 Standard Edition i586
Apache:
Apache / 2.2.21 (Win32) DAV / 2 PHP / 5.4.42 mod_ssl / 2.2.21 OpenSSL / 0.9.8r
PHP
Версия PHP: 5.4.42
Арка: x86
Компилятор: MSVC9 (Visual C++ 2008)
Поддержка COM: включена
Поддержка DCOM: отключена
Поддержка.Net включенаMicrosoft Visual Studio 2013
2 ответа
Попробуйте следующие шаги:
- Загрузите исходный код taglib с github
- Удалите тег ApplicationIcon из файла.csproj и откройте.sln в Visual Studio
- Выгрузите тестовый проект (вам не нужно его строить)
- Щелкните правой кнопкой мыши проект taglib-sharp -> Свойства -> Сборка -> Включить 'Регистрация для взаимодействия COM'. Также очистите текстовое поле условных символов компиляции, чтобы вам не пришлось сейчас загружать SharpZipLib.
- Наблюдайте № 1: в свойствах проекта -> Приложение -> Информация о сборке -> Проверено "Сделать сборку видимой".
- Заметьте #2: в свойствах проекта -> Приложение -> целевой фреймворк установлен на 3,5 (убедитесь, что вы оставили его таким)
- Построить проект (F6)
- Прочитайте содержимое окна вывода, чтобы увидеть некоторые предупреждения
Теперь, когда у вас есть src\taglib-sharp.dll, вам нужно зарегистрировать его в глобальном кэше сборок, чтобы класс DOTNET нашел его. Смотрите PHP DOTNET ад для деталей, если вы не знакомы с этим.
Если все хорошо, вы можете получить копию SharpZipLib и повторно ввести символ условной компиляции HAVE_SHARPZIPLIB -> rebuild -> redeploy to GAC -> и быть счастливым человеком!:)
Вы можете скомпилировать свою DLL с помощью.NET Framework 3.5, если нет, PHP не сможет загрузить ее через класс DOTNET.