Diferencia entre require e include en PHP

Cuando aprendes a programar en PHP, dos de las primeras funciones que usas son include y require. Prácticamente sirven para lo mismo, insertar código de un tercer fichero en el fichero actual (en otros lenguajes de programación hay funciones o construcciones similares). Pero, ¿cuál es la diferencia entre ellas?

Antes de la versión 4.0.2 de PHP (que prácticamente ninguno usaréis, o al menos deberéis usar), la diferencia radicaba en que require siempre leía el archivo al que hacía referencia, incluso si la línea de código en que se encontraba no se ejecutaba nunca (por ejemplo dentro de un condicional). include en cambio sí que se veía afectado por los condicionales y sí que podíamos hacer que no se ejecutara (por lo que tampoco se ejecutaba el código del archivo diferenciado).

Sin embargo, por razones del equipo de desarrollo de PHP, a partir de dicha versión la diferencia es la siguiente: si el archivo llamado no existe, include sólo da un warning, y sigue ejecutando, mientras que require produce un error e interrumpe el flujo de ejecución.

Lo mejor de mi RSS del 27 de junio al 3 de julio

Google+

Todo el mundo habla de google+, y aunque no lo haya visto, google ya lleva un buen historial de aplicaciones muertas, al final, por estadística saldrá algo genial.

El podcast de Linux Hispano – #054 – Linus Torvalds

¡Hola a todos!

Acaba de lanzarse el quincuagésimo cuarto número de El podcast de Linux Hispano, un podcast sobre Linux y Software Libre.

En este episodio hablaré sobre la vida y obra de Linus Torvalds, creador de Linux y de herramientas como Git.

GUIÓN:

Linus Torvalds: Vida, obra, opinión personal y curiosidades.

ESCUCHA EL PODCAST:  

DESCÁRGATE EL PODCAST: MP3, OGG.

SUSCRÍBETE AL PODCAST: PC, Apple, Android (feed), otro.

Gracias a todos los correos electrónicos que nos habéis enviado, así como los comentarios, lo hemos leído y contestado todos y gracias a ellos nos esforzamos por mejorar.

Las canciones que se escuchan son Creo en ti de Epic Soul Factory y What you want is lost de Orphan Songs.

¡Espero la opinión de todos vosotros!

¡Muchas gracias!

Embeber HTML en una página web

Cuando estás realizando aplicaciones HTML resulta fundamental insertar dicho código en una página web. Existen muchas maneras de hacerlo: con iframe, con embed, etc. Pero la recomendada por W3C es utilizando la etiqueta object:

<object type="text/html" data="http://ejemplo.com/app.html" width="100" height="100"></object>

Demostración

Código fuente de la demostración

<!doctype html>

<html>

  <head>
    <title>Embeber HTML en una web</title>
    <meta charset="utf-8" />
  </head>

  <body>
    <object type="text/html"
        data="http://linuxhispano.net/source/code/calculadora/index.html"
        width="320" height="480">
    </object>
  </body>

</html>

Nokia N9 con MeeGo

Nokia ha presentado su nuevo móvil N9 con el sistema operativo MeeGo 1.2 Harmattan. Se caracteriza por tener la interfaz swipe y un diseño muy redondeado, al estilo Apple. El tamaño del teléfono es de 116.45 x 61.2 x 12.1 mm con un peso de 135 g. Tiene una pantalla 3.9″ con 854 x 480 píxeles de resolución. La CPU es de 1 GHz con 1 GB de RAM. Si quieres más detalles, puedes ver las especificaciones del N9.

Sin lugar a dudas, lo más destacado es el sistema operativo que lleva: MeeGo. A diferencia de Android, Meego es un sistema operativo con un núcleo Linux puro, sin modificar, y está amparado por The Linux Foundation. Además, las aplicaciones están compiladas en Qt 4.7, que es la librería que utiliza por ejemplo KDE.

En mi opinión, Nokia debe seguir este camino y no el de su acuerdo con Microsoft. No soy economista, pero con respecto al software, el ecosistema que tenía Nokia con Qt se desperdicia completamente en el campo de los smartphones. Apostar por el Software Libre y por MeeGo, un sistema operativo Linux puro, es el futuro más esperanzador.

Instalar Chromeless

Hace unas semanas os hablé de cómo instalar Webian Shell, un navegador fullscreen basado en Chromeless. Este proyecto está orientado básicamente a la creación de un navegador Web liviano, sencillo y ágil.

Bien, veamos como instalarlo en nuestro sistema:

Hacemos un checkout del repositorio del mozilla en gibhub:

ahornero@6581-D:~$ git checkout http://github.com/mozilla/chromeless.git

Si todo ha ido bien, comprobamos el contenido del directorio que nos acabamos de traer. Debe de ser el siguiente:

ahornero@6581-D:~$ ls chromeless/
impl README.md run template ui

Y finalmente lanzamos el run que se encuentra en el directorio:

ahornero@6581-D:~$ ./run

El resultado de su ejecución no lo voy a poner, prefiero que lo probéis, será una grata sorpresa.

Por cierto, he supuesto que tenéis instalado Firefox > 3.6, ya que Chromeless usa el mismo motor de renderizado, de no ser así tendréis que instalar las dependicias con XULRunner.

Restringir el acceso mediante la dirección IP usando PHP

Si por razones de seguridad o por política de empresa, queremos bloquear las direcciones a un determinado rango o conjunto de IP, os voy a comentar cómo hacerlo de forma simple haciendo uso de PHP.

Lo primero que debemos hacer es crear una función que nos permita conocer la dirección IP del cliente:

function obtenerDireccionIP()
{
    if (!empty($_SERVER ['HTTP_CLIENT_IP'] ))
      $ip=$_SERVER ['HTTP_CLIENT_IP'];
    elseif (!empty($_SERVER ['HTTP_X_FORWARDED_FOR'] ))
      $ip=$_SERVER ['HTTP_X_FORWARDED_FOR'];
    else
      $ip=$_SERVER ['REMOTE_ADDR'];

    return $ip;
}

Una vez hecho esto, el proceso es simple. Veamos distintas posibilidades.

Permitir/restringir acceso a una sola IP

Con esta función, restringimos el acceso sólo a la IP que se le envía a la función. Podemos cambiar el “==” por “!=” para hacer lo contrario.

function restringirIp($ip)
{
    $ipCliente = obtenerDireccionIP();

    if($ipCliente == $ip)
    {
        return true;
    }
    else
    {
        header('location: http://direccion_envio_salida');
        exit;
    }
}

Permitir/restringir acceso a un conjunto de direcciones IP

Hacemos una operación similar, pero en lugar de controlar una sola dirección IP, controlamos un conjunto de ellas presentes en un array:

function restringirConjuntoIps($ips)
{
    $ipCliente = obtenerDireccionIP();

    if (in_array($ipCliente,$ips))
    {
        return true;
    }
    else
    {
        header('location: http://direccion_envio_salida');
        exit;
    }
}

Permitir/restringir acceso a un rango de direcciones IP

Si queremos restringir rangos, podemos valernos de la ayuda de las funciones de tratamiento de cadena. Para permitir el acceso a todas las direcciones de la familia: 150.214.x.x, podríamos hacer lo siguiente:

function restringirRango()
{
    $ipCliente = obtenerDireccionIP();

    if(substr($ipCliente, 0, 8 ) == "150.214.")
    {
        return true;
    }
    else
    {
        header('location: http://direccion_envio_salida');
        exit;
    }
}

Si queréis, podéis modificar la llamada a “substr” para adaptarla a vuestro caso particular.