8 razones por las que falla una aplicación PHP

Es el mismo codigo en el webserver y en localhost, no entiendo por qué da error en uno sí y otro no

Dentro de xampp no me presenta problema, sólo en el hosting

Estoy trabajando con laravel y estoy tratando de generar un sitemap.xml automatico, pero cuando lo genero no me lo guarda en la carpeta publica, solo logre que me lo guarde en el raiz del cpanel y no puedo hacer que me lo genere dentro del public_html

Es una historia que se repite una y otra vez: el sistema funciona perfecto en tu XAMPP pero cuando lo subís al hosting misteriosamente nadie puede registrarse ni logearse.

¿Qué pasó? El código es exactamente el mismo, lo viste funcionar con tus propios ojos.

La única diferencia es que la URL, en lugar de empezar por http://localhost empieza por http://dominio.com, ¿cierto?

Me temo que las diferencias pueden ir bastante más allá de eso.

Para evitarte unas cuantas vueltas y dolores de cabeza te voy a contar las razones más frecuentes que llevan a este comportamiento.

Intentaré ir de lo más frecuente hacia lo menos.

Aquí voy.

La versión de PHP

La primera gran dependencia que toda aplicación php tiene es el propio intérprete.

Si desarrollás en forma local tenés instalado algún paquete que permite transformar esto:

<html>
  <body><p><?php echo "Hola mundo!"; ?></p></body>
</html>

En

<html>
  <body><p>Hola mundo!"</p></body>
</html>

Generalmente esta responsabilidad le corresponde al servidor web que tenés instalado en tu computadora (¿XAMPP tal vez?).

En tu hosting hay otro servidor web con una configuración similar pero no necesariamente idéntica.

PHP es un lenguaje que está en constante evolución, año a año salen nuevas versiones y, si bien se hace un esfuerzo muy grande por mantener la compatibilidad con versiones viejas, esto no siempre se logra.

Es por eso que algunas cosas que funcionan en una versión dejan de funcionar en las siguientes.

En conclusión: lo primero que deberías verificar es que tu versión de PHP local es igual a la que tiene tu hosting.

El archivo php.ini

Además del intérprete, php dispone de un archivo de configuración especial: php.ini.

En este archivo se definen ciertos parámetros que determinan detalles de cómo el intérprete realiza esa transformación.

Las variables que pueden configurarse a través de este archivo son ciertamente muchas. Algunas son más críticas que otras.

Un ejemplo muy simple es el de la directiva short_open_tag. Si su valor es "1" php no tendrá problemas en interpretar algo como:

<html>
  <body><p><? echo "Hola mundo!"; ?></p></body>
</html>

Sin embargo, si este no es el caso, php dejará el texto tal como está, con lo cual, en lugar de transformarlo al HTML que esperás, el visitante de tu sitio verá el código.

En conclusión: si las cosas no funcionan vale la pena comparar los cotenidos de tu php.ini y los de tu hosting.

Las extensiones php

PHP como tal trae una cantidad de funcionalidad incorporada pero es muy común que ciertas funciones se dejen como opcionales por razones de eficiencia.

Para esos casos en los que se necesitan funcionalidades extras, php cuenta con el mecanismo de extensiones.

Si tu aplicación depende de alguna en particular, por ejemplo si necesita generar gráficos, es muy probable que requiera de la presencia de una extensión en particular en el ambiente de ejecución.

Si tu hosting no tiene instalada dicha extensión las cosas no van a funcionar como lo esperás.

En conclusión: verificá si tu aplicación requiere alguna extensión especial y, en tal caso, asegurate de que esté presente en tu hosting.

Los permisos

Para que una aplicación php pueda ejecutarse es preciso que el usuario que ejecuta el servidor web tenga ciertos permisos sobre el sistema de archivos.

Como mínimo, debe ser capaz de leer los archivos .php que componen tu aplicación.

En muchos casos también será necesario que pueda escribir en ciertos directorios.

En conclusión: validá que el usuario que ejecuta el webserver tenga los permisos necesarios para realizar las tareas que debe.

La topología de red

Típicamente cuando desarrollas en forma local la red donde tu aplicación vive es bastante sencillita: sólo existe localhost.

Esto quiere decir que todos los servicios de los que depende son accesibles a través de la dirección de red 127.0.0.1 (O el nombre localhost, lo que es lo mismo).

Más en concreto, si tu aplicación usa un MySQL como base de datos, es casi seguro que en algún lugar de tu código habrá una línea que se parece a:

$link = mysqli_connect("127.0.0.1", "mi_usuario", "mi_contraseña", "mi_bd");

Y esto funcionará sin problemas.

El tema es que, en un entorno de hosting compartido donde hay muchos sitios hosteados en una misma computadora, es muy común que los servicios estén distribuidos en diferentes nodos de la red del proveedor.

Esto quiere decir que, al intentar conectar al servidor de MySQL a través de la dirección 127.0.0.1 se producirá un fallo.

En conclusión: verifica que las conexiones a servicios satélites se estén realizando utilizando las direcciones que correspnden a la red de tu hosting.

Las rutas absolutas

Un problema similar al anterior se da cuando se utilizan rutas absolutas.

Por ejemplo:

<?php

require_once '/var/www/html/libreria.php';

Puede funcionar en tu computadora porque existe en tu disco un archivo llamado libreria.php en un directorio /var/www/html/

Si bien es posible que dicho directorio exista también en tu hosting, es bastante probable que no sea así.

Si ese archivo está dentro del árbol de directorios de tu aplicación, una mejor forma de lograr el mismo objetivo es utilizar rutas relativas:

<?php

require_once __DIR__.'/libreria.php';

En conclusión: usá rutas relativas en lugar de absolutas.

La configuración del Apache

Otro elemento que puede afectar negativamente al funcionamiento de la aplicación es la configuración del servidor web. No es que necesariamente se trate a Apache pero lo más probable es que así sea, especialmente en un ambiente de hosting compartido.

Estas directivas afectan la forma en que el servidor web atiende los pedidos de tus visitantes.

Muchas aplicaciones php dependen de ciertas configuraciones existentes en el archivo .htaccess (Reglas de re-escritura por ejemplo).

Para que esto funcione, el webserver debe tener habilitado el procesamiento de este tipo de archivos

En conclusión: valida que la configuración de tu Apache coincida con la de tu hosting.

El sistema operativo

El último de los sospechosos, que muchas veces es pasado por alto, es el sistema operativo sobre el que está montado el servidor.

Si estás desarrollando en Windows y tu hosting es un Linux hay buenas chances de que no todo funcione a la primera.

La diferencia para referenciar archivos (Cosas como c:\progams\file.php vs. /var/www/html/file.php) o el hecho de que para Linux un archivo llamado file.php no es el mismo que File.php mientras que para Windows sí son sólo algunas de las sutiles diferencias que pueden darte la idea de que el sistema está listo para subirse cuando en realidad estás a punto de abrir la caja de Pandora.

En conclusión: verificá que tu código no dependa de características particulares de un sistema operativo.

Cómo usar esta información

A lo largo de este post te conté las razones que más comúnmente hacen que un despliegue de una aplicación PHP sea más traumático de lo que debería.

Ahora que las conocés te recomiendo que las revises nuevamente y las uses a modo de lista de verificación para planificar tus próximos despliegues.

mchojrin

Por mchojrin

Ayudo a desarrolladores PHP a acceder mercados y clientes más sofisticados y exigentes

¿Te quedó alguna duda? Publica aca tu pregunta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.