I am trying to add SSH2 support in my product. I am using Apache 2.0.4.7 with PHP 5.2.4.
For SSH2 support, i had compiled PECL/SSH2 package and created ssh2.so.
I used to run PHP using libphp5.so through httpd.conf. I struck at the creation of libphp5.so file.
<LoadModule php5_module /home/nprasanna/test/modules/libphp5.so>
I downloaded the latest PHP 5.2.4 and install it and got the libphp5.so, but i dont know how to include the ssh2.so while creating libphp5.so.
Please let me know, whether it is possible to create libphp5.so with ssh2.so support and make it work using Apache.
Also i tried by compiling PHP with a custom_php.ini file, (--with-config-file-path). In that custom_php.ini, i specified the ssh2.so as extension=ssh2.so, with the correct path of extension_dir value, failed that case too.
Please guide me how to use shh2.so in libphp5.so. whether we need to specify this at the creation of libphp5.so or we can make this possible by custom php.ini file.
Tato sekce shrnuje nejčastější chyby, které se vyskytují při sestavování PHP.
- 54.1. Pomocí anonymního přístupu do CVS jsem získal poslední verzi PHP, ale chybí v ní skript "configure"!
- 54.2. Mám problém nakonfigurovat PHP tak, aby fungovalo se serverem Apache. Hlásí, že nemůže najít httpd.h, ale ten je přesně tam, kde jsem uvedl, že je!
- 54.3. Když spustím "configure", hlásí to, že nemůže najít "include" soubory nebo knihovny pro GD, gdbm a nějaké další balíky!
- 54.4. Když se kompiluje soubor language-parser.tab.c, hlásí to chyby, které říkají 'yytname undeclared'.
- 54.5. Když spustím "make", zdá se, že běží dobře, ale havaruje, když se pokouší sestavit konečnou aplikaci s hlášením, že nemůže najít nějaké soubory.
- 54.6. Při sestavování PHP to hlásí mnoho nedefinovaných referencí.
- 54.7. Nepřišel jsem na to, jak sestavit PHP pro Apache 1.3.
- 54.8. Postupoval jsem přesně podle instrukcí k instalaci PHP ve verzi jako modul pro Apache na UNIXu, a moje PHP skripty se zobrazují v prohlížeči nebo se je prohlížeč snaží uložit jako soubory.
- 54.9. Hlásí to použití --activate-module=src/modules/php4/libphp4.a, ale tento soubor neexistuje; proto jsem to změnil na --activate-module=src/modules/php4/libmodphp4.a a ono to nefunguje? O co jde?
- 54.10. Když zkusím sestavit Apache s PHP jakožto statickým modulem pomocí --activate-module=src/modules/php4/libphp4.a, hlásí to, že můj kompilátor nevyhovuje ANSI.
- 54.11. Když zkusím sestavit PHP s parametrem --with-apxs, dostanu záhadné chybové zprávy.
- 54.12. During 'make', I get errors in microtime, and a lot of 'RUSAGE_' stuff.
- 54.13. Chci upgradovat své PHP. Kde najdu tvar řádku ./configure, který byl použit pro sestavení stávající instalace PHP?
| 54.1. | Pomocí anonymního přístupu do CVS jsem získal poslední verzi PHP, ale chybí v ní skript "configure"! |
Musíte mít nainstalovaný balík "GNU autoconf", takže můžete vygenerovat skript "configure" z "configure.in". Po stažení zdrojových souborů z CVS serveru spusťte ./buildconf z nejvyšší adresářové úrovně (pokud nespustíte "configure" s parametrem --enable-maintainer-mode, skript "configure" nebude automaticky aktualizován při změně souboru "configure.in", takže se musíte ujistit, zda jste to udělali ručně poté, co byl "configure.in" změněn. Jedním z příznaků tohoto je nalezení elementů jako @VARIABLE@ v souboru "Makefile" potom, co byl spuštěn "configure" nebo "config.status"). | |
| 54.2. | Mám problém nakonfigurovat PHP tak, aby fungovalo se serverem Apache. Hlásí, že nemůže najít httpd.h, ale ten je přesně tam, kde jsem uvedl, že je! |
Potřebujete sdělit konfiguračnímu/instalačnímu skriptu umístění nejvyšší úrovně zdrojových souborů Apache. To znamená, že specifikujete '--with-apache=/path/to/apache' a ne '--with-apache=/path/to/apache/src'. | |
| 54.3. | Když spustím "configure", hlásí to, že nemůže najít "include" soubory nebo knihovny pro GD, gdbm a nějaké další balíky! |
Můžete určit, aby skript "configure" hledal hlavičkové soubory a knihovny na nestandardních místech specifikací pomocných příznaků pro C preprocesor a linker, například:
CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure
Pokud používáte csh (C-shell) jako váš login shell (proč?), bylo by to:
env CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure
| |
| 54.4. | Když se kompiluje soubor language-parser.tab.c, hlásí to chyby, které říkají 'yytname undeclared'. |
Musíte updatovat vaši verzi programu Bison. Nejnovější verzi najdete na » http://www.gnu.org/software/bison/bison.html. | |
| 54.5. | Když spustím "make", zdá se, že běží dobře, ale havaruje, když se pokouší sestavit konečnou aplikaci s hlášením, že nemůže najít nějaké soubory. |
Některé starší verze programu "make" neukládají korektně zkompilované verze souborů umístěných v adresáři funkcí do téhož adresáře. Zkuste spustit "cp *.o functions" a potom znovu 'make', abyste viděli, zda to pomohlo. Pokud ano, měli byste opravdu nainstalovat nejnovější verzi "GNU make". | |
| 54.6. | Při sestavování PHP to hlásí mnoho nedefinovaných referencí. |
Podívejte se do řádku, kde je popsáno sestavování a ujistěte se, že byly přidány na konec všechny potřebné knihovny. Často se stává, že chybí '-ldl' a některé knihovny potřebné pro podporu databáze, kterou jste určili. Pokud sestavujete pro Apache 1.2.x, nezapomněli jste přidat odpovídající informace na řádek EXTRA_LIBS v souboru "configure" a spustit skript pro konfiguraci Apache? Pro více informací se podívejte do souboru » INSTALL, který získáte s distribučním balíkem. Někteří lidé také hlásili, že pokud sestavovali pro Apache, museli přidat '-ldl' těsně za 'libphp4.a'. | |
| 54.7. | Nepřišel jsem na to, jak sestavit PHP pro Apache 1.3. |
Toto je nyní velmi snadné. Následujte pečlivě tyto kroky:
Poznámka: : Můžete použít také nový skript ./configure pro Apache. Přečtěte si instrukce v README.configure, který je v distribuci Apache. Nahlédněte také do souboru INSTALL z distribuce PHP. | |
| 54.8. | Postupoval jsem přesně podle instrukcí k instalaci PHP ve verzi jako modul pro Apache na UNIXu, a moje PHP skripty se zobrazují v prohlížeči nebo se je prohlížeč snaží uložit jako soubory. |
To znamená, že PHP modul není z nějakých důvodů vyvoláván. Dříve, než budete shánět další pomoc, zkontrolujte tři věci:
| |
| 54.9. | Hlásí to použití --activate-module=src/modules/php4/libphp4.a, ale tento soubor neexistuje; proto jsem to změnil na --activate-module=src/modules/php4/libmodphp4.a a ono to nefunguje? O co jde? |
Uvědomte si, že soubor libphp4.a nemá existovat. Vytváří ho proces serveru Apache! | |
| 54.10. | Když zkusím sestavit Apache s PHP jakožto statickým modulem pomocí --activate-module=src/modules/php4/libphp4.a, hlásí to, že můj kompilátor nevyhovuje ANSI. |
Toto je zavádějící chybové hlášení, které bylo odstraněno v pozdějších verzích. | |
| 54.11. | Když zkusím sestavit PHP s parametrem --with-apxs, dostanu záhadné chybové zprávy. |
Je třeba zkontrolovat tři věci. Nejdříve, z důvodu, že když Apache vytváří apxs skript v Perlu, někdy ukončí kompilaci bez odpovídajících proměnných. Najděte skript apxs (zkuste příkaz 'which apxs', někdy bývá v /usr/local/apache/bin/apxs nebo /usr/sbin/apxs). Otevřte ho a zkontrolujte řádky podobné těmto:
my $CFG_CFLAGS_SHLIB = ' '; # nahrazeno pomocí Makefile.tmpl
my $CFG_LD_SHLIB = ' '; # nahrazeno pomocí Makefile.tmpl
my $CFG_LDFLAGS_SHLIB = ' '; # nahrazeno pomocí Makefile.tmpl
Pokud vidíte toto, našli jste ten problém. Mohou se tam vyskytovat
mezery nebo jiné nekorektní hodnoty, např. 'q()'. Změňte řádky
takto:
my $CFG_CFLAGS_SHLIB = '-fpic -DSHARED_MODULE'; # substituted via Makefile.tmpl
my $CFG_LD_SHLIB = 'gcc'; # nahrazeno pomocí Makefile.tmpl
my $CFG_LDFLAGS_SHLIB = q(-shared); # nahrazeno pomocí Makefile.tmpl
Druhý možný problém by měl vyskytovat pouze na Red Hat Linuxu 6.1
a 6.2. Skript apxs v těchto distribucích Red Hat je poškozený.
Najděte řádek
my $CFG_LIBEXECDIR = 'modules'; # nahrazeno pomocí APACI install
Pokud vidíte výše uvedený řádek, nahraďte ho tímto:
my $CFG_LIBEXECDIR = '/usr/lib/apache'; # nahrazeno pomocí APACI install
Nakonec, když budete přeinstalovávat Apache, zařaďte 'make clean'
mezi './configure' a 'make'.
| |
| 54.12. | During 'make', I get errors in microtime, and a lot of 'RUSAGE_' stuff. |
During the 'make' portion of installation, if you encounter problems that look similar to this:
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
Váš systém je poškozen. Musíte opravit soubory v /usr/include instalací balíku glibc-devel, který patří k vašemu glibc. Nemá to absolutně nic společného s PHP. Důkaz získáte tímto jednoduchým testem:
$ cat >test.c <<X
#include <sys/resource.h>
X
$ gcc -E test.c >/dev/null
Pokud se objeví chyby, ve vašich hlavičkových souborech panuje chaos.
| |
| 54.13. | Chci upgradovat své PHP. Kde najdu tvar řádku ./configure, který byl použit pro sestavení stávající instalace PHP? |
Když se podíváte do souboru config.nice ve zdrojovém stromu současné instalace PHP. Není-li k dispozici, jednoduše spusťte skript
Nahoře ve výpisu najdete řádek ./configure, který byl
použit při sestavování stávající instalace.
|
Sestavovací (kompilační) problémy
11-Oct-2007 05:38
@ anca-phpdoc at anca dot tv:
You can use ./configure --with-libxml-dir=/path_to_xml2-config
10-May-2006 12:12
Re Solaris
I was able to compile PHP 5.0.4 under Solaris 2.6 but I had to use gcc to do it. The source is not compatible with the Solaris C preprocessor. I did not have to install any of the gnu utilities (like sed etc) to get it to compile. It clean compiled & linked immediately using gcc 3.3.2.
02-May-2006 07:24
Note on PHP5 setup under RedHat 7
Sometimes php5 fails to build with the following message:
[root@www bin]# ./php5
./php5: error while loading shared libraries: unexpected reloc type 0x80
Below is the configure script used:
# PHP5 CLI build, CGI/SAPI disabled
# Created by configure
'./configure' \
'--enable-libxml' \
'--with-mysql=/path_to_mysql' \
'--with-libxml=/path_to_my_libxml' \
'--program-suffix=5' \
'--disable-cgi' \
"$@"
I used the following trick to get round this:
0. If it is not a clean installation, run 'make clean' to get rid of improperly compiled files
1. run ./configure with required options
2. edit makefile:
2.1 find any LDFLAGS or PROGRAM_LDFLAGS definition
2.2 append -lstdc++ to the end of it
3. Run 'make'
4. Run 'make install'
5. Enjoy!!!
08-Dec-2005 07:48
For the configure newbies among us:
If you update or reinstall any of the libraries used to compile in a different directory than they started out, you will need to make sure that you update the config.cache file (or re-generate it) so that configure will not look in the wrong place for the information.
On Mac OS X, for example, I updated my libxml using Fink. Fink placed the files in the /sw directory. However, php was still looking for important libxml files (such as xml2-config) in the old directory (/usr/bin/xml2-config). After updating config.cache with the new value of the xml2-config path, I was able to compile correctly.
03-Oct-2005 05:15
If the option --with-apsx2=/path/to/apxs seems to have absolutely no effect and if the configure script ignores the Apache 2.x support, try to shutdown your Apache server (/path/to/bin/apachectl stop) and retry.
It worked here.
07-Aug-2005 04:52
I post here because I was unable to find the information on the web.
I hope it will help someone.
Let say you have 2 apache ruuning, on one you want to have disable_functions set and on the other one you don't.
In fact I have (one) solution compiling two differents php modules with differents path to php.ini
using :
--with-config-file-path=/etc/php5 (for the first one)
--with-config-file-path=/etc/php5.nonchroote (for the second one)
for the second one I do not use "make install" but just
"cp .libs/libphp5.so /usr/lib/apache/1.3/libphp5.nonchroote.so"
Then you have to change the
LoadModule php5_module /usr/lib/apache/1.3/libphp5.nonchroote.so in the second httpd.conf
07-Apr-2005 03:07
My problem was actually with mod_dav (which referred me here). Since they took the time to point people here, I thought I'd go ahead and add my two cents worth and expand on the above since it obviously affects PHP as well. I am running Fedora Core 3, Apache 2.0.53, & PHP 5.03. Apache and PHP were built from source.
The first suggestion in section 13 above was close, but not exactly what I needed. jimsteele's suggestion would have worked, but you would have to do it every time you use APXS. What I did was copy these lines:
my $CFG_CFLAGS_SHLIB = '-fpic -DSHARED_MODULE';
my $CFG_LD_SHLIB = 'gcc';
my $CFG_LDFLAGS_SHLIB = q(-shared);
and pasted them in the configuration section of my apxs file. Worked like a champ.
11-Feb-2004 09:17
Compiling mod_php4 port on a clean freeBSD 4.8 install for Apache2 needed FOR_APACHE2= yes manually inserted into Makefile prior to version check.
04-Nov-2002 02:20
If you have customized your Apache to lie about its version number, you may need to edit configure to skip the version number check. Just /APACHE_VERSION in configure to find the instance(s) where configure checks to make sure you have the right combination of --with-apxs or --with_apxs2 and Apache 1.3 or 2.0. Assuming you're smart enough to remember which version of Apache you have, you can just delete or comment out the version check and continue to march.
14-Oct-2001 01:43
Defining the right environment variables for my Apache "make" invocation allowed the correct "apxs" file to be generated for me. Your mileage may vary.
cd ../apache_1.3.22
CFLAGS_SHLIB="-fpic -DSHARED_MODULE" \
LD_SHLIB=gcc \
LDFLAGS_MOD_SHLIB="-shared" \
make
