Dans la série “et si j’essayais de coder ça”, voici une fonction PHP qui donne l’adresse redirigée à partir d’une URL. C’est pas clair ? En gros, vous lui donnez une URL bit.ly, tinyurl ou autre, et elle vous donne l’adresse originale. Ça devrait maintenant être plus clair
Pour la petite histoire, c’est un tweet de @jdenoy qui m’a donné l’envie de coder cette fonction et la voici :
function get_redirection($address) {
$url=parse_url($address);
if(!isset($url['scheme'])) $url['scheme']='http';
if(!isset($url['port' ])) $url['port' ]=80;
if(!isset($url['path' ])) $url['path' ]='/';
if($url['scheme']!='http') return FALSE;
$fp=fsockopen($url['host'],$url['port'],$errno,$errstr,30);
if(!$fp) return FALSE;
$out ="GET ".$url['path']." HTTP/1.1\r\n";
$out.="Host: ".$url['host']."\r\n";
$out.="Connection: Close\r\n\r\n";
fwrite($fp,$out);
$response="";
while(!feof($fp)) $response.=fgets($fp,4096);
fclose($fp);
$lines=explode("\r\n",$response);
if(strpos($lines[0],"301")===FALSE and strpos($lines[0],"302")===FALSE) return FALSE;
foreach($lines as $line) {
if(substr($line,0,10)=="Location: ") return substr($line,10);
if($line=="") return FALSE;
}
return FALSE;
}
print get_redirection("http://bit.ly/3eg1ua");
Le principe consiste à consulter l’entête de réponse, d’y détecter s’il s’agit d’une redirection (code 301 ou 302) et alors de retrouver la nouvelle adresse (ligne “Location:”). Ça m’a permis aussi de découvrir la fonction parse_url qui est bien pratique dans mon cas

