PHP 8.4.2 Released!

Instalación

Esta sección contiene preguntas comunes sobre la forma de instalar PHP. Este está disponible para casi cualquier SO y casi cualquier servidor web.

Para instalar PHP, siga las instrucciones de Instalación y configuración.

  1. ¿Por qué no debe utilizarse Apache2 con un MPM con hilos en un entorno de producción?
  2. Unix/Windows: ¿Donde debería ubicarse mi fichero php.ini?
  3. Unix: He instalado PHP, pero con cada documento que cargo, obtengo el mensaje 'Document Contains No Data'. ¿Qué está pasando?
  4. Unix: He instalado PHP usando paquetes RPM, pero Apache no procesa los las páginas de PHP. ¿Qué está pasando?
  5. Unix: Le he aplicado a Apache el parche de extensiones de FrontPage, y de pronto PHP dejó de funcionar. ¿Acaso PHP es incompatible con las extensiones de FrontPage para Apache?
  6. Unix/Windows: He inslatado PHP, pero cuando intento acceder a ficheros de script de PHP a través de mi navegador obtengo la pantalla en blanco.
  7. Unix/Windows: He instalado PHP, pero cuando intento acceder a un fichero de script de PHP a través de mi navegador, obtengo un error 500 del servidor.
  8. Algunos sistemas operativos: He instalado PHP sin errores, pero cuando intento iniciar Apache, obtengo errores de Símbolos no definidos: [mybox:user /src/php5] root# apachectl configtest apachectl: /usr/local/apache/bin/httpd Undefined symbols: _compress _uncompress
  9. Windows: He instalado PHP, pero cuando intento acceder a un fichero de script de PHP a través de mi navegador, obtengo el error: cgi error: The specified CGI application misbehaved by not returning a complete set of HTTP headers. The headers it did return are:
  10. Windows: He seguido todas las instrucciones, pero todavía no puedo hacer que PHP e IIS funcionen juntos.
  11. Cuando ejecuto PHP como CGI con IIS, PWS, OmniHTTPD o Xitami, obtengo el siguiente error: Security Alert! PHP CGI cannot be accessed directly..
  12. ¿Cómo sé si mi php.ini se ha encontrado y se está leyendo? Parece como si no lo fuera, ya que los cambios que realizo no se implementan.
  13. ¿Cómo agrego mi directorio de PHP a PATH en Windows?
  14. ¿Cómo hago que el fichero php.ini esté disponible para PHP en Windows?
  15. ¿Es posible usar la negociación de contenidos de Apache (opción MultiViews) con PHP?
  16. ¿PHP se limita a procesar únicamente métodos de peticiones GET y POST?
¿Por qué no debe utilizarse Apache2 con un MPM con hilos en un entorno de producción?

PHP es el «pegamento» utilizado para desarrollar buenas aplicaciones web uniendo docenas de bibliotecas de terceros y haciéndolas que parezcan una entidad coherente a través de una interfaz de lenguaje intuitiva y fácil de aprender. La flexibilidad y la potencia de PHP residen en la estabilidad y robustez de la plataforma subyacente. Requiere la combinación de un SO, de un servidor web y de bibliotecas de terceros, todos correctamente funcionando. Cuando cualquiera de ellos deja de funcionar, PHP necesita identificar los problemas y corregirlos rápidamente. Cuando el marco de trabajo subyacente se hace más complejo al no tener hilos de ejecución completamente independientes, segementos de memoria completamente independientes y un fuerte entorno de pruebas por cada petición a cubrir, se introducirán más debilidades en el sistema de PHP.

Si desea utilizar un MPM con hilos, considere una configuración de FastCGI donde PHP se ejecute en su propio espacio de memoria.

Unix/Windows: ¿Donde debería ubicarse mi fichero php.ini?

Por defecto, en Unix debería estar en /usr/local/lib, lo que es <install-path>/lib. Para cambiar esta ruta durante la compilación se ha de usar la bandera --with-config-file-path. Se debería establecer a algo como por ejemplo:

