mirror of
https://github.com/php/doc-uk.git
synced 2026-03-23 22:52:14 +01:00
491 lines
22 KiB
XML
491 lines
22 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<!-- EN-Revision: b8e1b1357def73f310c9f7405035b3acc0cb1eaf Maintainer: mproshchuk Status: ready -->
|
||
<chapter xml:id="faq.build" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||
<title>Проблеми збірки</title>
|
||
<titleabbrev>Проблеми збірки</titleabbrev>
|
||
|
||
<para>
|
||
У цьому розділі зібрано найпоширеніші помилки, які виникають під час
|
||
збирання PHP.
|
||
</para>
|
||
|
||
<qandaset>
|
||
<qandaentry xml:id="faq.build.configure">
|
||
<question>
|
||
<para>
|
||
Я отримав останню версію PHP, використавши анонімний сервіс Git, але в ній
|
||
немає скрипту конфігурації!
|
||
</para>
|
||
</question>
|
||
<answer>
|
||
<para>
|
||
У вас має бути встановленим пакунок GNU autoconf, за допомогою якого
|
||
зможете генерувати скрипт конфігурації з
|
||
<filename>configure.in</filename>. Достатньо виконати
|
||
<command>./buildconf</command> в початковій теці після отримання
|
||
початкового коду з сервера Git. (Крім того, допоки ви не запустите
|
||
<command>configure</command> з параметром
|
||
<literal>--enable-maintainer-mode</literal>, скрипт конфігурації не буде
|
||
автоматично перебудовано, коли файл <filename>configure.in</filename>
|
||
оновиться, і вам доведеться робити це вручну, коли
|
||
<filename>configure.in</filename> зміниться. Ознакою того є слова
|
||
@VARIABLE@ у вашому Makefile після запуску конфігурації чи
|
||
<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>
|
||
Ви повинні назвати скрипту конфігурації розташування початкової теки
|
||
початкових кодів 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> та майте на увазі, що вам
|
||
потрібні встановлені пакунки flex і bison, щоб скомпілювати PHP. Залежно
|
||
від ваших налаштувань, 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
|
||
для спільного використання. Спробуйте переконфігурувати Apache,
|
||
упевнившись, що ви використали принаймні наступні прапорці:
|
||
</para>
|
||
<para>
|
||
<screen>
|
||
--enable-shared=max --enable-rule=SHARED_CORE
|
||
</screen>
|
||
</para>
|
||
<para>
|
||
Більше інформації вгорі файлу Apache'а <filename>INSTALL</filename> або на
|
||
<link xlink:href="&url.apachedso;">Сторінці посібника з DSO</link> від
|
||
Apache.
|
||
</para>
|
||
</answer>
|
||
</qandaentry>
|
||
|
||
<qandaentry xml:id="faq.build.not-found">
|
||
<question>
|
||
<para>
|
||
Коли я запускаю скрипт конфігурації, він каже, що не може включити файли
|
||
або бібліотеку GD, gdbm, чи якогось іншого пакунка.
|
||
</para>
|
||
</question>
|
||
<answer>
|
||
<para>
|
||
Ви можете зробити так, щоб скрипт конфігурації шукав файли-заголовки та
|
||
бібліотеки в нестандартних місцях, задавши додаткові прапорці для
|
||
препроцесора C і компонувальника, наприклад:
|
||
<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 не можуть правильно помістити скомпільовані файли
|
||
у теки. Спробуйте запустити <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>
|
||
Дехто каже, що треба дописати '-ldl' відразу після
|
||
<filename>libphp4.a</filename>, коли компонуєте модуль для Apache.
|
||
</para>
|
||
</answer>
|
||
</qandaentry>
|
||
|
||
<qandaentry xml:id="faq.build.not-running">
|
||
<question>
|
||
<para>
|
||
Я послідовно виконав усі кроки встановлення PHP, як модуля Apache у Unix,
|
||
а мої скрипти показуються в браузері, як простий текст, або браузер
|
||
пропонує мені зберегти файл.
|
||
</para>
|
||
</question>
|
||
<answer>
|
||
<para>
|
||
Це означає, що PHP-модуль чомусь не викликається.
|
||
Перед проханням про додаткову допомогу треба перевірити три речі:
|
||
<itemizedlist>
|
||
<listitem>
|
||
<simpara>
|
||
Упевніться, що запущений вами двійковий httpd — той, що ви перед
|
||
цим зібрали. Для цього виконайте: <literal>/path/to/binary/httpd -l</literal>
|
||
</simpara>
|
||
<simpara>
|
||
Якщо ви не бачите у списку <filename>mod_php4.c</filename>, отже
|
||
запущено не той двійковий файл. Знайдіть і встановіть потрібний.
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
Упевніться, що ви додали правильний MIME тип у одному з ваших
|
||
<literal>.conf</literal> файлів Apache. Наприклад:
|
||
<literal>AddType application/x-httpd-php .php</literal>
|
||
</simpara>
|
||
<simpara>
|
||
Також перевірте, чи інструкція AddType не знаходиться за межами
|
||
блоку <Virtualhost> або <Directory>, бо це не дозволить
|
||
застосувати її до вашого тестового скрипта.
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
В решті решт, стандартне розташування файлів конфігурації Apache у
|
||
версій 1.2 і 1.3 — відрізняється. Перевірте, що файли конфігурації,
|
||
в які ви записали 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> і не має існувати.
|
||
Процес Apache створить його!
|
||
</para>
|
||
</answer>
|
||
</qandaentry>
|
||
|
||
<qandaentry xml:id="faq.build.ansi">
|
||
<question>
|
||
<para>
|
||
Коли я намагаюсь зібрати Apache із 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>попередження</literal>, а не
|
||
фатальна помилка. Через те, що здебільшого це кінцевий вивід команди
|
||
<literal>make</literal>, може здатися, що це фатальна помилка, але ні.
|
||
Звісно, якщо ви налаштували свій компілятор "вмирати" від попереджень, то
|
||
це буде нею. Ще майте на увазі, що стандартно підтримка MySQL ввімкнена.
|
||
</para>
|
||
<note>
|
||
<para>
|
||
Починаючи з PHP 4.3.2, після завершення збірки (make) ви також бачитимете
|
||
наступний текст:
|
||
</para>
|
||
<para>
|
||
<screen>
|
||
Build complete.
|
||
(It is safe to ignore warnings about tempnam and tmpnam).
|
||
</screen>
|
||
</para>
|
||
</note>
|
||
</answer>
|
||
</qandaentry>
|
||
|
||
<qandaentry xml:id="faq.build.upgrade">
|
||
<question>
|
||
<para>
|
||
Я хочу оновити мій PHP. Де я можу дізнатися повну команду
|
||
<command>./configure</command>, яка була виконана для збирання
|
||
поточної встановленої версії?
|
||
</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 виводяться дивні помилки компіляції
|
||
або під час виконання — помилки сегментації.
|
||
</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 може спричинити проблеми.
|
||
Використовуйте інструменти GNU для впевненості у належній компіляції PHP.
|
||
Наприклад, у Solaris, використання BSD-сумісних версій
|
||
<literal>sed</literal> від SunOS або Solaris не спрацює, натомість версії
|
||
<literal>sed</literal> від GNU або Sun POSIX (xpg4) будуть працювати.
|
||
Посилання: <link xlink:href="&url.sed;">GNU sed</link>,
|
||
<link xlink:href="&url.flex;">GNU flex</link> та
|
||
<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
|
||
-->
|