Установщик PHP-скриптов
20.10.2009 технологии
Я задумался про максимально простой для пользователя установщик ещё в конце августа, и тогда в поисках наткнулся на заметку от SEOкодера. Он задумался о том же ещё в апреле 2009 года, но пока результатов не вижу.
Суть идеи
Весь установщик должен состоять из всего одного PHP-файла, в который уже будут встроены различные проверки и сам архив для распаковки.
Альтернативный вариант: install.php может быть вообще гиперминималистичным файлом (пользователю его удобно мгновенно скачать), который будет просто этаким прокси на сервер разработчика, с него install.php и будет получать инструкции. Точно также можно делать обновления скриптов.
Реализация
Я сейчас делаю подобный установщик для Daos, но чтобы не изобретать лишний раз велосипед, анализирую доступные решения. Что удалось найти?
- jijawi.org — перспективно, но, кажется, заброшено. Вот примерно так я себе это и представлял. Но, нет документации, всё довольно запутанно. Я решил, что рискованно тратить время на попытки понять, как это всё устроено. Быстрее сделать самому.
- Несколько PHP-классов разной свежести с phpclasses.org: один, второй, третий, есть и другие. Буду пробовать, это наверно самое быстрое решение проблемы.
- CMS Irokez использует подобный метод установки. К сожалению, именно про установку также нет никакой документации. Но интересно было бы узнать про другие проекты, использующие один install.php. Пишите в комментариях.
Давайте обсудим это. Особенно интересен ваш опыт, а также ссылки на PHP-классы и приложения, использующие однофайловый способ установки. Если вам неудобно общаться в комментариях к этой заметке, пишите на SE-форуме или у хохлов.
И ещё вопрос: как вы думаете, почему эта простая идея так редко используется? Почему чаще всего все идут по накатанной, используя стереотипные и даже насквозь шаблонные решения, не задумываясь ни о чём?
P.S. Объясните мне, как работает halt_compiler в PHP?
Комментарии
Комментирование этой статьи закрыто.
Там же написано как работает и пример есть. Прерывает процесс компиляции, а ещё образуется магическая константа COMPILER_HALT_OFFSET которая указывает на смещение в файле после __halt_compiler().
Один файл – хорошо когда у тебя исходников мало, или апдейты раз в год как у закладочника :))
На хабре про такой инсталлятор есть топик
Говнотекстиль подумал что я тут украшательствами занимаюсь :) Там два подчеркивания перед именем константы.
И если выбирать между однофайловой или многофайловой установкой, то выберу второе. Не люблю ковыряться с правами когда владелец не я, а апач.
Я пользуюсь для этих целей capistrano.
Изначально сделанный для деплоя rails он вполне неплохо справляется с PHP выгрузкой… заодно и код хранящийся в репозитории можно откатить
phpclasses.org – вобще кстати кайфовый сайт, не понимаю, почему его так редко упоминают не понимаю…
«И ещё вопрос: как вы думаете, почему эта простая идея так редко используется?»
Что касается в использовании такого метода в платных скриптах, может я и не прав, но тут еще чисто психологический момент есть. Когда ты платишь деньги за скрипт, то хочешь получить скрипт, а не один install.php который будет что-то откуда-то закачивать. Потому что как-то не хочется зависить от доступности серверов разработчиков и т.д. А так ты купил и оно вот – лежит в архиве :) Хотя на порядок менее удобно.
Che, я видел этот топик на «Хабре», даже ссылки на него дал на форумах, ты просто не посмотрел. Ссылку на этот топик оставлял сам автор скрипта в комментах у SEOкодера. Только там не такой инсталятор, там архив и PHP-файл отдельно. Ты наверно выбрал бы многофайловую установку, понимаю, но ты не обычный пользователь. Ты гик и разработчик, поэтому мозги у тебя повёртнуты в соответсвующую сторону.
UserAd, знакомое какое-то название. Посмотрю.
Wareza, думаю, это прежде всего стереотип. У тебя и так дистрибутив будет лежать на сервере, просто либо ты скачиваешь кучу файлов в архиве, потом закачиваешь архив на сервер, потом распаковываешь и запускаешь процесс установки; либо просто скачиваешь один файлик, заливаешь и запускаешь. Зачем гонять лишние файлы? Так проще и удобней.
В некоторых случаях можно вообще по FTP устанавливать напрямую с сервера разработчика на сервер пользователя.
Конечно разработчик, меня интересует безопасность такого решения и сложность обновлений.
А как пользователя меня вообще не интересует как там внутри, я в обоих случаях буду видеть одну установочную страницу.
Удобно конечно. Но хз, приживётся ли, да и получится ли сделать действительно универсальный установщик.
ПХП по разному стоит, права разные, ещё что-то…
На счёт безопасности кстати :) Нужно будет очень серьёзно подойти к вопросу.
Потому что будут все тянуть с сервака дистрибутив платного софта по кускам :)
Один раз в жизни устанавливал пёрловскую прокси на хост. Так там на сайте разработчика нужно было указать тупо логин и пас и папку до домена. Там он уже сам находит компилятор, всё закачивает и настраивает. Я чуть не кончил, когда смотрел как он работает. В конце дал ссылку на уже установленный скрипт
В августе я тоже задумывался над этим приминительно к Zebrum Bloglike .
Даже каркас системы написал с блекджеком и модульностью :) Но потом прикинул, как обстоят дела и решил, что пока не актуально.
Если хочешь, могу исходник на почту кинуть.
Сhe, а что не так с безопасностью и какие сложности с обновлением?
Alek$, а почему не актуально, что на самом деле тебя остановило?
Кстати, тоже давно писал свой установщик, тогда ещё не везде и пхп4 стояло :) Часто программистам охота написать свой форум/скрипт и прочее с чем часто сталкиваются.
При установке апачем, любая минимально возможная дырка с закачкой файлов становится критической. Как в плагине к WP,когда можно было закачивать любые файлы на сервер, закачиваешь пхп и открываешь в браузере, он соответственно исполняется.
Обновление. Ну я хз как ты планируешь делать фикс одного файла, например.
Да и вообще, часто разработчики бесплатных/opensource скриптов зарабатывают на установке, допиливании их под нужды покупателя. Это к слову почему идея редко используется :) И многие покупатели, могут заплатить 5-10 баксов кому-нибудь с фриланса за установку.
Заработок на установке — отвратительная политика, на мой взгляд. Вернее, поддержка и всё такое, нормально, конечно, и даже хорошо… но если продукт специально создаётся сложным для этого — разработчики мудаки.
То же про урезание функционала сервисов, когда доплата только за включение фишки, которая на самом деле не требует никаких лополнительных ресурсов. Впрочем, про своё отношение к этому я уже писал в заметке про всякие Летитбиты-рапидшары :)
А с потенциальными уязвимостями я опять же не понимаю, почему именно при инсталяции это опасно. Куча CMS позволяет заливать файлы, там такие же проблемы.
Думаю мало кто специально сложным создаёт :) Просто если продукт становится популярным, то времени на доведения до совершенства функционала который используется один_раз нет, разве что при разработке новой версии. Гораздо выгоднее и разработчику и пользователям если это время будет потрачено на основной, ежедневный, функционал. Причем это настолько поток пожеланий большой, что нам порой аутсорсили проекты (скрипты) на допиливание без взымания процентов своих, лишь бы покупатель конкретный был доволен.
Тебя заклинило на SMS :) CMS позволяют заливать файлы в специально отведенные директории, на которые стоят права соответствующие. Они пропускают файлы только определенных типов. У тебя же предполагается что у апача будут права на запись самих скриптов, на которых всё работает.
Да, SMS автоматом у меня вылетело :) Исправил, спасибо.
Насчёт прав… ну и что?
У HostCMS есть инсталяция через один файл.
Денис, у них install.php работает только на серверах с установленным Zend Optimizer.
Плохо насчет прав, так можно и index.php через аплоад перезаписать (в случае бага)
Я планирую делать инсталятор с проверкой index.php. Багов серьезных не должно быть, тестирую же.
У битрикса такой инсталлятор есть. Скачиваешь файл, в нем указываешь из выпадающей менюшки что устанавливать, а дальше он все сам. Скачивает дистрибутив, распаковывает. По сути больше ничего и не надо если сам дистрибутив нормально сделан.
Вот ссылка на скрипт http://www.1c-bitrix.ru/download/cms.php#tab-bitrixsetup-link
А редко используют потому, как мне кажется, что не такие сложные программы выпускают чтобы заморачиваться с установщиком.
угу, про «Битрикс» мне уже говорили.
Отстой во всех смыслах.
Почему отстой?
Цитата с СЕ:
«Внимание! PHP на вашем сайте работает в Safe Mode. Установка продукта в автоматическом режиме невозможна. Пожалуйста, обратитесь в службу технической поддержки для получения дополнительной информации.»
Естественно он не будет рабоать в Safe Mode, прочитай что это за функция. Если дистрибутив скачается скриптом, то владелец у него будет апач, а у скрита владелец ты. Польозователи разные, скрипт не работает.
Цитата с СЕ:
«Внимание! PHP не имеет прав на запись в корневую папку /home/brokenbrake.biz/public_html вашего сайта. Загрузка продукта может оказаться невозможной. Пожалуйста, установите необходимые права на корневую папку вашего сайта или обратитесь к администраторам вашего хостинга.»
Это вообще странная претензия. PHP просто файлы не может создавать. Один фиг потом придется права на запись давать если в цмс работать будешь.
В общем по мне так нормальная реализация инсталлера. На всех хостингах с которыми я работал(~15) все работало по умолчанию.
А почему бы скрипт-установщик на баше не написать?
Аноним, ну потому что если ставить права на каталог и всякие другие манипуляции делать перед установкой, то суть как-то теряется. Ну и вообще, это же «Битрикс». Что в этом может быть хорошего? У них даже скачать файл нормально нельзя, а если скачать умудришься — он будет в cp1251. Прошлый век и просто глупость.
Фео, ну и как его запускать?
Тормоз, в силу специфики назначения движка его обчно один раз распаковывают и потому много раз заливают с разным контентом и шаблонами. Либо вообще через Zebrum CMS автоматом. Соответственно, писать установщик довольно бессмысленно и не очень гуманно по отношению к пользователю. Но для скриптов, которые устанавливаются «штучно» оно вполне оправданно. Возможно, я со временем адаптирую его для RegSubmitter’a
Как на счет установщика под win, т.е. просто некий фтп-клиент с архивом дистрибутива внутри. Я использую http://www.ioncube.com/ipf/
У меня давно нет Windows, да и когда была, я не очень-то уважал настолько зависимые от платформы решения.
И у меня лично всё же не получилось выпендриться с установщиком :) Понял, что если я буду доводить до ума его, то Daos никогда не выпущу нафиг. Так что будет обычный архив.
А когда будет? :)
Когда-когда! Никогда! :)
Я так и знал :)
> У них даже скачать файл нормально нельзя,
> а если скачать умудришься — он будет в cp1251.
> Прошлый век и просто глупость.
Хоть я и не фанат Битрикса, но мне кажется, Вы не правы.
Пару недель по просьбе клиента делал сайт на Битриксе. С utf-8 полный порядок. И установщик их запустился у меня на хостинге без проблем.
Content Provider, установщик-то в cp1251. Если бы система ещё и не работала с UTF-8 вообще, то это был бы полный ахтунг. И вообще, о чём речь? Что можно обсуждать в допотопном монстре Bitrix?
Копался в различных CMS и случайно набрел вот на эту страничку: http://hostcms.ru/hostcms/editions/free/
Там именно та реализация, речь о которой идет в твоем посте – с помощью всего-лишь одного файла…
Бездомный Бродяга, писали ведь уже про неё в комментах.