Capítulo 68. Preguntas Frecuentes de Instalación

Esta sección contiene preguntas comunes sobre el modo de instalar PHP. PHP se encuentra disponible para casi cualquier SO (excepto quizás por MacOS antes de OSX), y casi cualquier servidor web.

Para instalar PHP, siga las instrucciones del archivo INSTALL ubicado en la distribución. Los usuarios de windows también deberían leer el archivo install.txt. También existen algunas pistas útiles para usuarios de windows aquí.

1. ¿Porqué no debo usar Apache 2 con un módulo de multi-procesamiento (MPM) multi-hilos en un entorno en producción?
2. Unix/Windows: ¿En dónde debe estar ubicado mi archivo php.ini?
3. Unix: Instalé PHP, ¡pero cada vez que cargo un documento, recibo el mensaje 'Document Contains No Data'! ¿Qué está pasando aquí?
4. Unix: Instalé PHP usando RPMS, ¡pero Apache no está procesando las páginas PHP¡ ¿Qué está pasando aquí?
5. Unix: Instalé PHP 3 usando RPMS, ¡pero no compila con el soporte de bases de datos que necesito! ¿Qué está pasando?
6. Unix: He aplicado el parche de extensiones FrontPage a Apache, y de pronto PHP dejó de funcionar. ¿Es PHP incompatible con las extensiones FrontPage de Apache?
7. Unix/Windows: He instalado PHP, pero cuando intento acceder a un script PHP a través de mi navegador, recibo una pantalla en blanco.
8. Unix/Windows: He instalado PHP, pero cuando intento acceder a un script PHP a través de mi navegador, recibo un error 500 de servidor.
9. Algunos sistemas operativos: He instalado PHP sin errores, pero cuando intento iniciar apache, recibo errores de símbolos indefinidos:
[mi_maquina:usuario /src/php4] root# apachectl configtest
 apachectl: /usr/local/apache/bin/httpd Undefined symbols:
  _compress
  _uncompress
10. Windows: He instalado PHP, pero cuando intento acceder a un script PHP a través de mi navegador, recibo el error:
cgi error:
 The specified CGI application misbehaved by not
 returning a complete set of HTTP headers.
 The headers it did return are:
11. Windows: He seguido todas las instrucciones, ¡pero aun no logro que PHP e IIS trabajen juntos!
12. Cuando corro PHP como CGI con IIS, PWS, OmniHTTPD o Xitami, recibo el siguiente error: Security Alert! PHP CGI cannot be accessed directly..
13. ¿Cómo se si mi php.ini está siendo encontrado y leído? Pareciera que mis cambios no están siendo implementados.
14. ¿Cómo agrego mi directorio de PHP a la variable PATH en Windows?
15. ¿Cómo hago que el archivo php.ini se encuentre disponible para PHP en windows?
16. ¿Es posible usar la negociación de contenido de Apache (opción MultiViews) con PHP?
17. ¿PHP se limita a procesar los métodos de petición GET y POST solamente?

1. ¿Porqué no debo usar Apache 2 con un módulo de multi-procesamiento (MPM) multi-hilos en un entorno en producción?

PHP es pegamento. Es el pegamento usado para construir interesantes aplicaciones web, uniendo docenas de bibliotecas externas y haciéndolas parecer una entidad coherente a través de una interfaz de lenguaje intuitiva y fácil de aprender. La flexibilidad y poder de PHP depende de la estabilidad y robustez de la plataforma subyacente. Necesita de un SO que funcione, un servidor web que funcione y unas bibliotecas externas que funcionen para unirlo todo. Cuando uno cualquiera de estos elementos deja de trabajar, PHP necesita identificar los problemas y solucionarlos rápidamente. Al hacer más complejo el marco de referencia base, no disponiendo de hilos de ejecución completamente separados, segmentos de memoria completamente separados y una caja de arena segura para que cada petición trabaje, se introduce una base débil al sistema de PHP.

Si siente que necesita usar un MPM multi-hilos, puede echarle un vistazo a la configuración FastCGI, en donde PHP corre en su propio espacio de memoria.

