PHP (24)


RMDIR recursivo en PHP

Para eliminar directorios con php se utiliza la función rmdir(), el problema es que esa función no permite borrar carpetas que contengan algo, ya sea otras carpetas vacías o archivos.

Se pueden hacer funciones para eliminar carpetas y su contenido utilizando sólo php, de hecho en el manual de rmdir en php.net se pueden ver algunas en los comentarios, pero no es eso lo que me interesa. Lo que voy a explicar es cómo hacerlo utilizando comandos del sistema (en unix, los de windows no tengo ni idea).




Comprobar la validez de un dominio con PHP

Una sencilla función para verificar que un nombre de dominio existe. Es la función que utilizo en saberpagerank.es para verificar que el dominio introducido es correcto, podéis encontrar una demostración de allí.

function getAddrByHost($host, $timeout = 3) {
   $query = `nslookup -timeout=$timeout -retry=1 $host`;
   if(preg_match('/\nAddress: (.*)\n/', $query, $matches)){
      return trim($matches[1]);
   }else{
      return false;
   }
   return $host;
}

Y no hay mucho más que añadir, el nombre de dominio se le pasa en el primer parámetro, es decir, para utilizar la función se haría algo así:

if(!getAddrByHost('www.dominioabsurdo.lol')){
   die('El dominio parece incorrecto :(');
}



Eliminar posición de un array en PHP

Para borrar variables se utiliza unset(), también para eliminar posiciones de un array, pero si sólo se usa unset() la posición no se elimina del todo, sigue existiendo pero esta vacía. No sé si lo estoy explicando bien, pero con los ejemplos se entiende mejor. Es bastante sencillo, no es algo complicado de hacer, sólo hay que entenderlo.
Por ejemplo, con este array:

$array = 'ni sus,manos son,tan blancas,ni son,blancas sus,palomas';
$array = explode(',',$array);
Array
(
    [0] => ni sus
    [1] => manos son
    [2] => tan blancas
    [3] => ni son
    [4] => blancas sus
    [5] => palomas
)

Si se hace

unset($array[4]);

Quedará algo como:

Array
(
    [0] => ni sus
    [1] => manos son
    [2] => tan blancas
    [3] => ni son
    [5] => palomas
)

Es decir, el elemento no existe pero su posición en el array no se ha adaptado, hace un salto del 3 al 5 y en ocasiones lo ideal sería que el 4 se eliminara y el siguiente (el 5) pasara a ocupar su posición.

Para eso se puede utilizar la función array_values(), por ejemplo:

$array = array_values($array);

Haría que el resultado fuera:

Array
(
    [0] => ni sus
    [1] => manos son
    [2] => tan blancas
    [3] => ni son
    [4] => palomas
)



Encontrar todos los links de una página con PHP

No hay mucho que decir sobre esto… sólo dejar el código:

$html = file_get_contents('http://www.example.com');
$dom = new DOMDocument();
@$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$hrefs = $xpath->evaluate("/html/body//a");
for ($i = 0; $i < $hrefs->length; $i++) {
   $href = $hrefs->item($i);
   $url = $href->getAttribute('href');
   echo $url.'
'; }

Visto en css-tricks