Ver Mensaje Individual
  #6 (permalink)  
Antiguo 26/01/2011, 09:29
Avatar de neodani
neodani
 
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 8 meses
Puntos: 20
Respuesta: Capturar excepcion no funciona

Gracias a ambos, cuando puse la respuesta volví a releer el manual y vi lo que comentabais un poco después. Al final me ha quedado de la siguiente forma

Código PHP:
Ver original
  1. function getFileContents($sFile)
  2. {
  3.     $sContents = @file_get_contents($sFile);
  4.     if ($sContents === false) {
  5.            throw new Exception("Unable to read $sFile");
  6.     }
  7.     return $sContents;
  8. }
  9.  
  10. function ParserWebSimple($url,$expresion,$debug=false,$notificaErrores=false){
  11.  
  12.     $error_msg=''; // string que recopila los errores que va encontrando
  13.    
  14.     try {
  15.         getFileContents($url);
  16.     }
  17.     catch(Exception $e){
  18.         print $e->getMessage();
  19.     }
  20.     preg_match_all($expresion,$web, $matches);
  21.     $resultado=trim(strip_tags($matches[1][0]));
  22.     if (empty($resultado)){
  23.         $error_msg.='La captura está vacia';
  24.     }
  25.     // Si debug está activado imprime los echo dentro del programa
  26.     // Si notificaErrores esta activado te imprime el string $error_msg
  27.    
  28.     return array($resultado,$error_msg);
  29. }
  30.  
  31. // MAIN
  32. $url='http://www.alternate33.es/html/product/Placas_base_Socket_1366/Asus/SABERTOOTH_X58/475921/?tn=HARDWARE&l1=Placas+base&l2=Intel&l3=Socket+1366';
  33. $expresion='|<div id="price" style="position:relative;">(.*?)</div>|is';
  34. list ($resultado,$error_msg)=ParserWebSimple($url,$expresion,$debug=false,$notificaErrores=false);
  35.  
  36. echo "$resultado<br/>";
  37. echo $error_msg;

Qué diferencia hay entre poner el try/catch y luego hacer el
throw new Exception("Unable to read $sFile");

Que simplemente poner...

Código PHP:
Ver original
  1. function getFileContents($sFile)
  2. {
  3.     $sContents = @file_get_contents($sFile);
  4.     if ($sContents === false) {
  5.            echo "Unable to read $sFile";
  6.     }
  7.     return $sContents;
  8. }

Que ventajas tiene...? porque ha efectos visuales no soy capaz de verlo.

Y porqué el IF tiene 3 === en lugar de solo dos? ($sContents === false)

Muchas gracias de antemano por vuestros consejos!