LINUX.ORG.RU

Сообщения olegchir

 

О несовместимости версий PHP

Форум — Talks

Вчера я постил инструкцию о том как компилировать PHP и Апачи в целях наличия нескольких версий.

Были множественные комменты типа "никогда не было таких проблем", "конкретных примеров конечно не будет" итп.

Развенчиваем! :)
Сегодня специально натравил make test на последнюю скачанную версию PHP (5.2.9)

Результат:

EXPECTED FAILED TEST SUMMARY
---------------------------------------------------------------------
ob_start(): Ensure unerasable buffer cannot be flushed by ob_flush(). [tests/output/ob_start_basic_unerasable_005.phpt]
SPL: ArrayObject::__construct basic usage with ArrayObject::ARRAY_AS_PROPS. [ext/spl/tests/arrayObject___construct_basic4.phpt]
SPL: ArrayObject::__construct basic usage with ArrayObject::STD_PROP_LIST|ArrayObject::ARRAY_AS_PROPS. [ext/spl/tests/arrayObject___construct_basic5.phpt]
SPL: ArrayObject::exchangeArray() basic usage with object as underlying data store. [ext/spl/tests/arrayObject_exchangeArray_basic3.phpt]
SPL: ArrayObject::setFlags basic usage with ArrayObject::ARRAY_AS_PROPS. [ext/spl/tests/arrayObject_setFlags_basic1.phpt]

FAILED TEST SUMMARY
---------------------------------------------------------------------
Bug #30707 (Segmentation fault on exception in method) [Zend/tests/bug30707.phpt]


(и там дальше еще 15 проваленных не-expected тестов по различным багам. и один даже не по багу, а просто так — один из gettext basic test).


Так-то, господа не верующие в баги.


На всякий случай ([strike]для разжигания разговора[/strike]) дальнейший ход мысли.

Допустим в следующей версии пыха (5.3.0) пофиксят expected-баг SPL c Array Object'ом, и программер напишет на PHP 5.3.0 скрипт с ARRAY_AS_PROPS.
А потом этот скрипт поставят на сервак с PHP 5.2.9, и все накроется.

Поэтому у девелопера должен быть установлен и PHP 5.2.9 и PHP 5.3.0 одновренменно, чтобы писать сразу под несколько различных целевых серваков. Что довольно затруднительно делать с помощью пакетов (по крайней мере YUM+rpm =) Следовательно, нужно или виртуалить под каждую сборку PHP отдельную виртуальную машину, или собирать вручную из исходников.

Так — более аргументированно?

olegchir
()

Инструкция PHP 5 + Apache 2

Форум — Talks

Сегодня помучившись немножко с установкой Apache2+PHP5 на Fedora 10 / x86_64 написал короткую инструкцию для самовспоминания этого процесса.

В конце идет пара слов о том как _не_ получилось собрать IMAP (поскольку он мне нафиг не нужен, особо и не заморачивался).

Пишу здесь из расчета: вдруг кому-нибудь понадобится.

0.
строчку "olegchir" поменять на имя юзверя, из под которого производится установка

1.

С какими опциями компилировался Апач — не помню.
Преположительно вот так:

./configure --prefix=/home/olegchir/apps/apache22php5 --enable-so --enable-cgi --enable-info --enable-rewrite --enable-speling --enable-usertrack --enable-deflate --enable-ssl --enable-mime-magic

В этой строчке нужно проверить, нужно ли в ней подключать vhost (виртуальные хосты) явно, или они уже есть сразу. Важно чтобы было --enable-so.

И как обычно make, make install


2.

Дальше качаем PHP и запускаем строчку для компилирования без IMAP:

./configure --prefix="/home/olegchir/apps/php-5.2.9" --with-bz2 --with-curl --with-domxml --with-exif --with-pdf --with-gd2 --with-gettext --with-mbstring --with-mysql=/usr/bin --with-mysqli --with-openssl --with-phpdoc --with-pop3 --with-rar --with-sdo --with-smtp --with-soap --with-sockets --with-ssh2 --with-xmlrpc --with-xsl --with-pdo-mysql --enable-zip --enable-spl --with-apxs2=/home/olegchir/apps/apache22php5/bin --disable-cgi --enable-so --with-libdir=lib64

В этой строчке особенно важна фраза "--with-mysql=/usr/bin --with-libdir=lib64", именно так и никак иначе.

