PHP.mk документација

Проблеми при компајлирање

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

faq.build.php PHP.net прокси Преводот се освежува
Оригинал на PHP.net
Патека faq.build.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + превод во позадина Кодовите, табелите и белешките остануваат читливи во истиот тек.
Проблеми при компајлирање

Референца за `faq.build.php` со подобрена типографија и навигација.

faq.build.php

Проблеми при компајлирање

Овој дел ги собира најчестите грешки што се јавуваат при градење.

  1. Ја добив најновата верзија на PHP користејќи ја анонимната Git услуга, но нема скрипта за конфигурација!
  2. Имам проблеми со конфигурирањето на PHP да работи со Apache. Вели дека не може да ја најде httpd.h, но таа е токму таму каде што реков дека е!
  3. При конфигурирање на PHP (./configure), наидувате на грешка слична на следната: checking lex output file root... ./configure: lex: command not found configure: error: cannot find output from lex; giving up
  4. Кога се обидувам да го стартувам Apache, добивам следнава порака: fatal: relocation error: file /path/to/libphp4.so: symbol ap_block_alarms: referenced symbol not found
  5. Кога го стартувам configure, вели дека не може да ги најде датотеките за вклучување или библиотеката за GD, gdbm, или некој друг пакет!
  6. Кога се компајлира датотеката language-parser.tab.c, ми дава грешки што велат yytname undeclared.
  7. Кога го стартувам make, изгледа дека работи добро, но потоа се откажува кога се обидува да ја поврзе конечната апликација, жалејќи се дека не може да најде некои датотеки.
  8. При поврзување на PHP, се жали на голем број неопределени референци.
  9. Ги следев сите чекори за инсталирање на верзијата на модулот Apache на Unix, и моите PHP скрипти се прикажуваат во мојот прелистувач или ми се бара да ја зачувам датотеката.
  10. Вели да се користи: --activate-module=src/modules/php4/libphp4.a, но таа датотека не постои, па ја сменив на --activate-module=src/modules/php4/libmodphp4.a и не работи!? Што се случува?
  11. Кога се обидувам да го градам Apache со PHP како статички модул користејќи --activate-module=src/modules/php4/libphp4.a, ми кажува дека мојот компајлер не е ANSI усогласен.
  12. Кога се обидувам да го градам PHP користејќи --with-apxs, добивам чудни пораки за грешки.
  13. За време на make, добивам грешки во microtime, и многу RUSAGE_ работи.
  14. При компајлирање на PHP со MySQL, configure работи добро, но за време на make добивам грешка слична на следната: 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', што е погрешно?
  15. Сакам да го надградам мојот PHP. Каде можам да ја најдам линијата ./configure што беше користена за градење на мојата моментална PHP инсталација?
  16. При градење на PHP со GD библиотеката, или дава чудни грешки при компајлирање или се откажува при извршување.
  17. При компајлирање на PHP добивам навидум случајни грешки, како што се замрзнува. Користам Solaris ако тоа има значење.
Ја добив најновата верзија на PHP користејќи ја анонимната Git услуга, но нема скрипта за конфигурација!

Мора да го имате инсталирано пакетот GNU autoconf за да можете да ја генерирате скриптата за конфигурација од configure.in. Само стартувајте ./buildconf во горната директориум откако ќе ги добиете изворите од Git серверот. (Исто така, освен ако не го стартувате configure со --enable-maintainer-mode опција, скриптата за конфигурирање нема автоматски да се обнови кога configure.in датотеката е ажурирана, затоа треба да се погрижите рачно да го направите тоа кога ќе забележите configure.in се промени. Еден симптом за ова е наоѓање работи како @VARIABLE@ во вашиот Makefile откако ќе се конфигурира или config.status се стартува.)

Имам проблеми со конфигурирањето на PHP да работи со Apache. Вели дека не може да го најде httpd.h, но е токму таму каде што кажав дека е!

Треба да му ја кажете на скриптата за конфигурирање/поставување локацијата на горното ниво на вашето Apache дрво со извори. Ова значи дека сакате да го специфицирате --with-apache=/path/to/apache and not --with-apache=/path/to/apache.

При конфигурирање на PHP (./configure), наидувате на грешка слична на следната:

проверка на излезниот датотечен корен на lex... ./configure: lex: командата не е пронајдена
configure: грешка: не може да се најде излез од lex; се откажувам

