Linux за българи: Форуми

Linux секция за напреднали => Хардуерни и софтуерни проблеми => Темата е започната от: tmcdos в Jan 06, 2009, 18:41



Титла: Защо PHP-CLI дава SegFault, а MOD_PHP работи
Публикувано от: tmcdos в Jan 06, 2009, 18:41
Опитвам се да инсталирам PHP 5.2.8 във Fedora Core 5. Компилирам го със следните опции:

Цитат
export CFLAGS="-march=pentium4 -O3 -pipe -msse2 -mfpmath=387 -mmmx -fomit-frame-pointer -prefer-non-pic"
./configure --with-apxs2=/usr/local/apache2/bin/apxs \
   --with-mysql=/usr/local/mysql \
   --with-curl --enable-sockets \
   --without-iconv --with-config-file-path=/usr/local/lib \
   --disable-pdo --disable-reflection --disable-tokenizer \
   --disable-spl --disable-ipv6 --disable-ctype --disable-filter \
   --without-sqlite --without-xmlrpc --without-pear --without-cdb \
   --enable-inline-optimization --disable-debug

В резултат MOD_PHP работи нормално с Apache 2.2.2, но PHP-CLI версията дава "Segmentation Fault". Пробвах с различни комбинации на опциите - но успях да получа работещо PHP-CLI единствено при "./configure" без никакви аргументи.
Имам още 3 Федори (4, 5 и 6) - при тях няма такъв проблем.
Нямам опит с дебъгването под Линукс - някой може ли да помогне да открия проблема ?


Титла: Re: Защо PHP-CLI дава SegFault, а MOD_PHP работи
Публикувано от: zeridon в Jan 07, 2009, 11:36
Аз лично смятам че не е необходимо да си компилираш PHP при положение че имаш пакетен мениджър но явно си имаш причини.

Относно компилацията препоръчвам да махнеш следните флагове:
 -msse2
 -mfpmath=387
 -mmmx
 -prefer-non-pic

Така или иначе повечето от тях ще си дойдата от архитектурата която си задал и определено ще са по добре.

специално последният може да ти създава проблеми

Ако искаш да дебъгваш добро начало е strace но за да работи като хората ще трябва да компилираш с -O0 и да махнеш последните два флага от ./configure инвокацията


Титла: Re: Защо PHP-CLI дава SegFault, а MOD_PHP работи
Публикувано от: tmcdos в Jan 07, 2009, 13:27
Пробвах и без "export CGLAGS" - получава се по-голям ELF файл, обаче и той също дава Segmentation Fault. Ще пробвам с strace какво ще излезе.


Титла: Re: Защо PHP-CLI дава SegFault, а MOD_PHP работи
Публикувано от: J0r0 в Jan 08, 2009, 11:44
Мисля че проблема е в PHP. Имаше някакъв бъг свързан с Exception класа или по-точно с неговото наследяване.
При мен го има същия проблем като полвам мои exceptions. Ако си напиша hello world скрипт няма segmentation fault.
ПС . А скрипта изпълнява ли ти се нормално ?При мен скрипта се изпълнява успешно но завършва с segmentation. Ако не се излълнява скрипта горното не е вярно :)


Титла: Re: Защо PHP-CLI дава SegFault, а MOD_PHP работи
Публикувано от: tmcdos в Jan 08, 2009, 11:56
Аз изобщо не изпълнявам скрипт - просто пускам PHP от командния ред без никакви опции, или пък с опция -v - мисля, че не е заради Exception, а може би някаква неразбория с библиотеки. Жалкото е, че в WINDOWS поне научаваш кой DLL и на какъв адрес е възникнал AV, а тук - пълно мълчание ...


Титла: Re: Защо PHP-CLI дава SegFault, а MOD_PHP работи
Публикувано от: laskov в Jan 08, 2009, 12:15
Предполагам, че ти липсва някакъв пакет, който не е нужен при конфигуриране с ./configure без допълнителни опции, но е нужен за някоя от опциите, които задаваш. Предполагам, че конфиг скрипта или компилатора е казал за някаква нефатална грешка, на която ти не си обърнал внимание. Ако е така, виж каква е грешката, инсталирай необходимия пакет и компилирай наново.
Ако пък не откриеш съобщение за грешка, ще трябва да гадаеш.


Титла: Re: Защо PHP-CLI дава SegFault, а MOD_PHP работи
Публикувано от: tmcdos в Jan 08, 2009, 15:16
Пробвах да пусна PHP през STRACE - тръгна без проблем, не даде Segmentation Fault и изпълни "phpinfo();" която въведох на командния ред. Мога да покажа и съобщенията на "configure" и на "make" - но са голям обем


Титла: Re: Защо PHP-CLI дава SegFault, а MOD_PHP работи
Публикувано от: zeridon в Jan 08, 2009, 15:48
запази ги във файловете и ги прикачи (форума поддържа тази функционалност) от допълнителните опции за поста


Титла: Re: Защо PHP-CLI дава SegFault, а MOD_PHP работи
Публикувано от: tmcdos в Jan 08, 2009, 16:22
output.log - това са съобщенията на екрана от
Цитат
./configure --with-apxs2=/usr/local/apache2/bin/apxs \
   --with-mysql=/usr/local/mysql \
   --with-curl --enable-sockets \
   --without-iconv --with-config-file-path=/usr/local/lib \
   --disable-pdo --disable-reflection --disable-tokenizer \
   --disable-spl --disable-ipv6 --disable-ctype --disable-filter \
   --without-sqlite --without-xmlrpc --without-pear --without-cdb
config.log - лог-файла на "configure"
make.log - съобщенията на екрана от "make"
test.log - съобщенията от "make test"


Титла: Re: Защо PHP-CLI дава SegFault, а MOD_PHP работи
Публикувано от: tmcdos в Jan 10, 2009, 21:02
Не успях да открия проблема, но ето с тези опции няма Segmentation Fault:
Цитат
./configure --without-apxs2 --without-apache --enable-sigchild \
   --with-mysql=/usr/local/mysql \
   --without-iconv --with-config-file-path=/usr/local/lib \
   --disable-libxml --disable-dom --without-mcrypt --disable-posix \
   --disable-simplexml --disable-xml --disable-xmlreader --disable-xmlwriter \
   --disable-pdo --disable-reflection --disable-tokenizer \
   --disable-spl --disable-ipv6 --disable-ctype --disable-filter \
   --without-sqlite --without-xmlrpc --without-pear --without-cdb \
   --disable-cgi