I see that the Recode (3.6) module is also incompatible with the MySQL module as well as the others noted in the "warning" note above.
CXXXII. Recode (GNU)
Introduction
Ce module contient l'interface à la bibliothèque GNU Recode library, version 3.5. La bibliothèque GNU Recode library convertit les fichiers ayant des jeux de caractères différents. Lorsque ce n'est pas possible, elle se débarrasse des caractères illégaux, ou bien effectue une approximation. La bibliothèque reconnaît ou produit près de 150 jeux de caractères différents, et peut quasiment tous les convertir de l'un vers l'autre. La plupart des jeux de caractères de la RFC 1345 sont supportés.
Note : Cette extension n'est pas disponible sur les plates-formes Windows.
Pré-requis
il faut que vous ayez la bibliothèque GNU Recode 3.5 ou plus récente, installée sur votre système. Vous pouvez télécharger GNU Recode ici.
Installation
Pour utiliser ces fonctions, vous devez compiler PHP avec l'option--with-recode[=DIR].
| Avertissement |
Des crashs et des problèmes de démarrage de PHP peuvent être rencontrés lorsque l'extension recode est chargée APRES les extensions MySQL ou imap. Charger l'extension recode avant ces deux extensions corrige le problème. Ceci est dû à un problème technique car la bibliothèque c-client de IMAP et recode ont toutes les deux leur propre fonction hash_lookup() et les extensions mysql et recode ont toutes les deux leur fonction hash_insert. |
Configuration à l'exécution
Cette extension ne définit aucune directive de configuration.
Types de ressources
Cette extension ne définit aucune ressource.
Constantes pré-définies
Cette extension ne définit aucune constante.
- Table des matières
- recode_file -- Recodage de fichier à fichier, en fonction de la requête
- recode_string -- Recode une chaîne en fonction de la requête
- recode -- Alias de recode_string()
Hope this might help someone:
I tried to compile php 4.3.2-RC2 (+some older versions) with recode AND imap (and gd+png+jpeg support, ldap, gettext, zlib .. but these are not interesting right now).
Why? I needed to run Imp + Horde + Turba. Turba talks to LDAP directory (and LDAP uses utf-8 encoding which I need to convert to iso-8859-2), so I modified Turba to use 'recode' for charset conversions utf8<->iso8859-2.
System: FreeBSD4.7+Apache 1.3.27+Ben SSL
I either could not properly compile OR after compiling apache coredumped.
Problem was: imap (libc-client) and recode (librecode) use the same function hash_lookup(). Therefore during loading libphp.so (and libraries it depended on) whole apache crashed. Without a word of what's going on.
The problem is detectable by forcing static linking (in FreeBSD modify librecode.la and change
library_names='librecode.so.0 librecode.so librecode.so'
to
library_names='librecode.a'
Now during linking of php the linker complains of double definition of hash_lookup.
Solution:
-grab recode3.6 from ftp://ftp.gnu.org/pub/gnu/recode/
-unpack, go to src, in files combine.c, hash.c, names.c, recode.c, testdump.c, html.c, hash.h replace hash_lookup() by hash_lookupX() [or invent some better name],
compile recode (i had to do:
setenv CFLAGS "-I/usr/local/include"
setenv LDFLAGS "-L/usr/local/lib -lintl"
./configure --prefix=/usr/local/recode --exec-prefix=/usr/local/recode --without-included-gettext
make
make check
make install
(recode is installed to /usr/local/recode.You can change this and you can force static linking of recode, so that after building libphp.so this modified recode is no longer needed and can be deleted! )
For some reason this recode needs to have externally defined
int error;
therefore we have to modify configure script +one .c php source file:
1. modify configure script of php: find
recode_format_table();
and somewhere before start of main() add
int error;
so the result is:
char *program_name;
int error;
int main() {
recode_format_table();
; return 0; }
(I modified both occurences of recode_format_table() in configure of php4.3.2rc2)
2. run configure, should work ok (my another problem was with imap: though my c-client was compiled WITHOUT ssl, configure complained that it IS using ssl, so i had to edit configure once again and comment following lines:
void mm_searched(void){}
void mm_expunged(void){}
// char ssl_onceonlyinit(); --- commented
int main() {
// ssl_onceonlyinit(); --- commented
return 0;
}
Now configure was rather happy :-)
for the record: I did
./configure --with-apxs=/usr/local/apache/bin/apxs --with-imap --enable-sysvsem --enable-sysvshm --with-sybase=/usr/local/freetds --with-gettext --with-ldap --with-zlib --with-recode=/usr/local/recode -with-gd=/usr/local --with-jpeg-dir=/usr/local --with-png-dir=/usr/local
3. edit ext/recode/recode.c (or any other .c source file, add somewhere (e.g. at the end)
int error;
without it during linking 'error not defined' will be complained.
4. do 'make' and php is yours :-)
It took me 2 days.. so do not delete this note, someone might even find it useful and mail me his thanks :-]
When compiling PHP into Apache as static module Apache configure will complain about an undefined symbol in librecode. You need recode-3.6 (e.g. on ftp://ftp.gnu.org/pub/gnu/recode/) to get rid of this error. It doesn't matter if you're compiling PHP as DSO.