Y finalmente, note que esta advertencia contra el uso de un MPM multi-hilos no tiene tanta fuerza en sistemas Windows, ya que la mayoría de bibliotecas en esa platafarma tienden a ser seguras en entornos multi-hilo.

2. Unix/Windows: ¿En dónde debe estar ubicado mi archivo php.ini?

Por defecto, en Unix debe estar en /usr/local/lib, lo que es, <ruta-instalacion>/lib. La mayoría de personas querrán modificar éste valor en tiempo de compilación con la bandera --with-config-file-path. Podría, por ejemplo, definirla como:
--with-config-file-path=/etc
Y luego copiaría php.ini-dist desde su distribución a /etc/php.ini y lo editaría para hacer cualquier modificación local que desee.

--with-config-file-scan-dir=PATH

En windows, la ruta predeterminada para el archivo php.ini es el directorio de windows. Si está usando el servidor web Apache, php.ini será buscado primero en el directorio de instalación de Apache, p.ej. c:\program files\apache group\apache. De este modo, puede contar con diferentes archivos php.ini para diferentes versiones de Apache en la misma máquina.

Vea también el capítulo sobre el archivo de configuración.

3. Unix: Instalé PHP, ¡pero cada vez que cargo un documento, recibo el mensaje 'Document Contains No Data'! ¿Qué está pasando aquí?

Esto probablemente quiere decir que PHP está sufriendo algún tipo de dificultad y está produciendo volcados de memoria. Eche un vistazo a su registro de errores del servidor para ver si éste es el caso, y luego trate de reproducir el problema con un pequeño caso de prueba. Si sabe cómo usar 'gdb', es muy útil cuando puede proveer un backtrace con su reporte de fallo para ayudar a los desarrolladores a ubicar el problema. Si está usando PHP como módulo de Apache, intente algo como:

  • Detener todos sus procesos httpd

  • gdb httpd

  • Detener todos sus procesos httpd

  • > run -X -f /ruta/hacia/httpd.conf

  • Luego recuperar la URL que causa el problema con su navegador

  • > run -X -f /ruta/hacia/httpd.conf

  • Si está recibiendo un volcado de memoria, gdb debe informarle de ésto.

  • escriba: bt

  • Ahora debe incluir su backtrace en su reporte de fallo. Éste debe ser enviado desde http://bugs.php.net/

Si su script usa las funciones de expresiones regulares (ereg() y amigas), debe asegurarse de que compiló PHP y Apache con el mismo paquete de expresiones regulares. Esto debe pasar automáticamente con PHP y Apache 1.3.x

4. Unix: Instalé PHP usando RPMS, ¡pero Apache no está procesando las páginas PHP¡ ¿Qué está pasando aquí?

Asumiendo que ha instalado tanto Apache como PHP desde paquetes RPM, necesita remover los caracteres de comentario, o agregar algunas o todas de las siguientes líneas en su archivo httpd.conf:
# Modulos Extra
AddModule mod_php.c
AddModule mod_php3.c
AddModule mod_perl.c

# Modulos Extra
LoadModule php_module         modules/mod_php.so
LoadModule php3_module        modules/libphp3.so     # para PHP 3
LoadModule php4_module        modules/libphp4.so     # para PHP 4
LoadModule perl_module        modules/libperl.so
Y agregar:
AddType application/x-httpd-php3 .php3    # para PHP 3
AddType application/x-httpd-php .php      # para PHP 4
... a las propiedades globales, o a las propiedades del VirtualDomain para el cual desea tener soporte de PHP.

5. Unix: Instalé PHP 3 usando RPMS, ¡pero no compila con el soporte de bases de datos que necesito! ¿Qué está pasando?

Debido a la forma en que se compila PHP 3, no es sencillo crear un RPM de PHP flexible completo. Este problema es atendido en PHP 4. Para PHP 3, actualmente le sugerimos que use el mecanismo descrito en el archivo INSTALL.REDHAT en la distribución de PHP. Si insiste en usar una versión RPM para PHP 3, continúe leyendo...

