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
Aprender jQuery, 1: Qué és y por qué usarlo.
Qué és
jQuery es una librería de JavaScript, rápida y concisa que simplifica el tratamiento de documentos HTML, el control de eventos, animaciones, e interacciones AJAX para un desarrollo web rápido. jQuery está diseñado para cambiar la manera en que se escribe JavaScript.
Así (pero en inglés traducido por mi, espero que bien) es como se describe jQuery en la portada de su página oficial.
Aunque haya quien diga que no, yo creo que jQuery es una de las herramientas (por llamarlo de alguna manera) mejor documentadas que hay. Con un mínimo de interés y un poco de imaginación se puede entender rápidamente para qué sirve e imaginar en qué se podría aplicar. Eso sin contar la gran cantidad de recursos y ejemplos que existen, incluso en la misma documentación oficial de la librería. Así que en realidad, ni siquiera hace falta imaginación para entenderlo.
Por qué usarlo
Después de usar jQuery, pensar en dejar de utilizarlo y tener que escribir JavaScript sin algún framework (ya sea jQuery, mootools o cualquier otro) me parece una locura. En sério, sólo de pensar en verme obligado a usar XMLHttpRequest para los temas de AJAX y no poder recurrir a jQuery empiezo a idear excusas para evitarlo.
Y sii no te fias, puedes tener la certeza de que es una librería de calidad, y para demostrarlo en su portada nos recuerdan que Google, Dell, Digg, Technorati, Mozilla, WordPress, Drupal y una infinidad más de sitios utilizan su framework.
Por ejemplo, para hacer una carga de página externa con ajax, usando jQuery sería algo así:
$("#idcapa").load('url/relativa/fichero.php');
Y hacer algo parecido con JavaScript llano sería:
XHConn - Simple XMLHTTP Interface - bfults@gmail.com - 2005-04-08
Code licensed under Creative Commons Attribution-ShareAlike License
http://creativecommons.org/licenses/by-sa/2.0/
*/
function XHConn(){
var xmlhttp, bComplete = false;
try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); }
catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); }
catch (e) { try { xmlhttp = new XMLHttpRequest(); }
catch (e) { xmlhttp = false; }}}
if (!xmlhttp) return null;
this.connect = function(sURL, sMethod, sVars, fnDone) {
if (!xmlhttp) return false;
bComplete = false;
sMethod = sMethod.toUpperCase();
try {
if (sMethod == "GET"){
xmlhttp.open(sMethod, sURL+"?"+sVars, true);
sVars = "";
}else{
xmlhttp.open(sMethod, sURL, true);
xmlhttp.setRequestHeader("Method", "POST "+sURL+" HTTP/1.1");
xmlhttp.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded");
}
xmlhttp.onreadystatechange = function(){
if (xmlhttp.readyState == 4 && !bComplete){
bComplete = true;
fnDone(xmlhttp);
}};
xmlhttp.send(sVars);
}
catch(z) { return false; }
return true;
};
return this;
}
var myConn = new XHConn();
if (!myConn) alert("XMLHTTP not available. Try a newer/better browser.");
var include_terminado = function (oXML) { document.getElementById('include').innerHTML = oXML.responseText; };
function include_dinamico (url){
document.getElementById('include').innerHTML = "
";
myConn.connect("include.php", "GET", "variable="+url, include_terminado);
}
<a onclick="include_dinamico('hola');" href="#">Link</a>
Además de AJAX, jQuery trabaja con animaciones, DOM, eventos, y permite el uso de plug-ins. Y aunque la sintaxis pueda parecer extraña al principio, es bastante sencilla de entender y cuando se hacen un par de ejercicios en plan “copiar, pegar y modificar” se entiende rápidamente como funciona.
Y cuando me apetezca (dentro de un rato, mañana o quizá nunca), explicaré la sintaxis y otras cosas “importantes”.
Se asoma "Dulce miseria", el nuevo disco de Proudz
Ahora sí, con permiso del grupo e increíble ansia de publicarlo; Puedo decir que el que será el nuevo disco de la que és sin duda una de las bandas de Hardcore más importantes del estado Español se asoma al público para amenizar la espera hasta la salida real.
El nuevo disco de Proudz se llamará “Dulce miseria”, como se dijo hace ya meses. Saldrá a la venta el 3 de octubre de este año (2009) y contendrá 16 canciones (con un preludio). Ha sido grabado en Madrid y masterizado en Suecia.
Así mismo, han preparado ya unos cuantos conciertos, el precio de las entradas rondará los 10€ y según se dijo incluirá una copia del nuevo trabajo, que visto lo visto y habiendo escuchado ya un par de canciones, estoy seguro de que estará a la altura y sabrán demostrar los años de experiencia. No olvideis ir visitando su MySpace para saber si se añaden o editan fechas de conciertos y conocer las novedades en general. Y sobretodo: Felicidades al grupo por el trabajo.
Próximos conciertos planeados:
03 oct 2009: SALA TABOO Madrid
17 oct 2009: GAZTETXE DE BASAURI Vizcaya
07 nov 2009: STREETCORE FEST 2009. Sabadell (BCN)
27 nov 2009: TBA SALAMANCA Salamanca
28 nov 2009: SALA HEAVEN Cantabria
18 dic 2009: LA UNIVERSIDAD León
19 dic 2009: LA IGUANA Pontevedra
Me cago en Dios, cuanto tiempo no habré pasado esperando este momento…
El tracklist:
- PRELUDIO A LA TEMPESTAD.
- INDESTRUCTIBLE.
- TRAS LA TORMENTA.
- JUSTICIA CALLEJERA.
- DULCE MISERIA.
- EL CIELO ESTA FUERA DE NUESTRO ALCANCE.
- INFIERNO DE COBARDES.
- ENCERRADO.
- CONTRA LOS ESPIRITUS.
- NACIDA PARA ODIAR.
- DIARIO DE GUERRA.
- AL BORDE DEL ABISMO.02 indestructible
- EL DURO ADIÓS.
- C.N.D.
- ATRAPADO BAJO EL HIELO.
- DE AQUÍ A LA ETERNIDAD
Letra de “Atrapado bajo el hielo”:
Atrapado en un mundo de jodidos esclavos, donde todos quieren ser el rey de reyes. Testigo directo de mil actos profanos, provocados por paganos, todos recien llegados. Espectador y a la vez culpable de todo, hemos creado una bestia sin alma. Yo sere el unico juez, jurado y verdugo de mis propias faltas y de mis peores pecados.
Clip de audio: Es necesario tener Adobe Flash Player (versión 9 o superior) para reproducir este clip de audio. Descargue la versión más reciente aquí. También necesita tener activado Javascript en su navegador.
Letra de “Infierno de cobardes”:
No me hables de sueños, no existe esperanza en este lugar, solo hay muerte y miedo a ser condenados a la oscuridad. Ya no importa nada solo nos queda la soledad un infierno de cobardes donde todos merecen conocer el final. Has fracasado al intentar razonar con bestias sedientas de sangre y miseria. Brutalidad. El fin de la humanidad.
Clip de audio: Es necesario tener Adobe Flash Player (versión 9 o superior) para reproducir este clip de audio. Descargue la versión más reciente aquí. También necesita tener activado Javascript en su navegador.
Recursividad en mkdir de PHP
No en todas las versiones de PHP se puede hacer un mkdir recursivo directamente, mkdir('/1/2/3/'); aunque es lo ideal, en versiones antiguas (la opción se añadió en la 5.0) no se podía. Si en tu servidor hay instalada una versión vieja de PHP y no tienes la posibilidad de actualizarlo tu mismo, puedes utilizar una función propia que haga el mkdir recursivo. En el manual oficial de php se explica a fondo como utilizar correctamente la función oficial, con los permisos y recursividad que se necesiten.
Como por ejemplo:
function mkdir_recursivo($pathname, $mode){
umask(0);
is_dir(dirname($pathname)) || mkdir_recursive(dirname($pathname), $mode);
return is_dir($pathname) || mkdir($pathname, $mode);
}
Un ejemplo de uso de esta función sería:
$ruta = 'carpeta/subcarpeta/subsubcarpeta/';
mkdir_recursivo($ruta,0777);
Donde 0777 hay que poner los permisos que se quieran (con el 0 delante).
En cualquier caso, recomiendo leer el manual oficial y visitar estos enlaces para entender y poder escoger la opción que convenga.
- Manual oficial de PHP: mkdir
- Mkdir recursivo no funciona cuando el path incluye una carpeta raíz inexistente.
Suerte.