Что там требуется из зависимостей — смотреть по ситуации, точно должны быть devel-версии MySQL, Curl, какой-нибудь xml наверняка попросит.

Ну и всё, make, make install.

Замечаем что модуль libphp5.so уже автоматически появился в директории /home/olegchir/apps/apache22php5/modules


3.

Дальше нужно разрешить Апачу запускаться на 80м порту из под обычного пользователя (не рута)

Сделать можно двумя способами:

а. setcap 'cap_net_bind_service=+ep' /home/olegchir/apps/apache22php5/bin
б. iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8090, iptables save. И не забыть в конфиге апача прослушку 8090, наверное )))



4.

Дальше правим конфиги Апача.

В конфиге используется идея про фикс для MiltiViews отсюда: http://dan.drydog.com/apache2php.html
Если нужно понять почему не используется "application/x-httpd-php php" — смотреть туда.

В httpd.conf раскомментируем строчку "Include conf/extra/httpd-vhosts.conf", это включит виртуальные хосты.

Потом стираем в этом самом conf/extra/httpd-vhosts.conf все что там есть и пишем:

//----------------------------------------

NameVirtualHost *:80

<VirtualHost *:80>
ServerAdmin hedin.pr@gmail.com
DocumentRoot "/home/olegchir/docs/sites/apache22php5main"
ServerName olegchir.ru
ServerAlias olegchir.ru
ErrorLog "logs/olegchir.ru-error.log"
CustomLog "logs/olegchir.ru-access.log" common

#AddType application/x-httpd-php .php

LoadModule php5_module modules/libphp5.so
AddHandler php5-script php
AddType text/html php
AddType application/x-httpd-php-source phps

<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
</Directory>

<Directory "/home/olegchir/docs/sites/apache22php5main">
Options Indexes FollowSymLinks ExecCGI
DirectoryIndex index.php index.htm phpinfo.php
AllowOverride None
Order allow,deny
Allow from all
</Directory>

</VirtualHost>

//----------------------------------------



5.

Создаем папочку /home/olegchir/docs/sites/apache22php5main
Создаем там файл phpinfo.php
В него пишем следующие строчки:

<? phpinfo(); ?>


6.

Дальше в /etc/hosts прописываем

127.0.0.1 olegchir.ru


7.

Дальше в ~/.bashrc (если он есть, на Федоре есть сразу) прописываем:

PATH=$PATH:$HOME/bin
export PATH

но только если это уже не сделано где-то еще в другом месте типа ~/.bash_profile

Делаем source ~/.bashrc чтобы применить изменения.


Дальше создаем эту самую папочку ~/.bin и грохаем в нее символическую ссылку на /home/olegchir/apps/apache22php5/bin/apachectl, называем ее apache22php5instance1

Запускаем сервак командой apache start

Заходим на olegchir.ru

Радуемся результату.


8.
IMAP.

Ставим пакеты

krb5-devel
krb5-libs
krb5-workstation
mysql-devel
zlib-devel

в вариантах (может быть придется доставить i386 в зависимости от невезучести :)

По идее нужно еще бы установить пакет "ibc-client-devel", который даже входит в Fedora 10.
Но с ним выходит облом. PHP требует libc-client.a, а в этом пакете нету .a, только .so. Пробовал кучу вариантов, скормить .so так почему-то и не получилось.

То есть нужно ручками качать вот это:
ftp://ftp.cac.washington.edu/imap/c-client.tar.Z
и это
http://files.directadmin.com/services/da_imap-2007e.tar.gz
компилировать и устанавливать.

Говорят что для 64-битных ОС необходимо отредактировать Makefile (из da_imap-2007e.tar.gz) и заменить в нем EXTRACFLAGS= на EXTRACFLAGS=-fPIC.


Ну и потом

./configure --prefix="/home/olegchir/apps/php-5.2.9" --with-bz2 --with-curl --with-domxml --with-exif --with-pdf --with-gd2 --with-gettext --with-imap=shared,/usr/lib64 --with-mbstring --with-mysql=/usr/bin --with-mysqli --with-openssl --with-phpdoc --with-pop3 --with-rar --with-sdo --with-smtp --with-soap --with-sockets --with-ssh2 --with-xmlrpc --with-xsl --with-pdo-mysql --enable-zip --enable-spl --with-kerberos --with-imap-ssl --with-zlib --with-libdir=lib64 --with-apxs2=/home/olegchir/apps/apache22php5/bin --disable-cgi --enable-so