Los empaquetadores de RPM están configurando los RPMS para ser instalados sin soporte de bases de datos para simplificar las instalaciones y porque los RPMS usan /usr/ en lugar del directorio /usr/local/ estándar para los archivos. Usted necesita decirle al archivo spec del RPM cuáles bases de datos soportar y la ubicación del nivel más alto de su servidor de bases de datos.

Este ejemplo explicará el proceso de agregar soporte para el popular servidor de bases de datos MySQL, usando la instalación de módulo para Apache.

Por supuesto, toda esta información puede ser ajustada para cualquier servidor de bases de datos soportada por PHP. Asumiremos que ha instalado MySQL y Apache completamente con RPMS para este ejemplo también.

  • Primero remueva mod_php3 :
    rpm -e mod_php3

  • Luego obtenga el rpm fuente e INSTÁLELO, NO use --rebuild
    rpm -Uvh mod_php3-3.0.5-2.src.rpm

  • Luego edite el archivo /usr/src/redhat/SPECS/mod_php3.spec

    En la sección %build agrege el soporte de bases de datos que desea, y la ruta.

    Para MySQL, usted agregaría --with-mysql=/usr La sección %build se verá algo como:
    ./configure --prefix=/usr \
    --with-apxs=/usr/sbin/apxs \
    --with-config-file-path=/usr/lib \
    --enable-debug=no \
    --enable-safe-mode \
    --with-exec-dir=/usr/bin \
    --with-mysql=/usr \
    --with-system-regex

  • Una vez está hecha esta modificación, compile el rpm binario de este modo:
    rpm -bb /usr/src/redhat/SPECS/mod_php3.spec

  • Luego instale el rpm
    rpm -ivh /usr/src/redhat/RPMS/i386/mod_php3-3.0.5-2.i386.rpm

Asegúrese de reiniciar Apache, y ahora tendrá PHP 3 con soporte para MySQL usando RPM's. Note que probablemente es mucho más fácil simplemente compilar a partir del tarball de distribución de PHP 3 y seguir las instrucciones encontradas en INSTALL.REDHAT.

6. Unix: He aplicado el parche de extensiones FrontPage a Apache, y de pronto PHP dejó de funcionar. ¿Es PHP incompatible con las extensiones FrontPage de Apache?

No, PHP trabaja bien con las extensiones FrontPage. El problema es que el parche de FrontPage modifica varias estructuras de Apache en las que depende PHP. Recompilar PHP (usando 'make clean ; make') después de que se ha aplicado el parche FP debe solucionar el problema.

7. Unix/Windows: He instalado PHP, pero cuando intento acceder a un script PHP a través de mi navegador, recibo una pantalla en blanco.

Seleccione la acción 'ver código fuente' en el navegador web y probablemente encontrará el código fuente de su script PHP. Esto quiere decir que el servidor web no envió el script a PHP para su interpretación. Algo está mal en la configuración del servidor - revise cuidadosamente la configuración del servidor con las instrucciones de instalación de PHP.

8. Unix/Windows: He instalado PHP, pero cuando intento acceder a un script PHP a través de mi navegador, recibo un error 500 de servidor.

Algo falló cuando el servidor intentó ejecutar PHP. Para poder ver un mensaje de error más útil, desde la línea de comandos, vaya al directorio que contiene el ejecutable PHP (php.exe en Windows) y ejecute php -i. Si PHP tiene algún problema corriendo, entonces se desplegará un mensaje de error apropiado, el cual le dará una pista sobre lo que debe hacer a continuación. Si recibe una pantalla llena de códigos HTML (la salida de la función phpinfo()) entonces PHP está funcionando, y su problema puede estar relacionado con la configuración de su servidor, la cual debe revisar de nuevo.

9. Algunos sistemas operativos: He instalado PHP sin errores, pero cuando intento iniciar apache, recibo errores de símbolos indefinidos:
[mi_maquina:usuario /src/php4] root# apachectl configtest
 apachectl: /usr/local/apache/bin/httpd Undefined symbols:
  _compress
  _uncompress

