Ver Mensaje Individual
  #8 (permalink)  
Antiguo 11/03/2005, 12:53
Cluster
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
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,