Внимателно прочитајте ги installation инструкциите и забележете дека ви требаат и flex и bison инсталирани за да го компилирате PHP. Во зависност од вашата поставка, ќе инсталирате bison и flex од извор или пакет, како што е RPM.

Кога се обидувам да го стартувам Apache, добивам следнава порака:

фатална: грешка при релокација: датотека /path/to/libphp4.so:
симбол ap_block_alarms: референциран симбол не е пронајден

Оваа грешка обично се појавува кога се компајлира основната програма на Apache како DSO библиотека за заедничко користење. Обидете се повторно да го конфигурирате Apache, осигурувајќи се дека користите барем следниве знаменца:


--with-apache=/path/to/apache/src

За повеќе информации, прочитајте го горното ниво на Apache INSTALL датотека или Apache » DSO прирачник.

Кога го стартувам configure, вели дека не може да ги најде датотеките за вклучување или библиотеката за GD, gdbm, или некој друг пакет!

Можете да го натерате скриптата за конфигурирање да бара заглавја и библиотеки на нестандардни локации со специфицирање на дополнителни знаменца што ќе се проследат до C препроцесорот и линкер, како што се:

    CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure
Ако користите csh-варијанта за вашата најавна обвивка (зошто?), би било:
    env CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure
Кога го компајлира датотеката language-parser.tab.c, ми дава грешки што велат yytname undeclared.

Треба да ја ажурирате вашата верзија на Bison. Најновата верзија можете да ја најдете на » http://www.gnu.org/software/bison/bison.html.

При поврзување на PHP, се жали на голем број неопределени референци.

Погледнете ја линијата за поврзување и проверете дали сите соодветни библиотеки се вклучени на крајот. Вообичаени што можеби сте ги пропуштиле се '-ldl' и сите библиотеки потребни за каква било поддршка за базата на податоци што сте ја вклучиле.

Некои луѓе исто така пријавиле дека морале да додадат '-ldl' веднаш по libphp4.a при поврзување со Apache.

Ги следев сите чекори за инсталирање на верзијата на модулот Apache на Unix, и моите PHP скрипти се прикажуваат во мојот прелистувач или ми се бара да ја зачувам датотеката.

Ова значи дека PHP модулот од некоја причина не се повикува. Три работи што треба да ги проверите пред да побарате дополнителна помош:

  • cp *.o functions /path/to/binary/httpd -l Проверете дали бинарниот файл httpd што го користите е всушност новиот бинарен файл httpd што штотуку го изградивте. За да го направите ова, обидете се да го извршите: mod_php4.c Ако не видите
  • значи не го користите правилниот бинарен файл. Пронајдете и инсталирајте го соодветниот бинарен файл. Apache .conf Проверете дали сте го додале соодветниот Mime Type во некој од вашите AddType application/x-httpd-php .php датотеки. Треба да биде:
  • Исто така, проверете дали овој ред AddType не е скриен во блок <Virtualhost> или <Directory> што би спречило негово применување на локацијата на вашата тест скрипта. httpd.conf Конечно, стандардната локација на конфигурациските датотеки на Apache се промени помеѓу Apache 1.2 и Apache 1.3. Треба да проверите дали конфигурациската датотека во која го додавате редот AddType навистина се чита. Можете да ставите очигледна синтаксна грешка во вашата
датотека или некоја друга очигледна промена што ќе ви каже дали датотеката се чита правилно. --activate-module=src/modules/php4/libphp4.aСе вели да се користи: --activate-module=src/modules/php4/libmodphp4.a , но таа датотека не постои, па ја сменив на

и не работи!? Што се случува? libphp4.a Имајте предвид дека

датотеката не треба да постои. Apache процесот ќе ја создаде! --activate-module=src/modules/php4/libphp4.a Кога се обидувам да го изградам Apache со PHP како статички модул користејќи

ми кажува дека мојот компајлер не е во согласност со ANSI.

Ова е погрешна порака за грешка од Apache што е поправена во поновите верзии. --with-apxs Кога се обидувам да го изградам PHP користејќи