Esto no tiene nada que ver con PHP en realidad, sino con las bibliotecas de cliente de MySQL. Algunas necesitan --with-zlib, otras no. Esto tema también se cubre en el FAQ sobre MySQL.

10. Windows: He instalado PHP, pero cuando intento acceder a un script PHP a través de mi navegador, recibo el error:
cgi error:
 The specified CGI application misbehaved by not
 returning a complete set of HTTP headers.
 The headers it did return are:

El mensaje de error significa que PHP falló en su intento de producir una salida. Para poder ver un mensaje de error más útil, desde la línea de comandos, vaya al directorio que contiene el ejecutable de PHP (php.exe en Windows) y ejecute php -i. Si PHP tiene algún problema ejecutándose, entonces se desplegará un mensaje de error apropiado, el cual le dará una pista sobre lo que necesita hacer a continuación. Si recibe una pantalla llena de códigos HTML (la salida de la función phpinfo()) entonces PHP está funcionando.

Una vez PHP esté trabajando desde la línea de comandos, intente acceder al script desde el navegador nuevamente. Si aun falla, entonces la causa puede ser alguna de las siguientes:

  • Los permisos de archivo en su script PHP, php.exe, php4ts.dll, php.ini o cualquier extensión PHP que esté tratando cargar son de tal forma que el usuario anónimo de internet ISUR_<nombre_maquina> no tiene acceso a éstos recursos.

  • El archivo del script no existe (o posiblemente no se encuentra en donde cree que está, relativo a su directorio web raíz). Note que para IIS, puede atrapar este error seleccionando la caja 'check file exists' cuando esté configurando la gestión de scripts bajo Internet Services Manager. Si un archivo de script no existe, entonces el servidor devolverán un error 404 en su lugar. También existe el beneficio adicional de que IIS se encargará de cualquier autenticación requerida por usted, basado en los permisos NTLanMan en su archivo de script.

11. Windows: He seguido todas las instrucciones, ¡pero aun no logro que PHP e IIS trabajen juntos!

¡Asegúrese de que cualquier usuario que necesite ejecutar un script PHP tenga los permisos para ejecutar php.exe! IIS usa un usuario anónimo que es agregado al momento de instalar IIS. Este usuario necesita privilegios sobre php.exe. También, cualquier usuario autenticado necesitará permisos para ejecutar php.exe. Y para IIS4, necesita decirle que PHP es un motor de scripts. Asimismo, querrá leer este faq.

12. Cuando corro PHP como CGI con IIS, PWS, OmniHTTPD o Xitami, recibo el siguiente error: Security Alert! PHP CGI cannot be accessed directly..

Debe definir la directiva cgi.force_redirect como 0. Su valor predeterminado es 1, así que asegúrese de que la directiva no se encuentre comentada (con un ;). Como todas las directivas, ésta se define en php.ini

Debido a que su valor predeterminado es 1, es importante que esté 100% seguro de que el archivo php.ini correcto está siendo leído. Lea este faq para más detalles.

13. ¿Cómo se si mi php.ini está siendo encontrado y leído? Pareciera que mis cambios no están siendo implementados.

Para asegurarse de que su php.ini está siendo leído por PHP, haga un llamado a phpinfo(), y cerca del comienzo encontrará un listado llamado Configuration File (php.ini). Éste le dirá en dónde está buscando PHP el archivo php.ini y si está siendo leído o no. Si sólo existe un directorio PATH, entonces no está siendo leído y debe colocar su php.ini en ese directorio. Si php.ini es incluido con la ruta PATH, entonces está siendo leído.

Si php.ini está siendo leido y está ejecutando PHP como un módulo, entonces asegúrese de reiniciar su navegador web después de hacer cambios a php.ini

14. ¿Cómo agrego mi directorio de PHP a la variable PATH en Windows?