--with-config-file-path=/etc
Luego se debería copiar el fichero php.ini-development de la distribución a /etc/php.ini y editarlo para realizar cualquier cambio necesario.

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

En Windows, la ruta predeterminada para el fichero php.ini es el directorio Windows. Si se utiliza el servidor web Apache, php.ini se busca primero en el directorio de instalación de Apache, p. ej. en C:\Archivos de programa\Apache Group\Apache. De esta forma se pueden tener distintos ficheros php.ini para diferentes versiones de Apache en la misma máquina.

Véase también el capítulo sobre el fichero de configuración.

Unix: He instalado PHP, pero con cada documento que cargo, obtengo el mensaje 'Document Contains No Data'. ¿Qué está pasando?

Esto probablemente signifique que PHP esté teniendo algún tipo de problema y esté realizando un volcado de memoria. Revise el registro de errores del servidor para ver si este es el caso, y después intente reproducir el problema con una pequeña prueba. Si sabe cómo usar 'gdb', le será de gran ayuda al poder proporcionar la traza de la pila con el informe de errores para que los desarrolladores puedan precisar el origen del problema. Si está utilizando PHP como un módulo de Apache, intente algo así:

  • Detener los procesos httpd

  • gdb httpd

  • Detener los procesos httpd

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

  • Luego obtenga el URL que causa el problema con su explorador

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

  • Si resulta en un volcado de memoria, gdb debería informárselo al instante

  • escriba: bt

  • Debería incluir la traza en su informe de errores, el cual debe ser enviado a » https://github.com/php/php-src/issues

Si su script utiliza las funciones de expresiones regulares (preg_match() y similares), debería asegurarse de que PHP y Apache se compilaron con los mismos paquetes de expresiones regulares. Esto debería ocurrir automáticamente con PHP y Apache 1.3.x

Unix: He instalado PHP usando paquetes RPM, pero Apache no procesa los las páginas de PHP. ¿Qué está pasando?

Asumiendo que instaló tanto Apache como PHP desde paquetes RPM, 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
Y agregar:
AddType application/x-httpd-php .php
a las propiedades globales, o a las propiedades del VirtualDomain que desee que tenga añadido el soporte para PHP.

Unix: Le he aplicado a Apache el parche de extensiones de FrontPage, y de pronto PHP dejó de funcionar. ¿Acaso PHP es incompatible con las extensiones de FrontPage para Apache?

No, PHP funciona bien con las extensiones de FrontPage. El problema radica en que dicho parche modifica varias estructuras de Apache de las que depende PHP. La recompilación de PHP (con 'make clean ; make') tras la aplicación del parche debería resolver el problema.

Unix/Windows: He inslatado PHP, pero cuando intento acceder a ficheros de script de PHP a través de mi navegador obtengo la pantalla en blanco.

Ejecute 'ver código fuente' en el navegador web y probablemente encontrará que puede ver el código fuente de su script de PHP. Esto significa que el servidor web no envió el script a PHP para interpretarlo. Algo está mal en la configuración del servidor: vuelva a comprobarla con respecto a las instrucciones de instalación de PHP.

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

Algo falló cuando el servidor intentó ejecutar PHP. Para obtener un mensaje de error detallado desde la línea de comandos, vaya al directorio que tiene el ejecutable de PHP (php.exe en Windows) y ejecute php -i. Si PHP tiene problemas al ejecutarse, el correspondiente error será mostrado en pantalla proporcionando una pista sobre lo que debe hacer a continuación. Si obtiene una pantalla completa de código HTML (la salida de la función phpinfo()) es porque PHP está funcionando, y su problema puede estar relacionado con la configuración del servidor, la cual debería de volver a revisar.

