Expandera korta URL:ar
När man jobbar med att tolka Twitterstatusar och liknande så inser man snabbt att man ofta hanterar korta URL:ar, alltså en URL som används som en redirect till en annan URL för att bli kortare för att rymmas i en statusuppdatering på ett snyggt sätt.
Men i regel så vill jag inte hantera korta url:ar, utan vill ha originaladressen, så jag skrev en liten funktion för att expandera dessa URL:ar som ser ut så här:
<?     function expand_url($url){         $ourl $url;         if ($return get_cache_data($url"1 month""AAA")) return $return;         while(1){             $nr++;             if ($nr>10){                 return $url;             }             if (strstr($url"www")) return $url;             if ($redirect get_url_redirect($url)){                 $url $redirect;             } else {                 save_cache_data($ourl$url"AAA");                 return $url;             }         }     }     function get_url_redirect($url){         $curl shell_exec($GLOBALS["curl_path"] . " -I -# '" addslashes($url) . "'");         if (preg_match("/Location: (.*?)s/"$curl$m)){             return $m[1];         } else {             return false;         }     } ?>
Så, vad den gör är att den loop:ar tills den har hittat originaladressen (eller högst tio gånger). Detta går inte snabbt, eftersom den kontaktar servarna för att hitta en "Location:" header och sedan kontrollera även den tills dess att sidan inte har någon Location-header. Så för en adress som är "förkortad" endast en gång så görs två förfrågningar, om inte adressen har innehåller "www", vilket i regel betyder att adressen inte är en förkortad version.
Så här använder du den:
print expand_url("http://flpbd.it/hNFJN");
Vill du byta ut alla adresser i en textsträng mot eventuella längre versioner av dem, använd då detta:
$string = preg_replace_callback("!(http://[^s]*)!", create_function('$matches', 'return expand_url("$matches[0]");'), $string);
Kanske någon som har användning för detta?
Tutorials
#inlineditbutton