PHP-Nuke по-русски    Главная
Начальная
страница
 Клуб
Русский
клуб
 Разделы
Тематические
разделы
 Ссылки
Каталог
сайтов
 Файлы
Каталог
программ
 Школа
Практические
занятия
 Форум
Форумы
поддержки
Учебник РНР
Назад Вперёд

Глава 49. Проблемы построения РНР

В этом разделе собраны типичные ошибки, возникающие во время построения/build РНР.

1. У меня последняя версия PHP, использующая службу анонимного CVS, но нет скрипта конфигурации!
2. У меня проблемы с конфигурирование PHP для работы с Apache. Он говорит, что не может найти httpd.h, но это файл находится там, где я ему указал!
3. Когда я запускаю configure, он говорит, что не может найти include-файлы или библиотеки для GD, gdbm или ещё какого-нибудь пакета!
4. При компиляции файла language-parser.tab.c  он выдаёт мне ошибки, где говорится, что yytname undeclared.
5. Когда я запускаю make, всё вроде идёт нормально, но затем - облом при попытке компоновки окончательного приложения, и он жалуется, что не может найти некоторые файлы.
6. При компоновке/linking PHP он жалуется на наличие undefined-ссылок.
7. Я не могу выяснить, как построить build PHP с Apache 1.3.
8. Я выполнил все шаги по установке Apache-модуля версии для UNIX, а мои PHP-скрипты выводятся в браузере, или мне задаётся вопрос, сохранить ли файл.
9. Сказано использовать --activate-module=src/modules/php4/libphp4.a, но этот файл не существует, поэтому я вместо него сделал --activate-module=src/modules/php4/libmodphp4.a, а он не работает!? В чём причина?
10. Когда я пытаюсь построить Apache с PHP как static-модулем путём использования --activate-module=src/modules/php4/libphp4.a, он мне говорит, что мой компилятор несовместим с ANSI.
11. Когда я пытаюсь построить PHP с использованием --with-apxs, я получаю странные сообщения об ошибках.
12. В процессе make я получаю ошибки в microtime и много RUSAGE_.
13. Я хочу обновить мой PHP. Где я могу найти строку ./configure, которая использовалась для построения установки моей текущей версии PHP?

1. У меня последняя версия PHP, использующая службу анонимного CVS, но нет скрипта конфигурации!

Вам необходимо иметь установленный пакет GNU autoconf, чтобы вы могли генерировать скрипт конфигурации из configure.in. Просто запустите ./buildconf в директории верхнего уровня после получения исходников с CVS-сервера. (Также, если вы не запустили configure с опцией --enable-maintainer-mode, скрипт configure не будет автоматически перестроен/rebuilt, когда файл configure.in обновляется, поэтому вы обязательно должны сделать это вручную, если configure.in изменяется. Один из симптомов этого - если вы находите что-нибудь вроде @VARIABLE@ в вашем Makefile после конфигурирования или если config.status работает.)

2. У меня проблемы с конфигурирование PHP для работы с Apache. Он говорит, что не может найти httpd.h, но это файл находится там, где я ему указал!

Вы должны сообщить configure/setup-скрипту расположение верхнего уровня вашего дерева исходников Apache. Это означает, что вы должны специфицировать --with-apache=/path/to/apache, а не --with-apache=/path/to/apache/src.

3. Когда я запускаю configure, он говорит, что не может найти include-файлы или библиотеки для GD, gdbm или ещё какого-нибудь пакета!

Вы можете сделать так, чтобы configure-скрипт искал header-файлы и библиотеки в нестандартном месте, специфицировав дополнительные флаги для передачи их препроцессору C и компоновщику/linker таким образом:
CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure

Если вы используете csh-вариант для вашей оболочки логина (почему?), это может быть:

env CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure

4. При компиляции файла language-parser.tab.c  он выдаёт мне ошибки, где говорится, что yytname undeclared.