Algunos sistemas operativos: He instalado PHP sin errores, pero cuando intento iniciar Apache, obtengo errores de Símbolos no definidos:
[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 cliente de MySQL. Algunas necesitan --with-zlib, otras no. Esto también se trata en las Preguntas frecuentes de MySQL.

Windows: He instalado PHP, pero cuando intento acceder a un fichero de script de PHP a través de mi navegador, obtengo el error:
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 no pudo imprimir nada. Para obtener un mensaje de error detallado 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 problemas al ejecutarse, el correspondiente error será mostrado en pantalla proporcionando una pista sobre lo que debe hacer a continuación. Si obtiene una pantalla completa de código 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 nuevamente al script a través de su navegador. Si continúa fallando, podría ser por una de las siguientes razones:

  • Los permisos de fichero en el script de PHP, php.exe, php5ts.dll, php.ini o cualquier extensión de PHP que esté intentando cargar, son tales que el usuario de internet anónimo ISUR_<machinename> no puede acceder a ellos.
  • El fichero de script no existe (o quizá no se ubique en donde usted cree que está en relación a su directorio raíz web). Observe que para IIS se puede manejar este error señalando la casilla 'comprobar si el fichero existe' al configurar la correspondencia de scripts en el Administrador de Servicios de Internet. Si un fichero de script no existe, el servidor devolverá un error HTTP 404 en su lugar. IIS también brinda el beneficio adicional de encargarse de cualquier autenticación requerida de forma automática basándose en lospermisos NTLanMan de su fichero de script.
Windows: He seguido todas las instrucciones, pero todavía no puedo hacer que PHP e IIS funcionen juntos.

Asegúrese de que todo usuario que necesite ejecutar un script de PHP tenga los permisos para ejecutar php.exe. IIS utiliza un usuario anónimo que se añade en el momento de su instalación. Este usuario necesita permisos para php.exe. Además, cualquier usuario autenticado necesitará permisos para poder ejecutar php.exe. Asimismo, es necesario indicarle a IIS4 que PHP es un motor de script. Le podría interesar leer también estas preguntas frecuentes.

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

La directiva cgi.force_redirect debe establecerse a 0. Por defecto es 1, por lo que debe asegurarse de que no esté comentada (con un ;). Como todas las directivas, se configura en php.ini

Debido a que su valor predeterminado es 1, es crítico asegurarse al 100% de estar leyendo el fichero php.ini correcto. Lea estas preguntas frecuentes para más detalles.

¿Cómo sé si mi php.ini se ha encontrado y se está leyendo? Parece como si no lo fuera, ya que los cambios que realizo no se implementan.

Para asegurarse de 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á dónde está buscando PHP el php.ini y si está siendo leído o no. Si existe solo un directorio en PATH, entonces PHP no está leyéndolo, por lo que debería colocar su php.ini en tal directorio. Si php.ini está incluido dentro de PATH, es que se está leyendo.

Si php.ini está siendo leído y PHP se está ejecutando como un módulo, deberá reiniciar su servidor web tras aplicar los cambios a php.ini

Véase también php_ini_loaded_file().

¿Cómo agrego mi directorio de PHP a PATH en Windows?

En Windows:

  • Vaya a Panel de Control y abra el icono Sistema (Inicio → Panel de control)

  • Vaya a la pestaña Avanzado

  • Haga clic en el botón 'Variables de Entorno'

  • Revise la parte de 'Variables de Sistema'

  • Encuentre la entrada Path (seguramente tendrá que desplazarse para encontrarla)

  • Haga doble clic en la entrada Path

  • Ingrese su directorio de PHP al final de todo, con un ';' antes (p.ej., ;C:\php)

  • Presione OK

Nota: Asegúrese de reiniciar tras seguir los pasos anteriores para garantizar que se apliquen los cambios a PATH.

¿Cómo hago que el fichero php.ini esté disponible para PHP en Windows?

Hay varias formas de hacerlo. Si está usando Apache, lea las instrucciones específicas de instalación, o de lo contrario, debe configurar la variable de entorno PHPRC:

En Windows:

  • Vaya a Panel de Control y abra el icono Sistema (Inicio → Configuración → Panel de Control → Sistema, o directamente Inicio → Panel de Control → Sistema)

  • Vaya a la pestaña Avanzado

  • Haga clic en el botón 'Variables de Entorno'

  • Revise el panel de 'Variables de Sistema'

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

  • Presione OK y reinicie la máquina

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

Si los enlaces a ficheros de PHP incluyen la extensión, todo funciona perfectamente. Estas preguntas frecuentes son solo para aquellos casos en los que los enlaces a ficheros de PHP no incluyen la extensión y se desea utilizar la negociación de contenidos para elegir ficheros de PHP sin extensión desde un URL. En este caso, reemplace la línea AddType application/x-httpd-php .php con:

AddHandler php5-script php
AddType text/html php
Esta solución no funciona para Apache 1 ya que el módulo de PHP no capta php-script.

¿PHP se limita a procesar únicamente métodos de peticiones GET y POST?

No. Es posible manejar cualquier método de peticiones, por, ej., CONNECT. El estado de respuesta apropiado puede ser enviado con header(). Si solo se van a manejar los métodos GET y POST, esto se puede lograr con la siguiente configuración de Apache:

<LimitExcept GET POST>
Deny from all
</LimitExcept>

add a note

User Contributed Notes 5 notes

up
19
per dot fikse at ipj dot no
19 years ago
Installing PHP 4 or 5 on Windows Server 2003 x64 results in http error 505. This is not a PHP bug. It is due to running a 32-bit ISAPI DLL under the 64-bit version of IIS 6, as documented here: http://support.microsoft.com/?id=895976

Solution: Flip the Metabase flag for Enable32bitAppOnWin64 as described in http://support.microsoft.com/?id=894435 ,
like this: CSCRIPT ADSUTIL.VBS SET W3SVC/AppPools/Enable32bitAppOnWin64 1

(Alternatively with full path: cscript %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1)
up
8
charleslynch at xybersoftware dot com
16 years ago
One final note to the message below if you are getting the message about not having rights to execute...You need to use IIS right click on the website and choose 'Properties/Home Directory' then on the 'Execute Permissions' combo box you need to choose 'Scripts only'...Click ok...another dialog may appear asking which directories to apply the action too...choose any directories that you intend on using php in and click ok...It should work now...
up
9
emzeperx at emzeper dot hu
18 years ago
You do not have to restart the whole system make effect of changing the PATH env var. For me (sbs2003) worked automatically.
on older systems you can use

set $Path=%path%;c:\php

command to extend immediately the path var.
up
5
Curtis
17 years ago
I have some additional troubleshooting tips for 53.7, which deals with getting a blank screen on your browser when running a PHP script.

In addition to server misconfiguration, it may also be that PHP isn't configured to output errors to the browser, which is the case if you or your host uses a more secure php.ini. If this is the case, you need to find out where errors are being logged to find out if any errors are preventing normal output from being delivered to the client.

If you have access to php.ini, check the 'display_errors' directive, which is, by default, located under the 'error_reporting' directive. It's helpful to have 'display_errors' on during debugging phases, but best to have it off in production environments.

Related functions: http://php.net/ini_set | http://php.net/error_reporting | http://php.net/error_log
up
4
joerg at fenin dot de
17 years ago
To limit HTTP Request Methods on the Apache server running PHP you should use mod_rewrite or mod_security instead of LimitExcept, to give you more control over the handling of such http errors. Can go in .htaccess file or httpd.conf

# mod_rewrite
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_METHOD} !^(GET|HEAD|POST)$
RewriteRule .* - [F,L]
</IfModule>

# mod_security
<IfModule mod_security.c>
SecFilterSelective REQUEST_METHOD "!^(GET|HEAD|POST)$" "deny,log,status:403"
</IfModule>

You can use the php request method scanner at askapache to see exactly how your server deals with various request methods, and check that your server is configured properly..

http://www.askapache.com/online-tools/request-method-scanner/
To Top