make, make install

olegchir
()

Программа для редактирования видео

Форум — Talks

Подскажите, пожалуйста, какую-нибудь программу для нелинейного видеомонтажа под Linux. Гуевую. Желательно бесплатную :) А то очень обломно переключаться в Вегас под виндой.

olegchir
()

Java static method override

Форум — Talks

Вот здесь: http://faq.javaranch.com/view?OverridingVsHiding

Есть интересная инфа на тему.

Если коротко: вопрос в том, можно ли перегрузить статический метод в Java? Ответ - нет. Однако сколько угодно можно использовать синтакисис перегрузки! Пишете статический метод, который "как будто бы перегружает" метод суперкласса. И всё компилируется. При этом происходит просто скрытие метода суперкласса.

Интересно то, что происходит в компиляторе Java6 под Linux.

Потому что если в "как-бы-перегруженном" методе изменить тип возвращаемого значения, то мгновенно получим ошибку типа такой:

cannot override method getA(); attempting to use incompatible return type

(код: class returner1 { public int getA() { return 1; } }

class returner2 extends returner1 { public String getA() { return "asd"; } })

замечаете в тексте ошибки слово OVERRIDE? а сам смысл ошибки?

если происходит действительно оверрайд, то почему работают тесты, приведенные по ссылке? если происходит скрытие, то откуда такая ошибка? [strike]в Sun принимают вещества? ))[/strike]

olegchir
()

Удобства и красивости

Форум — Talks

Люди используют для познания окружающего мира свои пять чувств (зрение, слух, осязание, обоняние, вкус) и обдумывание всего этого с помощью Мозга.

Психологи отмечают что люди часто выбирают какую-то предпочительную систему восприятия. Например, люди которые в первую очередь обращают внимание на внешний вид. Или на то, как ощущается та или иная штука. Или на внутреннюю логичность.

Недавно поднимался вопрос о том, стоит ли объединять усилия разработчиков LInux, и как товарищ Столлман к этому негативно относится.

Рассмотрю несколько волнующих проблем.

Написательство кода функционал — это прежде всего думание. Нескончаемое думание над смыслом.

Но где же всё остальное? Где красивые картинки, удобные интерфейсы, качественный звук?

Я, например, на Федоре. Как бы самые последние тестовые достижения.

Весь интерфейс Гнома из коробки — унылый и аскетичный. Чтобы раскрасить его на уровне Висты — нужно потратить как минимум час. Еще нужно знать всякие вещи типа Компиза или утилиты с плагинами к нему, о которых кроме как из форумов не узнать. Чтобы раскрасить нормально — дни, и знание C++/Python/Bash.

Конфигурирование систем с двумя и больше мониторами, или упаси бог — двумя и больше видеокартами… эээ адская процедура. Даже для меня, бывшего сисадмина. Недавно ко мне подошел человек и спросил, как ему настроить под Убунтой два Радеона в режиме SLI… я не ответил. Не знаю.

У меня зрение -5. Кто-нибудь может посоветовать хорошую экранную лупу, которая бы значительно помогала в работе?

Где удобные интерфейсы? Всем известно, что в широкоэкранном мониторе самый главный дефицит — высота. Вот возьмите прямо сейчас и отдокайте влево (или вправо) панельку задач Гнома, насладитесь! Наблюдается либо черезвычайно некрасивое масштабирование, либо абсолютно не видно название открытых программ.

Где звук? Стабильность… VirtualBox может вырубить всё аудио так, что требуется небывалая вещь — перезагрузка! OSS черезвычайно криво работает с системами 5.1, плакать хочется. Что же делать тогда люям с каким-нибудь 12.3?

Оборудование, то есть чувства. Где же железки, специально заточенные на линукс? Мониторы со встроенной поддержкой KDE, колонки 20.5 с аппаратной алсой, мышки для трехмерных рабочих столов? Я честно перешерстил Гуголь прежде чем писать сюда, и не нашел в массовой продаже ничего хотя бы отдаленно похожего. А между тем маковцы выпускают новую замечательную мышку.

Хватит ли ресурсов у разработчиков популярных дистрибутивов, даже всем вместе, чтобы в обозримое время (скажем, три года) исправить все эти ошибки?.. Тогда почему же товарищ Столлман так агитирует уменьшить и так небольшие силы?

olegchir
()

RSS подписка на новые темы