Автолодер и константы классов в php 5.2

AmdY

Пью пиво
Команда форума
Достался сервер со старым debian lenny, там пых версии 5.2.6 и начала вылазить ошибка что класс не существует. сразу грешил на автолодер, но затем понял, что ошибка происходит когда вызывается константа без инициализации класса User::CONSTANTA, автолодер почему-то даже не вызывается.
Код переписывать как-то не хочется, а ленина подружить с 5.3 ни в какую не получается, куча конфликтов.

Мне кажется или я что-то делаю не так???
 

AmdY

Пью пиво
Команда форума
fixxxer
это первый совет гугла, но не накатывается, ни отдельно новый php, а если сделать апгрейд системы, то не ставится мускул и mod_php, проблемы с зависимостями даже aptitude не разгребает.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
а мыши продолжают есть кактус
вот что дает установка из пакетов такого, что перекрывает проблемы?
 

AmdY

Пью пиво
Команда форума
grigori
удобство и простота установки, я вот положил сервер и легко откатился, а после пакетов помогают либо глубокие знания linux, либо "format c". первое у меня отсутствует, второе делать незя.

а про константы это локальная проблема или дело действительно обстоит так? под рукой нет ничего где бы проверить, но на раньше такой проблемы не возникало.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
на самом деле установка php из исходников проще, чем установка из пакетов

>про константы это локальная проблема или дело действительно обстоит так
PHP:
<?php

function __autoload($class){
  echo $class,"\n";
  exit;
}

$x = User::CONSTANTA;

gri@hdghst01 ~ $ /usr/lib/php5.2/bin/php -v
PHP 5.2.17-pl0-gentoo (cli) (built: Apr 26 2011 16:39:56)
gri@hdghst01 ~ $ /usr/lib/php5.2/bin/php test.php
User

все в порядке, это очередной глюк дебиановской сборки
 

fixxxer

К.О.
Партнер клуба
fixxxer
это первый совет гугла, но не накатывается, ни отдельно новый php, а если сделать апгрейд системы, то не ставится мускул и mod_php, проблемы с зависимостями даже aptitude не разгребает.
ну значит все уже запущено донельзя :)

я фиг конечно знает про mod_php, давно забыл, что это такое и с чем его едят. но если бы был fcgi/fpm я бы забил на пакеты половой орган и собрал статические бинари fpm/cli куда нить в /opt :)
 

AmdY

Пью пиво
Команда форума
fixxxer
там cpanel должны работать, да ещё проект на perl крутится, так что мне сильно капать незя.
 

fixxxer

К.О.
Партнер клуба
Жесть. Сочувствую :)

Что с цпанелью хрен что установишь верю. Могу только посоветовать рекомендовать выбросить это говно и ставить isp manager ;)

Хотя я бы на твоем месте распихал class_exist-ы и забил =)
 

AmdY

Пью пиво
Команда форума
ой, чуть не забыл и не оставил сии грязные инсинуации о сборке дебиана. всё с ней в порядке, это я дурак, в автолодере не возвращал return true;
 

Активист

Активист
Команда форума
Не надо мне тут дебиан ругать :)

Сей пример
PHP:
<?php

function __autoload($class){
  echo $class,"\n";
  exit;
}

$x = User::CONSTANTA;
?>
Отрабатывет на Debian Lenny нормально:
PHP:
User
Код:
linux-debian-1:~# cat /etc/debian_version
5.0.8
linux-debian-1:~#

