Esta sección contiene preguntas comunes sobre la forma de instalar PHP. PHP está disponible para casi cualquier OS (excepto para MacOS antes de OSX), y casi todos los servidores web.
Para instalar PHP, siga las instrucciones en Instalación y configuración.
PHP es pegamento. Es el pegamento utilizado para desarrollar buenas aplicaciones web uniendo docenas de bibliotecas 3rd-party y haciéndolas aparentar como una coherente a través de una interfaz lingual, intuitiva y fácil de estudiar. La flexibilidad y poder de PHP reside en la estabilidad y robustez de la plataforma en la que corre. REquiere de un OS, de un servidor web y de bibliotecas 3rd-party (todos correctamente funcionando) para combinarlos. Cuando cualquiera de estos deja de funcionar, PHP necesita formas de identificar los problemas y arreglarlos rápidamente. Cuando el marco de referencia base se hace más complejo al no tener las tareas de ejecución y los segmentos de memoria completamente separados y un fuerte entorno de pruebas por cada instancia a cubrir, apareceran deficiencias en el sistema de PHP.
Si desea utilizar un MPM por hilos, considere una configuración de FastCGI donde PHP este corriendo en su propio espacio de memoria.
Por defecto en Unix debería ser en /usr/local/lib lo que es igual a <install-path>/lib. Mucha gente querrá cambia resto al momento de compilar con el flag --with-config-file-path. Debería ser seteado, por ejemplo, con algo parecido:
--with-config-file-path=/etc
--with-config-file-scan-dir=PATH
En Windows la ruta predeterminada para el fichero php.ini es el directorio Windows. Si está usando el servidor web Apache, php.ini es buscado en principio en el directorio de instalación de Apaches, por ej.C:\Archivos de programa\Apache Group\Apache. De esta forma se pueden utilizar distintos ficheros php.ini para diferentes versiones de Apache en la misma máquina.
Vea también el capítulo sobre el fichero de configuración.
Esto probablemente signifique que PHP está teniendo algún tipo de problema y realiza un volcado de memoria. Revise en el log de errores de su servidor para ver si éste es el caso, y después intente reproducir el problema con una pequeña prueba. Si sabe cómo usar 'gdb', será de gran ayuda cuando un backtrace pueda ser incluido en su reporte de bug para ayudar a los desarrolladores a localizar el problema. Si PHP es utilizado como módulo de Apache intente algo como:
Detener sus procesos httpd
gdb httpd
Detener sus procesos httpd
> Ejecute -X -f /path/to/httpd.conf
Luego indique la URL que causa el problema con su explorador
> Ejecute -X -f /path/to/httpd.conf
Si resulta en un volcado de memoria, gdb debería informárselo al instante
escriba: bt
Debería incluir su backtrace en su reporte de bug, el cual debería ser enviado a » http://bugs.php.net/
Si su script utiliza las funciones de expresiones regulares ( preg_match() y similares), debería sersionarse que PHP y Apache fueron compilados con los mismos paquetes de expresiones regulares. Esto debería ocurrir automáticamente con PHP y Apache 1.3.x
Asumiendo que instaló tanto Apache como PHP desde paquetes RPM, se necesita descomentar, o agregar algunas o todas de las siguientes líneas en su fichero httpd.conf:
# Extra Modules AddModule mod_php.c AddModule mod_perl.c # Extra Modules LoadModule php_module modules/mod_php.so LoadModule php5_module modules/libphp5.so LoadModule perl_module modules/libperl.so
AddType application/x-httpd-php .php
No, PHP trabaja bien con las extensiones de FrontPage. El problema radica en que dicho parche modifica varias estructuras de Apache en las que PHP confía. La recompilación de PHP (usando 'make clean ; make') luego de que el parche haya sido aplicado debería resolver el problema.
Ejecute 'ver código fuente' en el navegador web y probablemente encontrará que puede ver el código fuente de su archivo PHP. Esto significa que el servidor web no envió el script PHP para su interpretación. Algo está mal en la configuración del servidor - chequéelo tantas veces sea necesario respecto de las instrucciones de instalación de PHP.
Algo falla cuando el servidor intenta ejecutar PHP. Para obtener un mensaje de error detallado, desde la línea de comandos, cambie al directorio que tiene el ejecutable de PHP (php.exe en Windows) y ejecute php -i. Si PHP tiene problemas al correr, el correspondiente error será impreso en pantalla, el cual le dará una pista sobre lo que debe hacer a continuación. Si obtiene una pantalla completa de códigos HTML (la salida de la función phpinfo()) es porque PHP está funcionando, y su problema puede estar relacionado a la configuración de su servidor, la cual debería corroborar.
[mybox:user /src/php5] root# apachectl configtest apachectl: /usr/local/apache/bin/httpd Undefined symbols: _compress _uncompress
Esto, en realidad, no tiene nada que ver con PHP, sino con las bibliotecas de cliente MySQL. Algunas necesitan --with-zlib , otras no. Esto también se trata en la FAQ de MySQL.
cgi error: The specified CGI application misbehaved by not returning a complete set of HTTP headers. The headers it did return are:
Este mensaje de error significa que PHP falló al intentar producir un retorno. Para poder ver un mensaje de error detallado, desde la línea de comandos, cambie al directorio que tiene el ejecutable de PHP (php.exe en Windows) y ejecute php -i. Si PHP tiene problemas al correr, el correspondiente error será impreso en pantalla, el cual le dará una pista sobre lo que debe hacer a continuación. Si obtiene una pantalla completa de códigos HTML (la salida de la función phpinfo()) es porque PHP está funcionando.
Una vez que PHP esté funcionando desde la línea de comandos, intente acceder al archivo PHP a través de su navegador nuevamente. Si continúa fallando podría ser por una de las siguientes razones:
¡Asegúrese de que todos los usuarios que necesiten ejecutar PHP tengan los permisos para ejecutar php.exe! IIS utiliza un usuario anónimo que se crea en el momento en que éste es instalado. Este usuario necesita permisos para php.exe. Además, cualquier usuario autenticado necesitará permisos para poder ejecutar php.exe. Y para IIS4 se necesita indicarle que PHP es un intérprete. También le interesará leer esta FAQ.
La directiva cgi.force_redirect debe equivaler a 0. Por defecto equivale a 1 por lo que debe asegurarse de que no este comentada (con un ;). Como todas las directivas, esto se configura en php.ini
Debido a que por defecto es 1, es crítico que esté seguro al 100% que se está leyendo el archivo php.ini correcto. Por favor lea esta FAQ para detalles.
Para asegurarse que PHP está leyendo su php.ini, realice una llamada a phpinfo(). Cerca de la parte superior, habrá una lista llamada Configuration File (php.ini). Allí figurará en qué parte PHP está buscando php.ini y si se está leyendo o no. Si existe sólo el directorio de la ruta, entonces PHP no está leyéndolo, y debería moverlo dentro de dicho directorio. Si php.ini está incluido dentro de la ruta indicada, está siendo leído.
Si php.ini está siendo leído y PHP está corriendo como un módulo, entonces deberá reiniciar su servidor web luego de aplicar los cambios a php.ini
Vea también php_ini_loaded_file().
En Windows NT+ y Windows Server 2000+:
Vaya a Panel de Control y abra el icono Sistema (Inicio -> Configuración -> Panel de Control -> Sistema, o directamente Inicio -> Panel de Control -> Sistema para Windows XP/2003+)
Vaya a la pestaña Avanzado
Clic en el botón 'Variables de Entorno'
Revise la parte de 'Variables de Sistema'
Encuentre la entrada Path (de seguro tendrá que desplazarse para encontrarla)
Doble clic en la entrada Path
Ingrese su directorio de PHP al final de todo, con un ';' antes (por ej., ;C:\php)
Presione OK
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
Localice la línea con PATH=C:\WINDOWS;C:\WINDOWS\COMMAND;..... y agregue: ;C:\php en el final de la línea
Guarde el archivo y reinicie la máquina
Nota: Asegúrese de reiniciar luego de seguir los pasos de arriba para garantizar que los cambios a PATH se apliquen.
El manual de PHP solía promover el copiado de archivos dentro del directorio de sistema de Windows, esto es porque este directorio (C:\Windows, C:\WINNT, etc.) está por defecto en los sistemas de PATH. Copiar archivos dentro del directorio de sistema de Windows hace tiempo que ya no se utiliza y puede causar problemas.
Hay varias formas de hacer esto. Si está usando Apache, lea sus instrucciones específicas de instalación (Apache 1, Apache 2), a menos que deba configurar la variable de entorno PHPRC:
En Windows NT, 2000, XP y 2003:
Vaya a Panel de Control y abra el icono Sistema (Inicio -> Configuración -> Panel de Control -> Sistema, o directamente Inicio -> Panel de Control -> Sistema para Windows XP/2003)
Vaya a la pestaña Avanzado
Clic en el botón 'Variables de Entorno'
Revise la parte de 'Variables de Sistema'
Clic en 'Nuevo' e ingrese 'PHPRC' como el nombre de variable y el directorio donde php.ini se encuentra como el valor de variable (por ej., C:\php)
Presione OK y reinicie la 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
Agregue una nueva línea al final del archivo: set PHPRC=C:\php (reemplace C:\php con el directorio donde se encuentre php.ini). Por favor note que la ruta no puede contener espacios. Por ejemplo, si instaló PHP en C:\Archivos de programa\PHP, debería ingresar C:\ARCHIV~1\PHP en su lugar.
Guarde el archivo y reinicie la máquina
Si los enlaces a archivos PHP incluyen la extensión, todo funciona perfectamente. Esta FAQ es sólo para aquellos casos en los que los enlaces a archivos PHP no incluyen la extensión y desea utilizar la negociación de contenidos para elegir archivos PHP desde una URL sin extensión. En este caso, reemplace la línea AddType application/x-httpd-php .php con:
AddHandler php5-script php AddType text/html php
No, es posible manejar cualquier método de peticiones, por, ej., CONNECT. El estado de respuesta apropiado puede ser enviado con header(). Si sólo los métodos GET y POST deberían ser manejados, se puede lograr con la siguiente configuración de Apache:
<LimitExcept GET POST> Deny from all </LimitExcept>