Ver Mensaje Individual
  #1 (permalink)  
Antiguo 11/03/2011, 23:47
Avatar de zerokilled
zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
preg_match aparenta detener proceso

¡buenas gente!

tengo una situacion en la que no logro entender el por que. es la segunda vez que me sucede y pense que algo habia hecho mal la primera vez pero veo que no. se trata de un script que adquiere una serie documentos de una web, procesa el contenido y lo almacena en un documento. por supuesto, todo esto en el entorno PHP CLI de mi equipo local. en la parte del procesamiento lo que hago es buscar un contenido especifico con preg_match para luego crear un documento a base de un esquema. pues no entiendo porque el script se detiene especificamente en esta parte. no me devuelve ningun error, si intento imprimir el valor devuelto por preg_match tampoco lo hace. mi duda es si hay alguna explicacion teorica o logica del por que se detiene el script. el script es el siguiente.
Código PHP:
<?php
# adquiero el contenido de un documento html local que contiene un listado
# URLs. las URLs son extraida con preg_match_all de modo que crea un array
# donde cada elemento contiene, ademas del string pareado, la URL y el nombre
# del documento sin extension. el siguiente ejemplo es un elemento del array.
# ejemplo:
# Array
#        (
#            [0] => <a id="ctl00_MTCS_main_ctl01" href="http://technet.microsoft.com/en-us/library/bb490890.aspx"
#            [1] => http://technet.microsoft.com/en-us/library/bb490890.aspx
#            [2] => bb490890
#        )
// getting URLs
$base file_get_contents('base.html');
$content file_get_contents('command-line.html');
preg_match_all('/<a .+?href="(.+?([^\/"]+?)\.aspx)"/'$content$dataLinkPREG_SET_ORDER);

# se recorre el array de URLs. en cada ciclo se descarga el contenido y se procesa
# para crear un nuevo documento.
// download, write and strip
echo "Downloading and striping content from internet ...\n";
foreach(
$dataLink as $uri){
$filename "$uri[2].html";
$doc file_get_contents($uri[1]);
# aqui es donde se detiene
echo preg_match('@<div class="contentarea"(?:.|\s)+?</div></div>\s+</div>@i'$doc$content_area);
$document preg_replace('/\{content\}/'$content_area[0], $base);
echo 
"$filename: "file_put_contents($filename$document). " bytes\n";
}

# se crea el documento index.html a base del documento que contiene las URLs.
# basicamente cambia las rutas absolutas a rutas relativas para que se haga referencia
# a los documentos descargados.
// index.html
$content preg_replace_callback('/(<a .+?href=")(.+?([^\/"]+?)\.aspx)"/', function($matches){
return 
"$matches[1]$matches[3].html\"";
}, 
$content);
echo 
"\nCreating file: index.html "file_put_contents('index.html'$content);
?>
por si interesan hacer las pruebas, pueden descargar todos los recursos que utilizo. http://www.megaupload.com/?d=PHPV7VJS (57kb). recuerden que estoy trabajando en CLI. la solucion no es tanto lo que me interesa, sino entender el por que. a mi entender no tengo ningun fallo logistico. cualquier explicacion que me puedan brindar es bienvenida.

¡gracias
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 12/03/2011 a las 03:03 Razón: superficialmente arreglando un comentario del codigo