Foros del Web » Programando para Internet » PHP »

duda con curl en php

Estas en el tema de duda con curl en php en el foro de PHP en Foros del Web. hola, buscando en internet encontre este codigo que me permite obtener la uf desde la pagina www.sii.cl , y solo es necesario enviar el año ...
  #1 (permalink)  
Antiguo 04/11/2015, 12:09
 
Fecha de Ingreso: febrero-2006
Mensajes: 446
Antigüedad: 18 años, 9 meses
Puntos: 3
duda con curl en php

hola, buscando en internet encontre este codigo que me permite obtener la uf desde la pagina www.sii.cl, y solo es necesario enviar el año y dia. Mi problema es cuando creo un

objeto de la clase UF en mi pagina para desplegar la uf del dia. Cuando la pagina sii.cl esta sin problemas funciona todo bien y se puede visualizar la uf diaria, pero si la

pagina www.sii.cl esta caida en mi pagina se despliega el mensaje die("Error obteniendo datos via cURL"); que es parte de la clase y no se puede realizar ninguna operacion mas

en mi web.

Mi consulta es si existe alguna forma de validar curl cuando este caida la pagina http://www.sii.cl para que la mia siga funcionando y no se caiga.

Gracias
Código PHP:

class Uf {

    
/**
     *
     * @var private
     */
    
private $url;

private function 
getFromSII($anyo) {
        
$this->anyo $anyo;
        
$this->url "http://www.sii.cl/pagina/valores/uf/uf$anyo.htm";
        
$ch curl_init("$this->url");
        
curl_setopt($chCURLOPT_HEADER1);
        
curl_setopt($chCURLOPT_POST0);
        
curl_setopt($chCURLOPT_RETURNTRANSFER1);
        
$output curl_exec($ch) or die("Error obteniendo datos via cURL");
        
curl_close($ch);
        
$output explode("<table"$output);
        
$output explode("<tr>"$output[1]);
        
$arr_dia = array();
        for (
$i 2$i count($output); $i++) {
            
$tmp explode("<th style='text-align:center;'>"$output[$i]);
            
$tmp explode("</th>"$tmp[1]);
            
$tmp2 explode("<td style='text-align:right;'>"$output[$i]);
            for (
$o 0$o count($tmp2); $o++) { //aqui es para limpiar los datos
                
$tmp2[$o] = str_replace("\n   """str_replace("</td>"""$tmp2[$o]));
                
$tmp2[$o] = str_replace("\n"""$tmp2[$o]);
                
$tmp2[$o] = str_replace("</tr>"""$tmp2[$o]);
                
$tmp2[$o] = str_replace("&nbsp;""0"$tmp2[$o]);
                
$tmp2[$o] = str_replace("."""$tmp2[$o]);
                
$tmp2[$o] = str_replace(","$this->separador_decimal$tmp2[$o]); //aqui cambiamos el separador decimal
                
$tmp2[$o] = str_replace("<th style='text-align:center;'>"""$tmp2[$o]);
                
$tmp2[$o] = str_replace("</th>"""$tmp2[$o]);
            }
            
$arr_dia[$tmp[0]] = $tmp2;
        }
        
//caso especial 31-12
        
$tmp $arr_dia[31][12];
        
$tmp explode("\r"$tmp);
        
$arr_dia[31][12] = $tmp[0];
        
$this->data $arr_dia;
    } 
en mi pagina la llamo de esta forma para desplegar la uf diaria y funciona todo bien cuando la pagina del sii.cl no esta caida.

Código PHP:
include("UF.php");
$uf = new Uf(2012); 
echo 
$uf->getDate('01-01-2012')//TRAERIA LA UF DEL DIA 1 DE ENERO


//otras operaciones del formulario de ingreso 
  #2 (permalink)  
Antiguo 04/11/2015, 16:15
Avatar de chronos682  
Fecha de Ingreso: febrero-2004
Ubicación: Tunja - Boyacá - Colombia
Mensajes: 627
Antigüedad: 20 años, 9 meses
Puntos: 69
Respuesta: duda con curl en php

Borra el die que hay después de ejecutar la función curl_exec y valida el resultado almacenado en output:

Código PHP:
Ver original
  1. $output = curl_exec($ch);
  2. If ($output)
  3. {
  4.    //continuar con el código que ya tienes
  5. }
  6. Else
  7. {
  8.    //Mostrar un mensaje que informe que la página está caída y que se van a utilizar los últimos datos disponibles.
  9.    //Continuar con el funcionamiento normal de la página
  10. }

Algo así sería.
__________________
Si te gustó la respuesta dale +1

HERNÁN G. SIABATO M.
[email protected]

Etiquetas: curl, formulario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:04.