En Windows NT, 2000, XP y 2003:

  • Diríjase al Panel de Control y abra el ícono de Sistema (Inicio -> Configuración -> Panel de Control -> Sistema, o simplemente Inicio -> Panel de Control -> Sistema en Windows XP/2003)

  • Vaya a la solapa Avanzado

  • Pulse el botón 'Variables de Entorno'

  • Consulte el panel de 'Variables de Sistema'

  • Encuentre la entrada Path (puede que tenga que desplazarse por la lista para encontrarla)

  • Haga doble clic sobre la entrada Path

  • Ingrese su directorio PHP al final, incluyendo ';' al comienzo (p.ej. ;C:\php)

  • Presione Aceptar y reinicie su máquina

En Windows 98/Me necesita editar el archivo autoexec.bat:

  • Abra el Bloc de Notas (Inicio -> Ejecutar y escriba notepad)

  • Abra el archivo C:\autoexec.bat

  • Ubique la línea con PATH=C:\WINDOWS;C:\WINDOWS\COMMAND;..... y agregue: ;C:\php al final de la línea

  • Guarde el archivo y reinicie su máquina

Nota: Asegúrese de reiniciar después de seguir los anteriores pasos para asegurarse de que los cambias a PATH sean aplicados.

El manual de PHP solía promover la copia de archivos al directorio system de Windows, esto es porque el directorio (C:\Windows, C:\WINNT, etc.) se encuentra por defecto en el valor PATH del sistema. Copiar archivos en el directorio system de Windows se considera obsoleto desde hace bastante tiempo, y puede causar problemas.

15. ¿Cómo hago que el archivo php.ini se encuentre disponible para PHP en windows?

Existen varias formas de lograr esto. Si está usando Apache, lea sus instrucciones específicas de instalación (Apache 1, Apache 2), o de lo contrario debe definir la variable de entorno PHPRC:

En Windows NT, 2000, XP y 2003:

  • Diríjase al Panel de Control y abra el ícono de Sistema (Inicio -> Configuración -> Panel de Control -> Sistema, o simplemente Inicio -> Panel de Control -> Sistema para Windows XP/2003)

  • Vaya a la solapa de Avanzado

  • Pulse sobre el botón 'Variables de Entorno'

  • Consulte el panel de 'Variables de sistema'

  • Pulse sobre 'Nueva' e ingrese 'PHPRC' como el nombre de variable y el directorio en donde se encuentra php.ini como el valor de la variable (p.ej. C:\php)

  • Pulse aceptar y reinicie su máquina

En Windows 98/Me necesita editar el archivo autoexec.bat:

  • Abre el Bloc de Notas (Inicio -> Ejecutar e ingrese notepad)

  • Abra el archivo C:\autoexec.bat

  • Agrege una nueva línea al final del archivo: set PHPRC=C:\php (reemplace C:\php con el directorio en donde se encuentra php.ini). Por favor note que la ruta no puede contener espacios. Por ejemplo si tiene instalado PHP en C:\Archivos de Programa\PHP, usted debería ingresar C:\ARCHIV~1\PHP en su lugar.

  • Guarde el archivo y reinicie su máquina

16. ¿Es posible usar la negociación de contenido de Apache (opción MultiViews) con PHP?

Si los enlaces a archivos PHP incluyen la extensión, todo trabaja perfectamente. Este FAQ es sólo para el caso en el que los enlaces a archivos PHP no incluyen la extensión y se desea usar la negociación de contenido para elegir archivos PHP de una URL sin extensión. En este caso reemplace la línea AddType application/x-httpd-php .php con:
# PHP 4
AddHandler php-script php
AddType text/html php

# PHP 5
AddHandler php5-script php
AddType text/html php
Esta solución no funciona con Apache 1 ya que el módulo PHP no atrapa php-script.

17. ¿PHP se limita a procesar los métodos de petición GET y POST solamente?

No, es posible manejar cualquier método de petición, p.ej. CONNECT. La respuesta de status apropiada puede ser enviada con header(). Si solo los métodos GET y POST debieran ser manejados, puede conseguirse con esta configuración de Apache:
<LimitExcept GET POST>
Deny from all
</LimitExcept>

Hosting by: hurra.com
Generated: 2007-01-26 18:00:54