Вам необходимо обновить вашу версию Bison. Вы можете найти последнюю версию по адресу ftp://ftp.gnu.org/pub/gnu/bison/

5. Когда я запускаю make, всё вроде идёт нормально, но затем - облом при попытке компоновки окончательного приложения, и он жалуется, что не может найти некоторые файлы.

Некоторые старые версии make некорректно помещают откомпилированные версии файлов в functions-директории в ту же самую директорию. Попытайтесь запустить cp *.o functions, а затем перезапустить make и посмотреть, поможет ли это. Если помогло, вам действительно необходимо обновить до последней версии GNU make.

6. При компоновке/linking PHP он жалуется на наличие undefined-ссылок.

Посмотрите на строку компоновки и убедитесь, что все необходимые библиотеки подключены в конце. Обычно упускают '-ldl' и любые библиотеки, необходимые для поддержки баз данных, которую вы включили.

Если вы компоновали с Apache 1.2.x, не забыли ли вы добавить нужную информацию в строку EXTRA_LIBS Configuration-файла и перезапустить Configure-скрипт Apache'а? См. INSTALL-файл, который поставляется с дистрибутивом.

Многие также сообщают, что они добавили '-ldl' сразу после libphp4.a при компоновке с Apache.

7. Я не могу выяснить, как построить build PHP с Apache 1.3.

