mirror of
https://github.com/php/doc-ru.git
synced 2026-04-27 09:18:07 +02:00
daef8df962
[skip-lint] [skip-spellcheck]
496 lines
22 KiB
XML
496 lines
22 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<!-- EN-Revision: b8e1b1357def73f310c9f7405035b3acc0cb1eaf Maintainer: shein Status: ready -->
|
||
<!-- Reviewed: no -->
|
||
<chapter xml:id="faq.build" xmlns="http://docbook.org/ns/docbook"
|
||
xmlns:xlink="http://www.w3.org/1999/xlink">
|
||
<title>Проблемы сборки</title>
|
||
<titleabbrev>Проблемы сборки</titleabbrev>
|
||
|
||
<para>
|
||
В этом разделе собраны наиболее общие ошибки, возникающие на этапе сборки.
|
||
</para>
|
||
|
||
<qandaset>
|
||
<qandaentry xml:id="faq.build.configure">
|
||
<question>
|
||
<para>
|
||
Я получил последнюю версию PHP, используя анонимный доступ к Git,
|
||
но в нём нет конфигурационного скрипта!
|
||
</para>
|
||
</question>
|
||
<answer>
|
||
<para>
|
||
Вам нужен установленный пакет GNU autoconf для того, чтобы сгенерировать
|
||
конфигурационный скрипт из <filename>configure.in</filename>.
|
||
После получения исходников с Git сервера просто запустите
|
||
<command>./buildconf</command> в директории верхнего уровня.
|
||
(Также, если вы запускаете <command>configure</command> без опции
|
||
<literal>--enable-maintainer-mode</literal>, то конфигурационный
|
||
скрипт не будет перестроен автоматически при изменении файла
|
||
<filename>configure.in</filename>, поэтому вам необходимо делать это
|
||
вручную, когда вы заметите, что <filename>configure.in</filename> изменился.
|
||
Один из симптомов - появление таких вещей как @VARIABLE@ в вашем Makefile
|
||
после выполнения configure или <filename>config.status</filename>.)
|
||
</para>
|
||
</answer>
|
||
</qandaentry>
|
||
|
||
<qandaentry xml:id="faq.build.configuring">
|
||
<question>
|
||
<para>
|
||
У меня возникают проблемы при конфигурировании PHP для работы с Apache.
|
||
Он говорит, что не может найти <filename>httpd.h</filename>,
|
||
хотя файл находится точно там, где я сказал!
|
||
</para>
|
||
</question>
|
||
<answer>
|
||
<para>
|
||
Для configure/setup скрипта вам необходимо указать
|
||
директорию верхнего уровня, в которой находятся исходники Apache.
|
||
Это означает, что вам надо задать <option role="configure">--with-apache=/path/to/apache</option>,
|
||
а <emphasis>не</emphasis>
|
||
<option role="configure">--with-apache=/path/to/apache/src</option>.
|
||
</para>
|
||
</answer>
|
||
</qandaentry>
|
||
|
||
<qandaentry xml:id="faq.build.lex">
|
||
<question>
|
||
<para>
|
||
Во время конфигурации PHP (<literal>./configure</literal>)
|
||
вы наталкиваетесь на ошибку, схожую со следующей:
|
||
</para>
|
||
<para>
|
||
<screen>
|
||
checking lex output file root... ./configure: lex: command not found
|
||
configure: error: cannot find output from lex; giving up
|
||
</screen>
|
||
</para>
|
||
</question>
|
||
<answer>
|
||
<para>
|
||
Не забудьте внимательно прочитать инструкции по
|
||
<link linkend="install.unix">установке</link> и заметьте, что для
|
||
компиляции PHP вам нужно установить как flex, так и bison.
|
||
В зависимости от ваших настроек, установите bison и flex либо из
|
||
исходников, либо из пакетов, например, RPM.
|
||
</para>
|
||
</answer>
|
||
</qandaentry>
|
||
|
||
<qandaentry xml:id="faq.build.apache-sharedcore">
|
||
<question>
|
||
<para>
|
||
Когда я пытаюсь запустить Apache, я получаю следующее сообщение:
|
||
</para>
|
||
<para>
|
||
<screen>
|
||
fatal: relocation error: file /path/to/libphp4.so:
|
||
symbol ap_block_alarms: referenced symbol not found
|
||
</screen>
|
||
</para>
|
||
</question>
|
||
<answer>
|
||
<para>
|
||
Эта ошибка обычно появляется, если ядро Apache было скомпилировано как
|
||
разделяемая библиотека DSO (Dynamic Shared Object). Попробуйте
|
||
переконфигурировать Apache, используя, по крайней мере, следующие флаги:
|
||
</para>
|
||
<para>
|
||
<screen>
|
||
--enable-shared=max --enable-rule=SHARED_CORE
|
||
</screen>
|
||
</para>
|
||
<para>
|
||
Для более подробной информации читайте файл <filename>INSTALL</filename>
|
||
в директории верхнего уровня или <link xlink:href="&url.apachedso;">
|
||
страницу руководства Apache по DSO</link>.
|
||
</para>
|
||
</answer>
|
||
</qandaentry>
|
||
|
||
<qandaentry xml:id="faq.build.not-found">
|
||
<question>
|
||
<para>
|
||
Когда я запускаю configure, он говорит, что не может найти файлы
|
||
include или библиотеку для GD, gdbm или какого-либо другого пакета!
|
||
</para>
|
||
</question>
|
||
<answer>
|
||
<para>
|
||
Вы можете сделать так, что скрипт configure будет искать файлы
|
||
заголовков или библиотеки в нестандартных местах, задав дополнительные
|
||
флаги для С препроцессора и компоновщика, такие как:
|
||
<programlisting>
|
||
<![CDATA[
|
||
CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure
|
||
]]>
|
||
</programlisting>
|
||
Если вы используете csh-подобную оболочку (зачем?), то это будет:
|
||
<programlisting>
|
||
<![CDATA[
|
||
env CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure
|
||
]]>
|
||
</programlisting>
|
||
</para>
|
||
</answer>
|
||
</qandaentry>
|
||
|
||
<qandaentry xml:id="faq.build.yytname">
|
||
<question>
|
||
<para>
|
||
При компиляции файла <filename>language-parser.tab.c</filename>
|
||
мне выдаются ошибки, говорящие <literal>yytname undeclared</literal>.
|
||
</para>
|
||
</question>
|
||
<answer>
|
||
<para>
|
||
Вам необходимо обновить вашу версию Bison. Последнюю версию можно
|
||
найти на
|
||
<link xlink:href="&url.bison;">&url.bison;</link>.
|
||
</para>
|
||
</answer>
|
||
</qandaentry>
|
||
|
||
<qandaentry xml:id="faq.build.link">
|
||
<question>
|
||
<para>
|
||
Когда я запускаю <command>make</command>, похоже, он выполняется нормально,
|
||
но на конечной линковке жалуется, что не может найти некоторые файлы.
|
||
</para>
|
||
</question>
|
||
<answer>
|
||
<para>
|
||
Некоторые старые версии make ошибочно не помещают скомпилированные
|
||
файлы в поддиректорию functions в той же директории.
|
||
Попробуйте выполнить <command>cp *.o functions</command> и затем
|
||
перезапустить <command>make</command>. Если это помогло, то вам
|
||
действительно надо установить свежую версию GNU make.
|
||
</para>
|
||
</answer>
|
||
</qandaentry>
|
||
|
||
<qandaentry xml:id="faq.build.undefined">
|
||
<question>
|
||
<para>
|
||
При компоновке PHP, он жалуется на некоторые неопределённые ссылки.
|
||
</para>
|
||
</question>
|
||
<answer>
|
||
<para>
|
||
Посмотрите на строку для компоновки и убедитесь, что все нужные библиотеки
|
||
добавлены в конце. Часто забывают '-ldl' и библиотеки, необходимые для
|
||
поддержки включённых вручную баз данных.
|
||
</para>
|
||
<para>
|
||
Некоторые люди также сообщают, что при компоновке с Apache
|
||
им пришлось добавить '-ldl' сразу после <filename>libphp4.a</filename>.
|
||
</para>
|
||
</answer>
|
||
</qandaentry>
|
||
|
||
<qandaentry xml:id="faq.build.not-running">
|
||
<question>
|
||
<para>
|
||
Я следовал всем шагам по установке модульной версии для Apache на Unix,
|
||
но мои PHP-скрипты выводятся в браузере или я получаю запрос сохранить файл.
|
||
</para>
|
||
</question>
|
||
<answer>
|
||
<para>
|
||
Это означает, что по какой-то причине модуль PHP не вызывается.
|
||
Перед тем как обращаться за помощью, проверьте три вещи:
|
||
<itemizedlist>
|
||
<listitem>
|
||
<simpara>
|
||
Убедитесь, что запускаемый вами бинарник httpd действительно новый,
|
||
только что построенный httpd. Для этого попробуйте запустить:
|
||
<literal>/path/to/binary/httpd -l</literal>
|
||
</simpara>
|
||
<simpara>
|
||
Если вы не видите <filename>mod_php4.c</filename> в списке, то вы
|
||
запускаете не тот бинарник. Найдите и установите правильный бинарник.
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
Убедитесь, что вы добавили правильный Mime Type в один из ваших
|
||
<literal>Apache .conf</literal>
|
||
файлов. Это должно быть: <literal>AddType application/x-httpd-php .php</literal>
|
||
</simpara>
|
||
<simpara>
|
||
Также убедитесь, что эта строка AddType не попала внутрь
|
||
<Virtualhost> или <Directory> блока, так как это не
|
||
даст
|
||
ей работать с местонахождением вашего тестового скрипта.
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
Наконец, между Apache 1.2 и Apache 1.3 расположение конфигурационных
|
||
файлов Apache по умолчанию изменилось. Вам надо проверить, что
|
||
действительно читается тот конфигурационный файл, в который вы
|
||
добавили строку AddType. Вы можете внести очевидную синтаксическую
|
||
ошибку в ваш &httpd.conf; файл или какое-либо другое заметное
|
||
изменение, которое покажет вам, что читается правильный файл.
|
||
</simpara>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</para>
|
||
</answer>
|
||
</qandaentry>
|
||
|
||
<qandaentry xml:id="faq.build.activate-module">
|
||
<question>
|
||
<para>
|
||
В документации рекомендуется использовать:
|
||
<literal>--activate-module=src/modules/php4/libphp4.a</literal>,
|
||
но такой файл не существует, поэтому я заменил это на
|
||
<literal>--activate-module=src/modules/php4/libmodphp4.a</literal>
|
||
и оно не работает!? Что происходит?
|
||
</para>
|
||
</question>
|
||
<answer>
|
||
<para>
|
||
Заметьте, что файл <filename>libphp4.a</filename> не должен
|
||
существовать.
|
||
Он будет создан в процессе!
|
||
</para>
|
||
</answer>
|
||
</qandaentry>
|
||
|
||
<qandaentry xml:id="faq.build.ansi">
|
||
<question>
|
||
<para>
|
||
Когда я пытаюсь собрать Apache c PHP в виде статического модуля,
|
||
используя <literal>--activate-module=src/modules/php4/libphp4.a</literal>
|
||
он говорит, что мой компилятор не ANSI-совместимый.
|
||
</para>
|
||
</question>
|
||
<answer>
|
||
<para>
|
||
Сообщение об ошибке вводит в заблуждение; это исправлено в более
|
||
свежих версиях Apache.
|
||
</para>
|
||
</answer>
|
||
</qandaentry>
|
||
|
||
<qandaentry xml:id="faq.build.apxs">
|
||
<question>
|
||
<para>
|
||
Когда я пытаюсь собрать PHP с помощью <option role="configure">--with-apxs</option>,
|
||
я получаю странное сообщение об ошибке.
|
||
</para>
|
||
</question>
|
||
<answer>
|
||
<para>
|
||
Проверьте три вещи. Во-первых, по какой-то причине, когда Apache
|
||
создаёт Perl скрипт apxs, он получается без правильного компилятора и
|
||
переменных, задающих флаги.
|
||
Найдите ваш apxs скрипт (попробуйте команду <command>which apxs</command>),
|
||
иногда он установлен как <filename>/usr/local/apache/bin/apxs</filename>
|
||
или <filename>/usr/sbin/apxs</filename>.
|
||
Откройте его и найдите строки, схожие с этими:
|
||
<programlisting>
|
||
<![CDATA[
|
||
my $CFG_CFLAGS_SHLIB = ' '; # substituted via Makefile.tmpl
|
||
my $CFG_LD_SHLIB = ' '; # substituted via Makefile.tmpl
|
||
my $CFG_LDFLAGS_SHLIB = ' '; # substituted via Makefile.tmpl
|
||
]]>
|
||
</programlisting>
|
||
Если они так и выглядят, то вы нашли вашу проблему. Они могут содержать
|
||
только пробелы или другие неправильные значения, такие как 'q()'.
|
||
Измените эти строки на:
|
||
<programlisting>
|
||
<![CDATA[
|
||
my $CFG_CFLAGS_SHLIB = '-fpic -DSHARED_MODULE'; # substituted via Makefile.tmpl
|
||
my $CFG_LD_SHLIB = 'gcc'; # substituted via Makefile.tmpl
|
||
my $CFG_LDFLAGS_SHLIB = q(-shared); # substituted via Makefile.tmpl
|
||
]]>
|
||
</programlisting>
|
||
Вторая возможная проблема возникает только на Red Hat 6.1 и 6.2.
|
||
Скрипт apxs, поставляемый с Red Hat, сломан. Ищите эту строку:
|
||
<programlisting>
|
||
<![CDATA[
|
||
my $CFG_LIBEXECDIR = 'modules'; # substituted via APACI install
|
||
]]>
|
||
</programlisting>
|
||
Если вы нашли вышеприведённую строку, измените её на следующее:
|
||
<programlisting>
|
||
<![CDATA[
|
||
my $CFG_LIBEXECDIR = '/usr/lib/apache'; # substituted via APACI install
|
||
]]>
|
||
</programlisting>
|
||
И последнее, если вы переконфигурируете/переустанавливаете Apache,
|
||
запустите <command>make clean</command> после <command>./configure</command>
|
||
и перед <command>make</command>.
|
||
</para>
|
||
</answer>
|
||
</qandaentry>
|
||
|
||
<qandaentry xml:id="faq.build.microtime">
|
||
<question>
|
||
<para>
|
||
Во время выполнения <command>make</command> я очень быстро получаю
|
||
ошибки и множество всяких <literal>RUSAGE_</literal>.
|
||
</para>
|
||
</question>
|
||
<answer>
|
||
<para>
|
||
При выполнении <command>make</command> во время установки,
|
||
если вы сталкиваетесь с проблемами, похожими на следующее:
|
||
<programlisting>
|
||
<![CDATA[
|
||
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
|
||
]]>
|
||
</programlisting>
|
||
</para>
|
||
<para>
|
||
Ваша система сломана. Вы должны исправить ваши файлы
|
||
<filename>/usr/include</filename>, установив пакет glibc-devel,
|
||
который соответствует вашей glibc. Это абсолютно не зависит от PHP.
|
||
Для доказательства попробуйте следующий простой тест:
|
||
<programlisting>
|
||
<![CDATA[
|
||
$ cat >test.c <<X
|
||
#include <sys/resource.h>
|
||
X
|
||
$ gcc -E test.c >/dev/null
|
||
]]>
|
||
</programlisting>
|
||
Если выдаются ошибки, то ваши include файлы испорчены.
|
||
</para>
|
||
</answer>
|
||
</qandaentry>
|
||
|
||
<qandaentry xml:id="faq.build.mysql.tempnam">
|
||
<question>
|
||
<para>
|
||
При компиляции PHP с MySQL, configure выполняется нормально,
|
||
но во время <literal>make</literal> я получаю ошибку типа следующей:
|
||
<emphasis>ext/mysql/libmysqlclient/my_tempnam.o(.text+0x46): In function
|
||
my_tempnam': /php4/ext/mysql/libmysqlclient/my_tempnam.c:103: the use
|
||
of tempnam' is dangerous, better use mkstemp'</emphasis>,
|
||
в чём дело?
|
||
</para>
|
||
</question>
|
||
<answer>
|
||
<para>
|
||
Во-первых, важно понимать, что это <literal>Warning</literal> (предупреждение),
|
||
а не фатальная ошибка. Так как это последнее, что выводится во время
|
||
<literal>make</literal>, оно может выглядеть как фатальная ошибка,
|
||
но это не так. Конечно, если ваш компилятор умирает на предупреждениях,
|
||
(Warnings), то тогда да. Также имейте ввиду, что поддержка MySQL
|
||
включена по умолчанию.
|
||
</para>
|
||
<note>
|
||
<para>
|
||
Начиная с PHP 4.3.2 вы также будете видеть следующий текст после
|
||
того как сборка (make) завершится:
|
||
</para>
|
||
<para>
|
||
<screen>
|
||
Build complete.
|
||
(It is safe to ignore warnings about tempnam and tmpnam).
|
||
(Сборка завершена, можно безопасно игнорировать
|
||
предупреждения о tempnam и tmpnam.)
|
||
</screen>
|
||
</para>
|
||
</note>
|
||
</answer>
|
||
</qandaentry>
|
||
|
||
<qandaentry xml:id="faq.build.upgrade">
|
||
<question>
|
||
<para>
|
||
Я хочу обновить мой PHP. Где я могу найти строку
|
||
<command>./configure</command>, которая была использована для моей
|
||
текущей PHP установки?
|
||
</para>
|
||
</question>
|
||
<answer>
|
||
<para>
|
||
Либо смотрите файл config.nice в дереве исходников вашей текущей PHP
|
||
установки, либо, если это недоступно, просто выполните скрипт:
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php phpinfo(); ?>
|
||
]]>
|
||
</programlisting>
|
||
В начале вывода будет находиться строка <command>./configure</command>,
|
||
которая была использована для сборки текущего PHP.
|
||
</para>
|
||
</answer>
|
||
</qandaentry>
|
||
|
||
<qandaentry xml:id="faq.build.gdlibs">
|
||
<question>
|
||
<para>
|
||
При сборке PHP с библиотекой GD, либо выдаются странные ошибки
|
||
компиляции, либо ошибки сегментации (segfaults) при выполнении.
|
||
</para>
|
||
</question>
|
||
<answer>
|
||
<para>
|
||
Убедитесь, что ваша библиотека GD и PHP компонуются с одними и теми же
|
||
зависимыми библиотеками (например, libpng).
|
||
</para>
|
||
</answer>
|
||
</qandaentry>
|
||
|
||
<qandaentry xml:id="faq.installation.needgnu">
|
||
<question>
|
||
<para>
|
||
При компиляции PHP я, кажется, получаю случайные ошибки, например она
|
||
зависает. Я использую Solaris, если это имеет значение.
|
||
</para>
|
||
</question>
|
||
<answer>
|
||
<para>
|
||
Использование не GNU утилит во время компиляции PHP может вызвать
|
||
проблемы.
|
||
Чтобы быть уверенным, что компиляция PHP будет работать,
|
||
используйте GNU утилиты. Например, в Solaris, использование
|
||
SunOS BSD-совместимой или Solaris версии <literal>sed</literal>
|
||
не будет работать, а GNU или Sun POSIX (xpg4) версии
|
||
<literal>sed</literal> будет.
|
||
Ссылки: <link xlink:href="&url.sed;">GNU sed</link>,
|
||
<link xlink:href="&url.flex;">GNU flex</link>, and
|
||
<link xlink:href="&url.bison;">GNU bison</link>.
|
||
</para>
|
||
</answer>
|
||
</qandaentry>
|
||
</qandaset>
|
||
</chapter><!-- Keep this comment at the end of the file
|
||
Local variables:
|
||
mode: sgml
|
||
sgml-omittag:t
|
||
sgml-shorttag:t
|
||
sgml-minimize-attributes:nil
|
||
sgml-always-quote-attributes:t
|
||
sgml-indent-step:1
|
||
sgml-indent-data:t
|
||
indent-tabs-mode:nil
|
||
sgml-parent-document:nil
|
||
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
||
sgml-exposed-tags:nil
|
||
sgml-local-catalogs:nil
|
||
sgml-local-ecat-files:nil
|
||
End:
|
||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||
vim: et tw=78 syn=sgml
|
||
vi: ts=1 sw=1
|
||
-->
|