dic 09 2010

Cada versión de php con su propio php.ini

Category: Windows,phpDavid González @ 20:29

Bueno, después de un tiempo de parón, vamos a ver si retomamos el blog. En un servidor windows, bajo IIS, podemos tener dos versiones de php (cada una en su carpeta, php4 y php5) y añadiendo las extensiones en el administrador de Internet Information Services (IIS) nos funcionará sin problemas.

Sabiendo esto, voy a exponer mi caso. Por requisito de un cliente, mi compañero sysadmin y yo, tuvimos que instalar Zend Optimizer (con un .exe siguiente, siguiente…). Una vez instalado, con un phpinfo vimos que los que tenían configurado la versión 5 de php, mostraba la información correctamente. Hasta aquí, perfecto.

El caso es que los dominios que tenían configurado el php4, dejaron de funcionar, mostrando este error por pantalla “La aplicación CGI especificada puede comportarse de forma anormal si no recibe un conjunto completo de encabezados HTTP.” Este error aparecía simplemente con un phpinfo. El error es bastante genérico y no permite acotar el problema y por tanto buscar la solución es más complicado.

Intentamos mediante la consola de windows (CMD) ejecutar el php pero mostraba tantos errores que no era posible encontrar nada útil. Entonces se nos ocurrió, ejecutar el phpinfo desde la consola, pero volcándolo en un fichero de esta forma.

c:\PHP\php.exe phpinfo.php > volcar.txt

Entonces, vimos la clave del problema en esta línea “Configuration File (php.ini) Path C:\XXX\php.ini“. Estaba cargando en la versión 4 de php, el php.ini que había en la carpeta de php5 y claro, daba errores por todo.

La solución era poder configurar el php de tal forma que cada versión de php tuviera su propio php.ini y no tuvieran problemas. La receta de hoy es como solucionar esto.

Para ello, debemos editar el registro. Para abrirlo, debemos ir a INICIO/EJECUTAR/ y escribir regedit.exe. En primero lugar, como prevención, sería recomendable hacer un backup. Simplemente pestaña Archivo/exportar y lo guardamos. Una vez hecho el backup, vamos a modificar el registro. Lo que haremos, es crear una entrada para cada versión de php con su propio path para el php.ini.

Tenemos que crear una nueva clave en HKEY_LOCAL_MACHINE\SOFTWARE\ llamada PHP. Una vez dentro de esta “clave/carpeta” que hemos llamado PHP, una nueva clave para cada versión de php, por ejemplo 4.4.9, 5.2.11 y por último dentro de cada “clave/carpeta” con el nombre de la versión de php, un “valor alfanumérico” con nombre “IniFilePath” y “valor” la ruta donde se encuentra su php.ini (por ejemplo c:\PHP\ o c:\windows\)

Entradas relacionadas

Etiquetas: , ,


ago 05 2010

Compilar con módulo memcache de apache y php

Category: apacheDavid González @ 12:02

En un servidor con apache 2.0 y cpanel, tenía que meter el módulo memcache tanto de php como de apache.

Para compilar apache con este módulo, utilice el propio script de cpanel para recompilar /scripts/easyapache. Es muy sencillo de usar y en la lista de posibles módulos de apache apacere memcache. En cambio no aparece como módulo de php

Lo primero que intente es utilizar una solución que dio hace poco mi compañero sysadmin, en uno de sus post, con estas líneas:

root@tureceta [~]# cat /var/cpanel/easy/apache/rawopts/PHP.5.2.13
--enable-memcache
--enable-pcntl
--enable-sysvsem
--enable-sysvshm
--enable-sysvmsg

Lamentablemente no me funcionó (he de decir que sí me funcionó con otros módulos) y tuve que meter el módulo a mano, con estos sencillos pasos:

cd /usr/src/
wget http://pecl.php.net/get/memcache-2.2.5.tgz
tar zxvf memcache-2.2.5.tgz
cd memcache-2.2.5
phpize
./configure
make
make install

Una vez que ha acabado, tenemos que modificar nuestro php.ini para indicar a php donde esta el módulo y así pueda cargarlo correctamente. En mi caso:

vim /usr/local/lib/php.ini
extension_dir = "/usr/local/lib/php/extensions/no-debug-non-zts-20060613"
extension=memcache.so

Entradas relacionadas

Etiquetas: , ,


abr 09 2010

This function has been DEPRECATED as of PHP 5.3.0

Category: phpDavid González @ 23:32

Cuando dedico un rato a programar en php, con algún proyecto que me sale, en local uso el easyphp. Este programa gratuito de sencilla instalación me ofrece apache+php+mysql.

La versión recomendada que hay ahora, es la 5.3.2 que tiene PHP 5.3.2,  Apache 2.2.14,  MySQL 5.1.43 y PhpMyAdmin 3.2.5

Yo personalmente no había empezado a trabajar con php 5.3, ya que en los servidores todavía tenemos la rama 5.2. Como sabéis las versiones estables de php son la 5.3.2 y 5.2.13.

El caso es que al revisar un proyecto de hace año y medio, me dio este error:

This function has been DEPRECATED as of PHP 5.3.0 and REMOVED as of PHP 6.0.0. Relying on this feature is highly discouraged.

El mensaje es claro, la función que estamos usando esta obsoleta en la versión 5.3.0 y en la versión 6.0.0 ya no existirá. Yo los he solucionado ya, antes de llegar a la versión 6 y ver como mi aplicación deja de funcionar :)

Aunque ya iré comentando errores concretos, en general, los pasos para poder solucionarlo serían los siguientes.

  • Identificar la función que esta dando error. Seguramente saldrá en el mensaje de error.
  • Buscar esta función en la web oficial de php.
  • Normalmente en la propia información de la función nos ofrecen las funciones más parecidas para realizar esa acción
  • Sustituir la función obsoleta por la que es similar. Es posible que los parámetros de una y otra sean diferentes, por lo que hay que tener cuidado y revisarlo bien.

Yo personalmente, he podido solucionar este problema con relativa sencillez.

Entradas relacionadas

Etiquetas: ,