Проблеми при компајлирање
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Проблеми при компајлирање
Референца за `faq.build.php` со подобрена типографија и навигација.
Проблеми при компајлирање
Овој дел ги собира најчестите грешки што се јавуваат при градење.
- Ја добив најновата верзија на PHP користејќи ја анонимната Git услуга, но нема скрипта за конфигурација!
- Имам проблеми со конфигурирањето на PHP да работи со Apache. Вели дека не може да ја најде httpd.h, но таа е токму таму каде што реков дека е!
- При конфигурирање на PHP (./configure), наидувате на грешка слична на следната: checking lex output file root... ./configure: lex: command not found configure: error: cannot find output from lex; giving up
- Кога се обидувам да го стартувам Apache, добивам следнава порака: fatal: relocation error: file /path/to/libphp4.so: symbol ap_block_alarms: referenced symbol not found
- Кога го стартувам configure, вели дека не може да ги најде датотеките за вклучување или библиотеката за GD, gdbm, или некој друг пакет!
- Кога се компајлира датотеката language-parser.tab.c, ми дава грешки што велат yytname undeclared.
- Кога го стартувам make, изгледа дека работи добро, но потоа се откажува кога се обидува да ја поврзе конечната апликација, жалејќи се дека не може да најде некои датотеки.
- При поврзување на PHP, се жали на голем број неопределени референци.
- Ги следев сите чекори за инсталирање на верзијата на модулот Apache на Unix, и моите PHP скрипти се прикажуваат во мојот прелистувач или ми се бара да ја зачувам датотеката.
- Вели да се користи: --activate-module=src/modules/php4/libphp4.a, но таа датотека не постои, па ја сменив на --activate-module=src/modules/php4/libmodphp4.a и не работи!? Што се случува?
- Кога се обидувам да го градам Apache со PHP како статички модул користејќи --activate-module=src/modules/php4/libphp4.a, ми кажува дека мојот компајлер не е ANSI усогласен.
- Кога се обидувам да го градам PHP користејќи --with-apxs, добивам чудни пораки за грешки.
- За време на make, добивам грешки во microtime, и многу RUSAGE_ работи.
- При компајлирање на 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', што е погрешно?
- Сакам да го надградам мојот PHP. Каде можам да ја најдам линијата ./configure што беше користена за градење на мојата моментална PHP инсталација?
- При градење на PHP со GD библиотеката, или дава чудни грешки при компајлирање или се откажува при извршување.
- При компајлирање на 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.
- Кога го стартувам configure, вели дека не може да ги најде датотеките за вклучување или библиотеката за GD, gdbm, или некој друг пакет!
-
Можете да го натерате скриптата за конфигурирање да бара заглавја и библиотеки на нестандардни локации со специфицирање на дополнителни знаменца што ќе се проследат до C препроцесорот и линкер, како што се:
Ако користите csh-варијанта за вашата најавна обвивка (зошто?), би било:CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configureenv 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.
- Кога ќе го стартувам make, се чини дека работи добро, но потоа се урива кога се обидува да го поврзе конечниот програм, жалејќи се дека не може да најде некои датотеки.
-
Некои стари верзии на make што не ги ставаат правилно компајлираните верзии на датотеките во директориумот functions во истиот директориум. Обидете се да го стартувате --enable-shared=max --enable-rule=SHARED_CORE и потоа повторно да го стартувате make за да видите дали тоа помага. Ако помогне, навистина треба да надградите на неодамнешна верзија на GNU make.
- При поврзување на 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 навистина се чита. Можете да ставите очигледна синтаксна грешка во вашата
-
cp *.o functions
-
датотека или некоја друга очигледна промена што ќе ви каже дали датотеката се чита правилно.
--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
Ако ова е она што го гледате, сте го нашле вашиот проблем. Тие може да содржат само празни места или други погрешни вредности, како што се 'q()'. Променете ги овие редови за да гласат: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
Вториот можен проблем треба да биде проблем само на Red Hat 6.1 и 6.2. Скриптата apxs што ја испорачува Red Hat е скршена. Побарајте го овој ред:my $CFG_LIBEXECDIR = 'modules'; # substituted via APACI install
Ако го видите горниот ред, променете го на овој: Последно, ако го конфигурирате/инсталирате повторно Apache, додадете make clean ./configure во процесот после make.my $CFG_LIBEXECDIR = '/usr/lib/apache'; # substituted via APACI install
-
и пред 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 Вашиот систем е скршен. Треба да ги поправите вашите
датотеки со инсталирање на пакет glibc-devel што одговара на вашиот glibc. Ова нема апсолутно никаква врска со PHP. За да го докажете ова сами, обидете се со овој едноставен тест:$ cat >test.c <<X #include <sys/resource.h> X $ gcc -E test.c >/dev/null
-
Ако ова исфрла грешки, знаете дека вашите 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 инсталација или, ако ова не е достапно, едноставно ќе стартувате
скрипта. На врвот на излезот, линијата ./configure , што беше искористена за изградба на оваа PHP инсталација, е прикажана.<?php phpinfo(); ?>
- При градење на 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.