добивам чудни пораки за грешка. Тука има три работи за проверка. Прво, поради некоја причина кога Apache го гради apxs Perl скриптата, понекогаш завршува без соодветните променливи за компајлер и знаменца. Пронајдете ја вашата apxs скрипта (обидете се со командатаMake sure that the httpd binary you are running is the actual new httpd binary you just built. To do this, try running: /usr/local/apache/bin/apxs or /usr/sbin/apxs"), понекогаш се наоѓа во

my $CFG_CFLAGS_SHLIB  = ' ';          # substituted via Makefile.tmpl
my $CFG_LD_SHLIB      = ' ';          # substituted via Makefile.tmpl
my $CFG_LDFLAGS_SHLIB = ' ';          # substituted via Makefile.tmpl
. Отворете го и проверете дали има редови слични на овие:
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 
Ако ова е она што го гледате, сте го нашле вашиот проблем. Тие може да содржат само празни места или други погрешни вредности, како што се 'q()'. Променете ги овие редови за да гласат:
my $CFG_LIBEXECDIR    = 'modules';         # substituted via APACI install
Вториот можен проблем треба да биде проблем само на Red Hat 6.1 и 6.2. Скриптата apxs што ја испорачува Red Hat е скршена. Побарајте го овој ред:
my $CFG_LIBEXECDIR    = '/usr/lib/apache'; # substituted via APACI install
Ако го видите горниот ред, променете го на овој: Последно, ако го конфигурирате/инсталирате повторно Apache, додадете make clean ./configure во процесот после make.
и пред makeЗа време на RUSAGE_ stuff.

, добивам грешки во microtime, и многу 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 Вашиот систем е скршен. Треба да ги поправите вашите

$ cat >test.c <<X
#include <sys/resource.h>
X
$ gcc -E test.c >/dev/null
датотеки со инсталирање на пакет glibc-devel што одговара на вашиот glibc. Ова нема апсолутно никаква врска со PHP. За да го докажете ова сами, обидете се со овој едноставен тест:
Ако ова исфрла грешки, знаете дека вашите include датотеки се во хаос. make При компилирање на PHP со MySQL, configure поминува добро, но за време на добивам грешка слична на следната:ext/mysql/libmysqlclient/my_tempnam.o(.text+0x46): In function my_tempnam': /php4/ext/mysql/libmysqlclient/my_tempnam.c:103: употребата на tempnam' е опасна, подобро користете mkstemp'

Прво, важно е да се сфати дека ова е Warning и не фатална грешка. Бидејќи ова често е последниот излез што се гледа за време на make, може да изгледа како фатална грешка, но не е. Се разбира, ако го поставите вашиот компајлер да умре на предупредувања, тоа ќе го направи. Исто така, имајте на ум дека поддршката за MySQL е овозможена по дифолт.

Забелешка:

Од PHP 4.3.2, исто така ќе го видите следниот текст по завршувањето на изградбата (make):


Изградбата завршена.
(Безбедно е да се игнорираат предупредувањата за tempnam и tmpnam).
Сакам да го надградам мојот PHP. Каде можам да го најдам ./configure линијата што беше искористена за изградба на мојата моментална PHP инсталација?

Или ќе го погледнете датотеката config.nice, во дрвото на изворите на вашата моментална PHP инсталација или, ако ова не е достапно, едноставно ќе стартувате

<?php phpinfo(); ?>
скрипта. На врвот на излезот, линијата ./configure , што беше искористена за изградба на оваа PHP инсталација, е прикажана.
При градење на PHP со GD библиотеката, или дава чудни грешки при компајлирање или се откажува при извршување.

Проверете дали вашата GD библиотека и PHP се поврзани со истите зависни библиотеки (на пр. libpng).

При компајлирање на PHP добивам навидум случајни грешки, како што се замрзнува. Користам Solaris ако тоа има значење.

Користењето на не-GNU комунални услуги при компајлирање на PHP може да предизвика проблеми. Бидете сигурни да користите GNU алатки за да бидете сигурни дека компајлирањето на PHP ќе работи. На пример, на Solaris, користењето на верзиите на sed компатибилни со SunOS BSD или Solaris нема да работи, но користењето на GNU или Sun POSIX (xpg4) верзиите на sed ќе работи. Линкови: ), it's sometimes found in, » GNU sedПрепорачаниот начин за избегнување на SQL инјекција е со врзување на сите податоци преку подготвени изрази. Користењето на параметризирани прашања не е доволно за целосно избегнување на SQL инјекција, но тоа е најлесниот и најбезбедниот начин за обезбедување влез во SQL изразите. Сите динамични литерали на податоци во » GNU flex.

Белешки од корисници

Нема белешки од корисници за оваа страница.
На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.