Пакетный менеджер для PHP, работающий прямо из приложения. Есть такое?
Продолжая тему ухода от велосипедостроения.
Интересует вариант использования какого-нибудь стандартного пакетного менеджера, вызываемого прямо из работающего PHP-приложения.
Чтобы, скажем, распаковал своё приложение (или прямо сразу curl http://site.tld | gunzip ... ), опционально запустил встроенный web-сервер, зашёл браузером — и в админке тыкаешься в модули для установки. Которые, в свою очередь, ставятся не велосипедом, а с нормального пакетного менеджера.
На ум сразу приходит exec("php composer.phar"), но это коряво и не красиво. Вот если бы у composer был API…
Не сталкивался ли кто-нибудь с более изящным решением? Нет ли у кого идей на эту тему? А то, таки, придётся делать через exec/composer.
Так он есть! Как по вашему исполняются скрипты до/после/во время и тд установки? getcomposer.org/doc/articles/scripts.md
Композер дает полный доступ к самому себе и консоли. github.com/hell0w0rd/skeleton-project/blob/v1.0/Installer.php — вот вчера намудрил скриптик для создания каркаса приложения, не идеально, но может вам служить отправной точкой)
PS Если вы про установку не из консоли — там тоже ничего сложного, просто в доках вроде не описано.
Хм. Интересно. Но навскидку не понял, оно ли мне нужно. Я вижу вызов из Composer моих процедур. Пусть и с обращением к его данным.
Меня же интересует обратное, вызов методов Composer, аналогичных его консольным командам (install/update/etc) из своего приложения. Консольное или Web — тут, действительно, не важное. Web я привёл как вариант, более оторванный от консоли :)
…
Но направление понятно, попробую покопать в сторону методов Composer, может так и есть работа с репозиторием.
…
Кстати, попутный вопрос. Я у Composer так и не нашёл варианта простой установки пакета с нуля без ручного написания composer.json. Казалось бы, что-то типа параметра для install, в духе «composer install vendor/package» — и чтобы сам поставил в текущий каталог простой composer.json со всеми зависимостями и установил что нужно. Есть только composer create-project или compiser init, но это совсем не то.
Я этот момент упустил или он и вправду так пока не умеет?
Композер тесно связан, но не захаркоден в консольные методы и даже не привязан к json.
Есть интерфейс для конфига и интерфейс для IO — можно создать свои классы, и хранить инфу по пакетам в базе, а вывод в ответ на запросы сервера.
По поводу добавления пакетов composer init composer require some/thing:v1.0
…
PROFIT!