Foros del Web » Programando para Internet » PHP »

Redireccion PHP OnError

Estas en el tema de Redireccion PHP OnError en el foro de PHP en Foros del Web. Que tal, llevo poco tiempo manejando el php y estoy en busca de un script para una pagina web, he buscado en google y en ...
  #1 (permalink)  
Antiguo 10/03/2005, 15:36
 
Fecha de Ingreso: marzo-2005
Mensajes: 4
Antigüedad: 12 años, 9 meses
Puntos: 0
Redireccion PHP OnError

Que tal, llevo poco tiempo manejando el php y estoy en busca de un script para una pagina web, he buscado en google y en varios foros pero no encuentro precisamente lo que busco, ojala me puedan decir como debo de buscarlo o si existiera alguno ya hecho para ese fin. Paso a describir la funcion del script que busco:

Requiero que este script detecte el codigo de error de una url "A" externa al servidor donde esta alojado el script (en otro servidor), si el codigo es 200 (lo que significa que la pagina esta disponible) que la abra o que redireccione hacia ella, pero si regresa un codigo 404, 403 o 500 entonces que redireccione a una direccion "B"

De antemano gracias por su ayuda, saludos
  #2 (permalink)  
Antiguo 11/03/2005, 08:49
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Lo puedes hacer vía sockets:

http://www.php.net/fsockopen

Con esas fucniones abres un "socket" (una IP a cierto puerto) y empiezas a "conversar" con ese puerto abierto en el protocoolo que uses .. en tu caso HTTP (el cual tiene su definición en función de lo que tengas que hacer. eso ya no sería taréa de PHP directo).

Con eso obtendras tu código de error dentro de las cabeceras HTTP devueltas y de ahí tu script podrá decididr que hacer con ese valor para redireccionar vía cabeceras:

header("Location: dondetengasqueir.tal");

Un saludo,
  #3 (permalink)  
Antiguo 11/03/2005, 09:20
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 13 años
Puntos: 34
Esos errores los podes configurar desde apache mismo, o iis, o el servidor que tengas en caso de tener acceso a él.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #4 (permalink)  
Antiguo 11/03/2005, 09:51
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por nicolaspar
Esos errores los podes configurar desde apache mismo, o iis, o el servidor que tengas en caso de tener acceso a él.
mm bueno .. Una cosa es que tu servidor HTTP detecte que se le está pidiendo una página que no tiene .. Pero aquí el detalle es que la pregunta del estado de X página está en "otro" servidor HTTP ..

Un saludo,
  #5 (permalink)  
