Здравствуйте уважаемые!Такой вопрос у меня возник, в Интернете что-то ненашел на него ответа:
Собрал php 5 c такими параметрами
./configure --prefix=/usr/home/user/php \
--disable-cgi \
--disable-dom \
--disable-libxml \
--disable-simplexml \
--disable-xml \
--disable-xmlreader \
--disable-xmlwriter \
--disable-mbregex \
--disable-session \
--disable-tokenizer \
--disable-json \
--disable-rpath \
--enable-ftp \
--enable-sockets \
--enable-zip \
--with-config-file-path=./\
--with-zlib \
--with-zlib-dir \
--without-pear \
--without-sqlite \
--without-pdo-sqliteУ меня есть один бинарный файл php который весит мегабайт так 9.
Я так понимаю это единый бинарник в котором собраны все модули...Вопрос, как мне собрать php так, чтобы я мог "инклюдить" модули которые мне нужны ?
И вопрос, папки lib, man, include (в нем всякие файлы с исходным кодом). Их можно удалить ? Удалил, работает... но малоли потом чтонибуть сглючит...
Система FreeBSD 6.3
По поводу бинарников, у меня есть единый файл php собранный в папку /usr/home/user/php
В бинарнике все модули собраны, ибо я удалил все, оставил только бинарник php и начал его пробывать iconv, zlib все работает... Но модулей нигде нет... вывод - они в бинарнике...Вопрос, как собрать, чтобы был чисты php, а экстеншенами подгружать что надо. например через dl()
Хочу просто как на винде чтобы было, есть папка extencios и я в php.ini указываю какие мне модули нужны...
А вот как в UNIX php под CLI заточить да еще и с ext с инклюдом через dl() или php.ini незнаю...
Для начала откройте handbook и прочитайте что такое порты и как их использовать
>Для начала откройте handbook и прочитайте что такое порты и как их
>использоватьПорты, это очень хорошо! Но в моем случае я скачал дестребьютив с офицального сайта php.net
И я хочу собрать CLI php в произвольной папки, с возможностью подключения extensions. У меня получилась лишь половина, ибо мануалы на эту тему есть... PHP 5 я собрал из исходников, в произвольную папку, но там лежит лишь один бинарник, весом порядка 9 мегабайт, в котором находятся и все модули. Это хорошо, но несовсем, ибо для некоторых вещей мне нужны те или иные модули, а других нет. Собирать несколько видов бинарников, проблематично и повлияет на общий объем дискового пространства и его переносимость на другие машины, да и оперативно памяти не так уж и много, чтобы по 9 мегабайт в нее забивать, а если быть точнее всего 256 оперативной памяти. Можно было бы сказать - "купи память, она щас копейки стоит", но данный вариант неочень подходит. Я очень надеюсь, что всетаки такое возможно. В Windows сотворить такое, несоставляет проблем. Все работает очень хорошо и прекрасно, но нужна сборка под FreeBSD и другие позиксы, с этим возникла проблема, в Интернете в том числе новомодный глагол "togoogle" мне непомог. Решил обратиться, к моему очень любимому ресурсу по юникс системам opennet.ru.
Товарищи! Если такое вообще возможно, как это реализовать.
Мануалы и тд. это конечно очень и очень хорошо, учу... Но вот возникают иногда такие проблемы которые слодно решить, и проще спросить у знающих и умных людей, чем искать.
Я вообще не приветствую высказываний вроде - "togoogle", "в поиск животнае", "хахаха он незнает.", "что за дебилы на форуме". Если Вы нехотите говорить, или возможно Вы незнаете. Давайте небудем засорять форумы лишним фладом, капсом, ненормативной лексикой и многим другим... Потому что неочень приятно, когда заходишь на подобные форумы, взять хотябы для примеру линукс.орг.ру... Страшно смотреть, как люди просто друг друга, обзывают и их поведение вызывает отвращение. Я недумаю, что еще когданибуть туда пойду, ибо там походу седят те которые ничего незнают, но думают, что знают все, а из-за того, что они такие "умные" они якобы имееют право, говорить, о незнании и невежестве других людей, хотя сами по большей степени (скорее всего), из себя ничего не представляют.Давайте жить дружно!
>>Для начала откройте handbook и прочитайте что такое порты и как их
>>использовать
>
>Порты, это очень хорошо! Но в моем случае я скачал дестребьютив с
>офицального сайта php.netДистрибутив с оф. сайта, это неплохо. Но в FreeBSD приложения устанавливаются из портов.
Почему, как и зачем написано в хэндбуке.
>
>Давайте небудем засорять форумы лишним фладом,Никто вроде и не засорял пока...
>>Для начала откройте handbook и прочитайте что такое порты и как их
>>использовать
>
>Порты, это очень хорошо! Но в моем случае я скачал дестребьютив с
>офицального сайта php.netВ 99,9% случаев вам не нужно что-либо компилировать вручную. А если вдруг провели тесты производительности, и т. д. и вы всё-таки попадаете в тот 0,1% -- то вы бы этот вопрос уже давно решили сами, потому что задачи на простойку таких систем начинающим и средним админам не достаются.
Не нужно расценивать это как оскорбление. Вам просто сказали что для подавляющего большинства людей работают порты. А остальные 0,1% для которых очень нужна собственная сборка, и так сами знают что и как собирать. И если вдруг вы думаете, что вам таки нужно собрать самостоятельно, это повод подумать "а я всё правильно делаю?"
Взоможно если бы вы привели аргументацию, зачем вам своя сборка php, вам бы ответили как этого же можно добиться через порты или помогли бы в вашим вопросом.
А вообще, вопросом насчёт каталогов man, lib, include и идеей насчет перемещение бинарника php вы показали, что вы полный новичёк в *nix и что для вас пока что подойдут только стандартные способы. Вы просто не понимаете, как работает система и зачем все эти каталоги. Почитайте хендбук. FreeBSD -- не винда, где можно методом тыка, хаотично нажимая все подряд кнопки, чего-то добиться.
Да, я новичек в данном вопросе.Для чего мне нужна данная сборка ?
1) Переносимость, на другие FreeBSD машины, без установки (кинул папку с PHP 5 и скриптом вызвал start.sh и все заработало)
2) Сриптов несколько, одни используют стандартные библиотеки, другие пользуются такими как zip,zlib,ftp,sqlite,sockets и многим многим другим. Поэтому хочется запускать только то что нужно и уже подгружать нужное через функцию <?php dl('sockets.so'); ?>
3) Есть пользователи которым нужны мои скрипты... и многие очень и очень плохо знают UNIX и даже боятся его... Да и мануал проще будет писать, распакуй tar.gz и запусти start.sh
А писать, установи из портов это, потом установи экстеншены эти, далее вот это, открой конфиги, тут пропиши это, там исправь то... Даже я бы возможно бы запутался (то некомпилируется что-то, то что то где то прописал, а оно неработает..) Вот в чем проблема...
4) Скрипты кросс-платформенные, работают как Windows так и на FreeBSD, с Виндоус никаких проблем нет, и мануалов куча на эту тему!
5) Предварительная настройка php.ini под те или иные нужды, с ограничениями с разрешениями. Под данный набор скриптов.
6) Независимость от иной сборки PHP 4,5.Начал устанавливать через порты, все хорошо, но проблема в том, что префикс нехочет что-то работать. На данном сайте уже нашел такую тему, решения проблемы необнаружил.
Перековырял makefile чтобы посмотреть как и что работает... Узнал вроде как собрать...Это Shared Lib
--with-EXTENSION=[shared[,PATH]]
NOTE: Not all extensions can be build as 'shared'.Example: --with-foobar=shared,/usr/local/foobar/
o Builds the foobar extension as shared extension.
o foobar package install prefix is /usr/local/foobar/Конечно же неполучилось...
./configure --prefix=/usr/home/user/php \
--enable-shared=yes \
--disable-cgi \
--disable-dom \
--disable-libxml \
--disable-simplexml \
--disable-xml \
--disable-xmlreader \
--disable-xmlwriter \
--disable-mbregex \
--disable-session \
--disable-tokenizer \
--disable-json \
--disable-rpath \
--enable-ftp=shared,/usr/home/user/php/lib \
--enable-sockets=shared,/usr/home/user/php/lib \
--enable-zip=shared,/usr/home/user/php/lib \
--without-pear \
--with-config-file-path=./\
--without-pdo-sqliteПри ./configure все хорошо, на make выдал ошибку...
Пошел по принципу togoogle, toyandex, tomsn, toyahoo, torambler
На эту тему нашел пару форумов у людей тоже были с этим проблемы, кто то дал какие то решения, пробывал повсякому.... Неполучилось...
Изменил запросы в поисковиках, попал на иностранные сайты, посмотрел, немцы писали нечто похожее, попробывал, неполучилсось... Попал потом на русский форум какой то, посмотрел, что со злибом там какие то проблемы при сборке, скачал злиб пробывал ставить неполучилось, тема на том форуме закончилась тем, что никто незнает (видно просто нафиг ненедо)
Думал пойду на php.net там - нет, на Зенде.ком смотрел, тоже нет... там тока купить предлагают книгу по программированию на php 5. Была бы книга по компилированию php 5 на UNIX купил бы с большим удовольствием :)
Я уже даже больше незнаю куда копать, может подскажите?
>1) Переносимость, на другие FreeBSD машины, без установки (кинул папку с PHP
>5 и скриптом вызвал start.sh и все заработало)
>2) Сриптов несколько, одни используют стандартные библиотеки, другие пользуются такими как zip,zlib,ftp,sqlite,sockets и многим многим другим. Поэтому хочется запускать только то что нужно и уже подгружать нужное через функцию <?php dl('sockets.so'); ?>Это не-UNIX-way, тут так не делают. Вот смотрите: вы собрали свой php пользуясь библиотекой XYZ версии 1.2.3. Пусть у меня в системе стоит 1.0.2 или 1.4.5. Всё, ваша сборка у меня не заработает, бинарный интерфейс другой. Или у меня та же GD собрана с одними фичами, а ваш PHP хочет от неё других. Опять не заработает.
А вы Apache случайно свой для этого не компилируете? Ведь mod_php всё-таки...
>3) Есть пользователи которым нужны мои скрипты... и многие очень и очень
>плохо знают UNIX и даже боятся его... Да и мануал проще
>будет писать, распакуй tar.gz и запусти start.sh
>А писать, установи из портов это, потом установи экстеншены эти, далее вот
>это, открой конфиги, тут пропиши это, там исправь то... Даже я
>бы возможно бы запутался (то некомпилируется что-то, то что то где
>то прописал, а оно неработает..) Вот в чем проблема...Ага, запусти, а потом отлавливай пачку глюков из-за бинарной несовместимости. И будете собирать под все варианты FreeBSD со всеми наборами библиотек? А вы подумали о 32-х и 64-х битных архитектурах? Что у меня на системе может вообще не быть 32-битных библиотек, и в ядре может быть отключена поддержка 32-битных программ?
Если человек боится UNIX -- он нанимает админа. Всё, с этим уже по-моему все согласились и никто не спорит, особенно на серверном рынке.
>5) Предварительная настройка php.ini под те или иные нужды, с ограничениями с
>разрешениями. Под данный набор скриптов.
>6) Независимость от иной сборки PHP 4,5.А что у вас за нужды такие необычные? Странно, тысячи людей сидят на shared-хостингах и как-то не страдают с общим php.ini на всех.
+1Единственный человек который разъяснил, мне что да как.
Ясно, вобщем нестоит мучиться, а идти писать мануалы, да встраивать в скрипты проверки на наличие тех или иных функций, а если их нет, говорить человеку, чтобы установил тот или иной модуль.
>Единственный человек который разъяснил, мне что да как.
>Ясно, вобщем нестоит мучиться, а идти писать мануалы, да встраивать в скрипты
>проверки на наличие тех или иных функций, а если их нет,
>говорить человеку, чтобы установил тот или иной модуль.Да, это правильная мысль. Можете написать скриптик типа check-config.sh который разберется в том, что выводит phpinfo() (из консоли это команда php -i) и выяснит, установлено ли всё нужное.
По вашим постам создалось впечатление что вы используете php не для web. Если это так, то забейте на php и выучите какой-нибудь язык программирования общего назначения. PHP неплох для веба и абсолютно негоден ни для чего другого.
Добавляем в мейк порта PHPBASE=/usr/local/php5 PREFIX=/usr/local/php5 PHP_VER=5 (порты должны быть свежие), получаем отдельно стоящий пхп. И в любом случае более понятный для юзера метод распостранения аппликации во Фре - это порты или/и пакеты (а не run install.sh). Как сделать порт - см. стандартную документацию ко Фре, пакеты обычно делают из порта, но если сложно, можно и в обход (см. ниже)."Независимость" от системного пхп - если речь о том, что игнорировать версию, то порты pear-* именно это и делают, если же речь о необходимости упаковать пхп-сборку версии именно 5.4.3, чтобы все работало (как дело обстоит с пакетом опенофиса), то могу предложить такой вариант:
- собрать в выделенный PREFIX пхп и необходимые модули (PHPBASE=/usr/local/php5 PREFIX=/usr/local/php5 PHP_VER=5 WITHOUT_CGI=yes WITH_CLI=yes)
- pkg_create -yb для свежеустановаленных пакетов
- слить /var/db/pkg/свежеустановаленные-пакеты/+* - т.е. plist'ы и прочее, скорее всего инструмента не найдется, т.е. самому
- добавить свое по вкусу в тот же префикс, перепаковать в tbz и распостранять
если я правильно понял то надо так--with-zlib="shared"
и остальные модули которые ты хочешь собрать так же
Ох, и горазды у нас отсылать в поиск и факт... Да, кто спорит, что установка из пакетов/портов и прочих готовых вещей есть правильный путь, но не всегда он возможен.Но как я понимаю, ни кто PHP собрать в произвольную директорию и не пытался (ну кроме автора темы разумеется). А вот как и он, сижу собираю... одного догнать не могу, куда при компиляции ставиться модуль апача? С with-apxs2, но даже близко ни где не видно libphp.so или что либо в этом духе.
>Ох, и горазды у нас отсылать в поиск и факт... Да, кто
>спорит, что установка из пакетов/портов и прочих готовых вещей есть правильный
>путь, но не всегда он возможен.
>
>Но как я понимаю, ни кто PHP собрать в произвольную директорию и
>не пытался (ну кроме автора темы разумеется). А вот как и
>он, сижу собираю... одного догнать не могу, куда при компиляции ставиться
>модуль апача? С with-apxs2, но даже близко ни где не видно
>libphp.so или что либо в этом духе.Вроде бы модуль создается именно с ключом --with-apxs=/www/bin/apxs
По крайней мере я так собираю.