Это в действительности довольно легко. Внимательно выполните следующие шаги:

  • Получите последний дистрибутив Apache 1.3 с http://www.apache.org/dist/.

  • Ungzip и untar его где-нибудь, например, в /usr/local/src/apache-1.3.

  • Скомпилируйте PHP, запустив сначала ./configure --with-apache=/<path>/apache-1.3 (замените <path> не реальный путь к вашей директории apache-1.3.

  • Введите make и затем make install для построения/build PHP и скопируйте нужные файлы в дерево дистрибутива Apache.

  • Измените директории на вашу директорию /<path>/apache-1.3/src и отредактируйте файл Configuration. Добавьте в этот файл: AddModule modules/php4/libphp4.a.

  • Введите: ./Configure с последующим make.

  • Вы не должны иметь httpd binary с включённым PHP!

Примечание: вы можете также использовать новый Apache ./configure-скрипт. См инструкции в файле README.configure, который является частью вашего дистрибутива Apache. Просмотрите также файл INSTALL в дистрибутиве PHP.

8. Я выполнил все шаги по установке Apache-модуля версии для UNIX, а мои PHP-скрипты выводятся в браузере, или мне задаётся вопрос, сохранить ли файл.

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

  • Убедитесь, что httpd binary, запущенный у вас, действительно является новым httpd-экзешником, только что построенным вами. Для этого попытайтесь запустить: /path/to/binary/httpd -l

    Если вы не видите mod_php4.c, то у вас запущен не тот binary. Найдите и установите корректный binary.

  • Убедитесь, что вы добавили корректный Mime Type в один из .conf-файлов Apache. Это должен быть: AddType application/x-httpd-php3 .php3 (для PHP 3)

    или AddType application/x-httpd-php .php (для PHP 4)

    Также убедитесь, что эта строка AddType не спрятана внутри блока <Virtualhost> или <Directory>, что предотвращает его применение к местоположению вашего тестового скрипта.

  • Наконец, размещение фалов конфигурации Apache изменилось для версии Apache 1.3. Вы должны убедиться, что файл конфигурации, в который вы добавили строку AddType, действительно читается. Вы можете намеренно поместить синтаксическую ошибку в файл httpd.conf или сделать какое-нибудь иное очевидное изменение, которое поможет понять, читается ли этот файл корректно.

9. Сказано использовать --activate-module=src/modules/php4/libphp4.a, но этот файл не существует, поэтому я вместо него сделал --activate-module=src/modules/php4/libmodphp4.a, а он не работает!? В чём причина?

Обратите внимание, что существование файла libphp4.a не поддерживается. Процесс Аpache создаст его!

10. Когда я пытаюсь построить Apache с PHP как static-модулем путём использования --activate-module=src/modules/php4/libphp4.a, он мне говорит, что мой компилятор несовместим с ANSI.

Это вводящее в заблуждение сообщение об ошибке от Apache, которое устранено в последующих версиях.

11. Когда я пытаюсь построить PHP с использованием --with-apxs, я получаю странные сообщения об ошибках.

Здесь нужно проверить три вещи. Во-первых, когда, по некоторым причинам, Apache строит Perl-скрипт apxs, он иногда заканчивает построение без нужных переменных компилятора и флагов. Найдите ваш скрипт apxs (попробуйте команду which apxs, она может найти его в /usr/local/apache/bin/apxs или в /usr/sbin/apxs). Откройте его и проверьте строки наподобие этих:
my $CFG_CFLAGS_SHLIB  = ' ';          # заменено через Makefile.tmpl
my $CFG_LD_SHLIB      = ' ';          # заменено через Makefile.tmpl
my $CFG_LDFLAGS_SHLIB = ' ';          # заменено через Makefile.tmpl

Если вы видите это, вы нашли проблему. В строках могут содержаться пробелы или другие некорректные значения, такие как 'q()'. Измените эти строки так:

my $CFG_CFLAGS_SHLIB  = '-fpic -DSHARED_MODULE'; # заменено через Makefile.tmpl
my $CFG_LD_SHLIB      = 'gcc';                   # заменено через Makefile.tmpl
my $CFG_LDFLAGS_SHLIB = q(-shared);              # заменено через Makefile.tmpl

Вторая проблема может появиться только в Red Hat 6.1 и 6.2. Скрипт apxs, поставляемый в Red Hat, нарушен. Найдите такую строку:

my $CFG_LIBEXECDIR    = 'modules';         # заменено через APACI install

Если нашли, измените её так:

my $CFG_LIBEXECDIR    = '/usr/lib/apache'; # заменено через APACI install

Наконец, если вы реконфигурировали/реинсталировали Apache, добавьте make clean в процесс после ./configure и перед make.

12. В процессе make я получаю ошибки в microtime и много RUSAGE_.

В ходе выполнения части make процесса инсталяции, если вы обнаружите проблемы, которые выглядят примерно так:
microtime.c: In function `php_if_getrusage':
microtime.c:94: storage size of `usg' isn't known
microtime.c:97: `RUSAGE_SELF' undeclared (first use in this function)
microtime.c:97: (Each undeclared identifier is reported only once
microtime.c:97: for each function it appears in.)
microtime.c:103: `RUSAGE_CHILDREN' undeclared (first use in this function)
make[3]: *** [microtime.lo] Error 1
make[3]: Leaving directory `/home/master/php-4.0.1/ext/standard'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/home/master/php-4.0.1/ext/standard'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/master/php-4.0.1/ext'
make: *** [all-recursive] Error 1

это будет означать, что ваша система нарушена. Вам нужно исправить ваши файлы /usr/include, установив пакет glibc-devel, соответствующий вашей glibc. В РНР ничего здесь исправлять не надо. Чтобы самостоятельно проверить это, сделайте простой тест:
$ cat >test.c <<X
#include <sys/resource.h>
X
$ gcc -E test.c >/dev/null

Если вам накидает ошибок, вы будете знать, что это неприятности из ваших include-файлов.

13. Я хочу обновить мой PHP. Где я могу найти строку ./configure, которая использовалась для построения установки моей текущей версии PHP?

Просмотрите файл config.nice в исходном дереве вашей текущей инсталяции PHP или, если это невозможно, просто выполните скрипт:
<?php phpinfo(); ?>
В верхней части вывода будет показана строка ./configure, которая была использована для построения данной инсталяции PHP.


Назад Оглавление Вперёд
Инсталяция Вверх Использование PHP

© RigaNet - Internet studio
For Web site issues, contact the Web master.

Rambler's Top100 Рейтинг@Mail.ru RigaNet