Antiguo 11/03/2005, 10:03
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 13 años
Puntos: 34
Si, es medio confuso lo que él quiere. La idea que yo planteaba era configurar estos errores desde el servidor (en caso de tener acceso). Así, cuando se produce por ejemplo un error 500, llamar a la pagina error.php?error=500, esta pagina php hace un llamado a la pagina externa (ej: http://www.pirulo.com/mipagina.php) propia de él (no desde la externa al servidor como´él lo plantea, sino al revez), o envia un email, o lo que mas desee, luego direcciona a una pagina por default que puede ser la home.
Es mas, puede comunicar ambas paginas, y que la que esta en pirulo le diga que hacer...Esto le simplificaria mucho la vida creo.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #6 (permalink)  
Antiguo 11/03/2005, 11:35
 
Fecha de Ingreso: marzo-2005
Mensajes: 4
Antigüedad: 12 años, 9 meses
Puntos: 0
Si, he notado que mucha gente se confunde cuando trato de explicarlo xD, voy a tratar de explicarlo de la manera mas clara posible

Supongamos que tengo un sitio "http://computadoras.com" y que quiero hacer un enlace hacia la pagina "http://internet.com"

Lo que quiero que haga este script es que verifique que "http://internet.com" esta online cada vez que hagan clic en el enlace.

Si resuelve que esta online (que resuelve un error 200) entonces que redireccione o vaya hacia esa pagina, pero si al dar clic el script detecta que "http://internet.com" resuelve un error 404 que entonces redireccione, digamos, hacia google.

Saludos, gracias por sus respuestas.

Última edición por Rednapx; 11/03/2005 a las 11:37
  #7 (permalink)  
Antiguo 11/03/2005, 11:47
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 13 años
Puntos: 34
Es interesante lo que queres, y lamento, que nunca me propucieron el hacerlo, asi podría darte una respuesta basada en esperiancia.
Te puedo decir dos cosas. Una, investigaria en internet la manera de capturar este error.
La otra es que intentes con xmlhttp y uses el metodo que te devuelve el error de este, tal vez sea lo que estas buscando, yo lo he usado para otros fines, y tiene esta prestacion.

Cualquier cosa comentanos, sería interesante saber como lo resolviste.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #8 (permalink)  
Antiguo 11/03/2005, 12:53
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por Rednapx
Si, he notado que mucha gente se confunde cuando trato de explicarlo xD, voy a tratar de explicarlo de la manera mas clara posible

Supongamos que tengo un sitio "http://computadoras.com" y que quiero hacer un enlace hacia la pagina "http://internet.com"

Lo que quiero que haga este script es que verifique que "http://internet.com" esta online cada vez que hagan clic en el enlace.

Si resuelve que esta online (que resuelve un error 200) entonces que redireccione o vaya hacia esa pagina, pero si al dar clic el script detecta que "http://internet.com" resuelve un error 404 que entonces redireccione, digamos, hacia google.

Saludos, gracias por sus respuestas.
Ok .. pues es eso lo que te respondí sobre el uso de sockets.. El caso es que tendras que tener un script "lanzador" de tus redireccionamientos donde harás varias cosas:

ir_a_url.php?url=http://www.nosedonde.tal


ese "ir_a_url" .. por sockets intenta la conexión (el ejemplo lo tienes en la documentación de la función fsockopen() que te dejé antes) .. ahí mismo (sin que el "script" salga de su ejecución) vas a obtener la respuesta de esa conexión .. como es HTTP vas a ver unas cabeceras con cierta información (que puedes ver en: http://www.w3.org/Protocols/rfc2068/rfc2068 )

Eso es el protocolo HTTP .. en PHP tienes funciones para "escuchar" ese scoket abierto (fgets ...) y como "variable" que te quedará puedes buscar lo que te intresa .. ese "dato" de error 400 .. 500 .. etc ...


En ese link (del manual oficial de PHP .. que no se si vistes), tienes un ejemplo (en los comentarios de los usuarios .. hay muchos):
jack at jtr dot de
17-Feb-2004 12:05
Here is a function for testing a website/URI for availability:

Código PHP:
<?php
   
/*
   * @return boolean
   * @param  string $link
   * @desc  Überprüft die angegeben URL auf Erreichbarkeit (HTTP-Code: 200)
   */
   
function url_validate$link )
   {        
       
$url_parts = @parse_url$link );

       if ( empty( 
$url_parts["host"] ) ) return( false );

       if ( !empty( 
$url_parts["path"] ) )
       {
           
$documentpath $url_parts["path"];
       }
       else
       {
           
$documentpath "/";
       }

       if ( !empty( 
$url_parts["query"] ) )
       {
           
$documentpath .= "?" $url_parts["query"];
       }

       
$host $url_parts["host"];
       
$port $url_parts["port"];
       
// Now (HTTP-)GET $documentpath at $host";

       
if (empty( $port ) ) $port "80";
       
$socket = @fsockopen$host$port$errno$errstr30 );
       if (!
$socket)
       {
           return(
false);
       }
       else
       {
           
fwrite ($socket"HEAD ".$documentpath." HTTP/1.0\r\nHost: $host\r\n\r\n");
           
$http_response fgets$socket22 );
           
           if ( 
ereg("200 OK"$http_response$regs ) )
           {
               return(
true);
               
fclose$socket );
           } else
           {
//                echo "HTTP-Response: $http_response<br>";
               
return(false);
           }
       }
   }
?>
Fijate como se controla ahí uno de ellos .. el código "200". Con la misma filosofía puedes gestionar otros códigos de error. De hecho no he visto más ejemplos .. pero seguro que hay alguno más completo .. la técnica es la misma.

con ese dato ya "localizado" e identificado .. si requieres redireccionar a un sitio .. tan sólo debes usar:

header ("Location: http://www.nose.tal") ... o continuar el redireccinamiento hacia donde se "pedía:

header("Location: $_GET['url']");

Un saludo,
  #9 (permalink)  
Antiguo 15/03/2005, 14:14
Avatar de axy108  
Fecha de Ingreso: diciembre-2003
Ubicación: En frente de mi Computadora
Mensajes: 415
Antigüedad: 14 años
Puntos: 0
Cita:
Iniciado por nicolaspar
Es interesante lo que queres, y lamento, que nunca me propucieron el hacerlo, asi podría darte una respuesta basada en esperiancia.
Te puedo decir dos cosas. Una, investigaria en internet la manera de capturar este error.
La otra es que intentes con xmlhttp y uses el metodo que te devuelve el error de este, tal vez sea lo que estas buscando, yo lo he usado para otros fines, y tiene esta prestacion.

Cualquier cosa comentanos, sería interesante saber como lo resolviste.
Oye nicolaspar me puedes pasar info o algunos links acerca de xmlhttp usado con php porque no encuentro nada en la red te agradecere cualquier tipo de informacion.

GRACIAS. SALUDOS.
__________________
Todos somos muy ignorantes :pensando: . Lo que ocurre es que no todos ignoramos las mismas cosas ;-) .... Albert Einstein :cool:
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 04:52.