Table of Contents
[HOWTO] Build PHP (like a redhat)
Descripción de servicio
Php compilado de las fuentes oficiales
Requerimientos de ejemplo de cualquier cliente
bz2 | Calendar | ctype | Curl | Date | |||||
dom | Exif | Filter | ftp | Eaccelertor 0.9.5.3 | |||||
Gd | Gettext | gmp | Hash | Zlib | |||||
Iconv | imagick (v2.2.1) | Imap | Json | Zip | |||||
libxml | Mbstring | mcrypt | memcache | zend optimiser (v3.3.3) | |||||
Mysql | Mysqli | xsl | Xmlwriter | xml | |||||
pdo / pdomysql / pdosqlite | posix | pspell | Reflection | ||||||
session | shmop | Simplexml | sockets |
Las extensiones:
Forman parte del “core” de php desde la 5.2.0
Dependencias habituales
Estas dependencias están tomadas para RedHat Enterprise Linux usando la rhn:
yum install ImageMagick ImageMagick-devel gd gd-devel libxslt libxslt-devel libc-client-devel libpng-devel mysql-devel mysql httpd-devel aspell aspell-devel
Hay varias dependencias que hay que bajarse de DAG
rpm -Uhv paquete_de_dag.rpm yum install libmcrypt libmcrypt-devel libssh2 libssh2-devel rpm -e rpmforge-release
Asegurarse de eliminar el respositorio de dag (rpmforge) |
Dependencias para Oracle (oci8)
Si vamos a instalar soporte oracle: Para el oracle client, ademas de los pasos anteriores, el installer necesita ciertas librerías que no es habitual tener de base en el sistema:
- RHEL4
xorg-x11-deprecated-libs
- RHEL5
yum install libXp libXtst
Paradogicamente usan las libs de 32bits aunque el installer sea el de 64bits ¿?
Codigo fuente
En mi caso este es el último código fuente disponible, siempre es conveniente usar la ultima revision de php (diferente a version, que ya no es tan conveniente, a no ser que la aplicación esté preparada):
cd /apps/software wget "http://fr3.php.net/get/php-5.2.9.tar.bz2/from/fr.php.net/mirror" tar xjfv php-5.2.9.tar.bz2
Extensiones
Las extensiones PECL se pueden añadir antes o después de compilar el PHP.
Extensiones habituales
Las extensiones:
- imagick (extension de php para ImageMagick)
Se tienen que descargar aparte:
wget http://pecl.php.net/get/ssh2-0.11.0.tgz wget http://pecl.php.net/get/memcache-2.2.5.tgz wget wget http://pecl.php.net/get/imagick-2.3.0b1.tgz mv imagick-2.3.0b1.tgz php-imagick-2.3.0b1.tgz mv ssh2-0.11.0.tgz php-ssh2-0.11.0.tgz mv memcache-2.2.5.tgz php-memcache-2.2.5.tgz
Hay varias formas de compilarlas, las 2 recomendables son con “phpize” una vez que está compilado el php o insertandolas en el php antes de compilarlas.
He tenido que usar la version BETA (imagick-2.3.0b1) de la extensión por problemas de compilación que solo se resolvían con esta versión. |
Compilación built-in
RECOMENDADA, Añadir las extensiones al codigo fuente:
cd /apps/software for i in php-imagick-2.3.0b1.tgz php-memcache-2.2.5.tgz php-ssh2-0.11.0.tgz ; do tar xzfv $i ; done ll mv imagick-2.3.0b1/ php-5.2.9/ext/imagick mv memcache-2.2.5/ php-5.2.9/ext/memcache mv ssh2-0.11.0/ php-5.2.9/ext/ssh2 cd php-5.2.9/ mv configure configure.old ./buildconf --force ./configure --help | egrep -i "imagick|memcache|ssh2"
Debería mostrar algo como esto:
[[root@eul2400246|php-5.2.9]]# ./configure --help | egrep -i "imagick|memcache|ssh2" --enable-memcache Enable memcache support --disable-memcache-session Disable memcache session handler support --with-imagick=DIR Enables the imagick extension. DIR is the prefix to Imagemagick installation directory. --with-imagick-gm=DIR GraphicsMagick backend. NO LONGER SUPPORTED! --with-ssh2=DIR Include ssh2 support --with-zlib-dir=DIR memcache: Set the path to ZLIB install prefix.
Compilación phpize
Este modo lo que hace es compilar la librería como “dll” para cargarla mediante php.ini. Recomendado cuando se quiere añadir una nueva extensión sin recompilar el php, hace falta tenerlo compilado previamente.
Esta opción se tiene que usar para el eaccelerator, por eso la pongo como ejemplo:
cd /apps/software/ wget http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2 tar xjfv eaccelerator-0.9.5.3.tar.bz2 mv eaccelerator-0.9.5.3 php-5.2.9/ext/eaccelerator cd php-5.2.9/ext/eaccelerator /apps/php5/bin/phpize ./configure --enable-eaccelerator=shared --with-php-config=/apps/php5/bin/php-config make make install mkdir /apps/php5/ext ; find /apps/php-5.2.9/lib/php/extensions -name eaccelerator.so -exec mv {} /apps/php5/ext/ ;
Post install:
mkdir /tmp/eaccelerator chmod 0777 /tmp/eaccelerator
En este caso habrá que añadir al php.ini la opción típica: extension=eaccelerator.so |
Oci8 (extension oracle)
Oracle client
Lo recomendable es usar el “client” (si, el tocho), php 5.0 NO se puede compilar con soporte oracle con el instant client, el 5.2 en teoría, sí, pero mejor evitar problemas…
- client 11g i686
http://download.oracle.com/otn/linux/oracle11g/linux_11gR1_database_1013.zip
- client 11g x8664 <code> links http://download.oracle.com/otn/linux/oracle11g/linux_x86_11gR1_client.zip </code> * client 10g i686 <code> links http://download.oracle.com/otn/linux/oracle10g/10201/10201_client_linux32.zip </code> * client 10g x8664
links http://download.oracle.com/otn/linux/oracle10g/10201/10201_client_linux_x86_64.cpio.gz gunzip 10201_client_linux_x86_64.cpio.gz cpio -idmv < 10201_client_linux_x86_64.cpio.gz
Uso links por que pide login en la OTN
Dar de alta el usuario de oracle:
groupadd -g 10000 oinstall groupadd -g 10001 dba adduser -u 10000 -g oinstall -G dba -d /oracle -s /bin/bash -c "Usuario software Oracle" -m oracle mkdir /oracle/10.2.0 chown oracle:oinstall -R /oracle/10.2.0
Y añadir las variables de entorno de oracle en caso que sean necesarias:
su - oracle vi ora10.env
ORACLE_BASE=/oracle ORACLE_HOME=/oracle/10.2.0/client ORACLE_SID=<CAMBIAR_EL_ORACLE_SID> ORACLE_TERM=xterm NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P15 PATH=$ORACLE_HOME/bin:$ORACLE_HOME/opmn/bin:$ORACLE_HOME/dcm/bin:$PATH LD_LIBRARY_PATH=$ORACLE_HOME/lib export ORACLE_BASE ORACLE_HOME ORACLE_SID ORACLE_TERM NLS_LANG PATH LD_LIBRARY_PATH
Editar el profile:
vi .bash_profile
Añadir:
. ~/ora10.env
Capturas de la instalación:
Antes de comenzar con la compilación es necesario inicializar varias variables de oracle, basta con usar el ora10.env:
. /oracle/ora10.env
Imap
La extensión imap, es para mí la extensión más difícil de compilar. Por el simple motivo que primero hay que compilar el propio imap. Y es un software bastante críptico. Podéis ver las versiones disponibles aquí. En mi caso la única que he conseguido compilar (y que después funcione el PHP) es la imap-2007a1.tar.Z:
cd /apps/software wget ftp://ftp.cac.washington.edu/imap/imap-2007a1.tar.Z tar xzfv imap-2007a1.tar.Z cd imap-2007a make lrh
Como véis no tiene configure, la documentación es poco menos que imposible de digerir y para colmo en algunas ocasiones compila pero el php NO, en ese caso, se debería compilar en otra máquina.
Las Opciones a añadir en el configure son:
--with-imap=/apps/software/imap-2007a --with-imap-ssl
Compilación
Configure
./configure --enable-memcache --with-imagick --with-ssh2 --with-bz2 --with-curl --enable-calendar --enable-exif --enable-ftp --with-gd --with-gettext --with-gmp --with-imap --enable-mbstring --with-mcrypt --with-mysql --with-mysqli --with-openssl --with-pdo-mysql --with-pspell --enable-shmop --enable-sockets --enable-sysvmsg --enable-wddx --with-xsl --enable-zip --with-zlib --with-kerberos --with-imap-ssl --with-apxs2 --with-libdir=lib64 --with-oci8=shared --prefix=/apps/php5
Compilación
make make install cd /apps ln -s /etc/php.ini /apps/php5/lib/php.ini
Comprobar correcto funcionamiento
/apps/php5/bin/php -i
Opciones adicionales
Zend Optimizer
En caso de que sea necesario el Optimizador de Zend3, por que el cliente tenga los php's compilados, es necesario descargar e instalar. Normalmente el cliente debería proveer del paquete ya que hay que registrarse en la página para obtenerlo, pero sino es un momento.
Instalación de Zend
Descargarlo y moverlo a la hubicación habitual
mv ZendOptimizer-3.3.3-linux-glibc23* /apps/software cd /apps/software tar xzfv ZendOptimizer-3.3.3-linux-glibc23*targz cd ZendOptimizer-3.3.3-linux-glibc23* ./install
Seguir las instrucciones y añadir como path de instalación:
/apps/ZendOptimizer-3.3.3
Y como path para php.ini:
/etc
O dondde esté el php.ini usado por la máquina. El propio installer hace una copia del mismo.
Una vez que esté instalado, lo adecuamos a nuestras instalaciones:
ln -s /apps/ZendOptimizer-3.3.3 /apps/zend3
Borramos el enlace simbólico que crea el propio instalador y restauramos el que teníamos previamente:
rm -fv /etc/php.ini mv /etc/php.ini-zend_optimizer.bak /etc/php.ini
Y añadimos las siguientes lineas al php.ini:
[[Zend]] zend_extension_manager.optimizer=/apps/zend3/lib/Optimizer-3.3.3 zend_extension_manager.optimizer_ts=/apps/zend3/lib/Optimizer_TS-3.3.3 zend_optimizer.version=3.3.3 zend_extension=/apps/zend3/lib/ZendExtensionManager.so zend_extension_ts=/apps/zend3/lib/ZendExtensionManager_TS.so
Comprobamos que el cli de php ha cojido el cambio:
php -i | grep -i optimizer
Que debería dar como resultado algo como:
[[root@htsphp1|buscador_domus]]# php -i | grep -i optimizer with Zend Optimizer v3.3.3, Copyright (c) 1998-2007, by Zend Technologies
Eaccelerator
Si queréis el panel de control de eaccelerator, hay que copiar el fichero “control.php” del código del eaccelerator a algún sitio donde apache pueda ejecutarlo y añadir la siguiente linea al php.ini:
eaccelerator.allowed_admin_path = "/var/www/html"
Ficheros auxiliares para las comprobaciones
Se puede colocar en el directorio del default virtualhost.
php
vi my_info.php
<? phpinfo(); ?>
php+mysql
vi my_test.php
<?php $dbhost = 'localhost'; $dbuser = 'root'; $dbpass = 'password'; $conn = mysql_connect($dbhost, $dbuser, $dbpass) or die('Error connecting to mysql'); $dbname = 'test'; mysql_select_db($dbname); $result = mysql_query("SELECT 1 + 1 ;") or die(mysql_error()); $row = mysql_fetch_array( $result ); echo "<pre>"; print_r($row); echo "</pre>"; ?>
php+oracle
Logicamente hay que cambiar las opciones del ociconnect <code> vi mytest.php </code>
<?php if ($c = oci_connect("user", "pass", "ORACLE_SID")) { echo "Successfully connected to Oracle.n"; oci_close($c); } else { $err = oci_error(); echo "Oracle Connect Error " . $err[['text']]; } ?>