linux-debian-1:~# dpkg -l | grep ii | grep php
ii  php5-cgi                             5.2.6.dfsg.1-1+lenny10     server-side, HTML-embedded scripting language (CGI bina
ii  php5-cli                             5.2.6.dfsg.1-1+lenny10     command-line interpreter for the php5 scripting languag
ii  php5-common                          5.2.6.dfsg.1-1+lenny10     Common files for packages built from the php5 source
ii  php5-curl                            5.2.6.dfsg.1-1+lenny10     CURL module for php5
ii  php5-gd                              5.2.6.dfsg.1-1+lenny10     GD module for php5
ii  php5-mysql                           5.2.6.dfsg.1-1+lenny10     MySQL module for php5
linux-debian-1:~#

linux-debian-1:~# uname -a
Linux linux-debian-1.local 2.6.26-2-686 #1 SMP Thu Jan 27 00:28:05 UTC 2011 i686 GNU/Linux
linux-debian-1:~#


linux-debian-1:~# cat /etc/apt/sources.list
#
# deb cdrom:[Debian GNU/Linux 5.0.5 _Lenny_ - Official i386 DVD Binary-1 20100626-17:50]/ lenny contrib main

#deb cdrom:[Debian GNU/Linux 5.0.5 _Lenny_ - Official i386 DVD Binary-1 20100626-17:50]/ lenny contrib main
#deb cdrom:[Debian GNU/Linux 5.0.5 _Lenny_ - Official i386 DVD Binary-2 20100626-17:50]/ lenny contrib main
#deb cdrom:[Debian GNU/Linux 5.0.5 _Lenny_ - Official i386 DVD Binary-3 20100626-17:50]/ lenny contrib main
#deb cdrom:[Debian GNU/Linux 5.0.5 _Lenny_ - Official i386 DVD Binary-4 20100626-17:50]/ lenny contrib main
#deb cdrom:[Debian GNU/Linux 5.0.5 Update DVD 20100627: i386 DVD 1]/ lenny contrib main non-free
#deb cdrom:[Debian GNU/Linux 5.0.5 _Lenny_ - Official i386 DVD Binary-5 20100626-17:50]/ lenny contrib main

deb http://mirror.yandex.ru/debian lenny main contrib non-free
#deb http://mirrors.irk.ru/debian/ lenny main contrib non-free

# Line commented out by installer because it failed to verify:
deb http://security.debian.org/ lenny/updates main contrib non-free
# Line commented out by installer because it failed to verify:
#deb-src http://security.debian.org/ lenny/updates main contrib non-free

# Line commented out by installer because it failed to verify:
deb http://volatile.debian.org/debian-volatile lenny/volatile main contrib non-free
# Line commented out by installer because it failed to verify:
#deb-src http://volatile.debian.org/debian-volatile lenny/volatile main contrib non-free
linux-debian-1:~#
Кстати, скомпилить PHP 5.3 без проблем можно, могу скинуть сюда как. Стоит на серваке рабочем как CGI для одного клиента (очень ему надо было), штатный 5.2.6 работает по умолчанию.
 

AmdY

Пью пиво
Команда форума
Активист
вот и я не мог поверить, что это дебиан, а не мои криворучки.
PHP:
<?php

function __autoload($class){
  // код
  return true; //вот эту строку во втором автолодере забыл
}

$x = User::CONSTANTA;
?>
я вот тоже начал подумывать чтобы отдельно поставить и 5.3, но не через aptitude - это как-то не по провославному, это как начать GOTO использовать.
Кстатит, почему бубунтовцы в большинстве случаев в интернетах пишут маны с использованием богомерзкого apt-get? хотя в дебиане уже лет 10 советуют aptitude (один интерфейс вместо набора apt-* да и с зависимостями он значительно лучше разбирается)

Брось на всякий случай инфу как разворачивать 5.3 параллельно, если ты сам пробовал, а то экспериментировать и ложить сервак больше не хочется.
 

Активист

Активист
Команда форума
Вот инфа про компиляцию (хоть сто разных версий на сервак вешайте)

Код:
Копиляция

linux-debian-1:~# cd ~
linux-debian-1:~# mkdir php5.3-src
linux-debian-1:~# cd php5.3-src
linux-debian-1:~/php5.3-src# apt-get build-dep php5 php5-mysql php5-gd libapache2-mod-php5
linux-debian-1:~/php5.3-src# wget http://ru2.php.net/get/php-5.3.6.tar.gz/from/this/mirror -O php-5.3.6.tar.gz
linux-debian-1:~/php5.3-src# tar -xzf php-5.3.6.tar.gz
linux-debian-1:~/php5.3-src# cd php-5.3.6
linux-debian-1:~/php5.3-src/php-5.3.6# ./configure --prefix=/usr/local/php53 --with-gd --enable-mbstring --with-mysql --enable-zip ; если нужно как модуль апаче 2 - добавим --with-apxs2=/usr/bin/apxs2, хотя для начала не стоит, ибо предыдущий php5.2.6 слетит 
linux-debian-1:~/php5.3-src/php-5.3.6# make
linux-debian-1:~/php5.3-src/php-5.3.6# make test (тут о всех багах будет сообщено, с расшифровкой после теста, жмем Yes и отправляем отчет)
linux-debian-1:~/php5.3-src/php-5.3.6# make install
linux-debian-1:~/php5.3-src/php-5.3.6# sudo -u www-data mkdir ~www-data/53.web.local/php-bin
linux-debian-1:~/php5.3-src/php-5.3.6# echo '#!/usr/local/php53/bin/php-cgi' > ~www-data/53.web.local/php-bin/php
linux-debian-1:~/php5.3-src/php-5.3.6# chmod 750 ~www-data/53.web.local/php-bin/php
linux-debian-1:~/php5.3-src/php-5.3.6# chown www-data:www-data ~www-data/53.web.local/php-bin/php

Далее правим виртуальный хост, что бы получилось примерно так

        <VirtualHost *:80>
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/53.web.local/httpdocs/>
                AllowOverride All
        </Directory>
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        </Directory>

        ServerAdmin [email protected]
        DocumentRoot /var/www/53.web.local/httpdocs/

        ServerName 53.web.local
        ServerAlias www.53.web.local 53.local.prime-gr.ru www.53.local.prime-gr.ru

        Alias /robots.txt /var/www/robots.txt
        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

        # PHP 5.3
        <Directory "/var/www/53.web.local/php-bin/">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        </Directory>

        ScriptAlias /php-bin/ /var/www/53.web.local/php-bin/

	AddType application/php-cgi-53 .php        
        Action application/php-cgi-53 /php-bin/php
	# END OF PHP 5.3	

        ErrorLog /var/www/53.web.local/logs/error.log
        CustomLog /var/www/53.web.local/logs/access.log common
        </VirtualHost>

Далее:	
linux-debian-1:~/php5.3-src/php-5.3.6# apache2ctl restart
linux-debian-1:~/php5.3-src/php-5.3.6# echo "post_max_size = 15M" > ~www-data/53.web.local/php-bin/php.ini
linux-debian-1:~/php5.3-src/php-5.3.6# chmod 640 ~www-data/53.web.local/php-bin/php.ini
linux-debian-1:~/php5.3-src/php-5.3.6# chown www-data:www-data ~www-data/53.web.local/php-bin/php.ini
linux-debian-1:~/php5.3-src/php-5.3.6#

Тут получится вот это: http://53.local.prime-gr.ru (PHPINFO, список включенных в PHP расширений смотри в нем)

Если нужно скомпилить например image-magic для 5.3 (ext)

linux-debian-1:~/php5.3-src/php-5.3.6# cd ../../
linux-debian-1:~# mkdir php5-imagick
linux-debian-1:~# cd php5-imagick
linux-debian-1:~/php5-imagick# wget http://pecl.php.net/get/imagick-3.0.1.tgz
linux-debian-1:~/php5-imagick# tar -xzf ./imagick-3.0.1.tgz
linux-debian-1:~/php5-imagick# cd imagick-3.0.1
linux-debian-1:~/php5-imagick/imagick-3.0.1# apt-get build-dep imagemagick 
linux-debian-1:~/php5-imagick/imagick-3.0.1# apt-get install imagemagick libmagick++9-dev
linux-debian-1:~/php5-imagick/imagick-3.0.1# /usr/local/php53/bin/phpize
linux-debian-1:~/php5-imagick/imagick-3.0.1# ./configure --with-php-config=/usr/local/php53/bin/php-config
linux-debian-1:~/php5-imagick/imagick-3.0.1# make install

В итоге экстеншенс будет лежать где-нибудь тут
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
Installing shared extensions:     /usr/local/php53/lib/php/extensions/no-debug-non-zts-20090626/
Installing header files:          /usr/local/php53/include/php/

Жду хоть спасибо :) :)
 

Raziel[SD]

untitled00
Активист
Кстатит, почему бубунтовцы в большинстве случаев в интернетах пишут маны с использованием богомерзкого apt-get?
Там в подсказках везде apt-get, например, если нет mc, то при вызове mc получишь подсказку вида "юзай apt-get install mc", вот все и привыкают :) как в других дистрибутивах не обращал внимания.

З.Ы. ты далеко не первый бебианец, который возмущается на тему apt-* :)
 

Активист

Активист
Команда форума
А я люблю apt-get, удобнее, много всего умеет, главное ман один раз покурить
 
Сверху