|
В этом разделе собраны типичные ошибки, возникающие во время построения/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
или, если это невозможно, просто выполните скрипт:
В верхней части вывода будет показана строка ./configure, которая была использована для
построения данной инсталяции PHP. | |