Время попробовать, вы уже нашли ответ.
Тем не менее, я бы пошел с чем-то вроде этого:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://bit.ly/tqdUj");
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_exec($ch);
$url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
curl_close($ch);
var_dump($url);
Некоторые объяснения:
- запрашиваемый URL-адрес является коротким
- заголовки не нужны
- вы хотите убедиться, что тело не отображается - вероятно, бесполезно
- ты не хочешь тела; т.е. вы хотите запрос HEAD, а не GET
- Вы хотите, чтобы места следовали, конечно же
- как только запрос был выполнен, вы хотите получить "реальный" URL, который был выбран
И вот, вы получите:
string 'http://wordpress.org/extend/plugins/wp-pubsubhubbub/' (length=52)
(из одного из последних увиденных мною твитов, содержащих короткий URL)
Это должно работать с любыми сервисами сокращенных URL-адресов независимо от их конкретного API.
Вы также можете настроить некоторые другие параметры, такие как тайм-ауты; см. curl_setopt для получения дополнительной информации.