6

file_get_contents() doesn't read data for short urls Example:

  • http://wp.me/pbZy8-1WM,
  • http://bit.ly/d00E2C

Please help me in handle this. OR Is there any CURL function to handle above links?

Laurel
  • 5,965
  • 14
  • 31
  • 57
praneeth
  • 535
  • 1
  • 6
  • 17

3 Answers3

7

This in general works fine. If you find it doesn't do the right thing you can explicitly use a stream context:

$url = "http://bit.ly/d00E2C";
$context = stream_context_create(array('http' => array('max_redirects' => 5)));
$val = file_get_contents($url, false, $context);

should do it. No need to touch CURL for that.

Femi
  • 64,273
  • 8
  • 118
  • 148
  • I stole your contribution of `'max_redirects'`... not sure how I feel about that. Can you merge answers on Stackoverflow? – erisco May 30 '11 at 05:29
  • Since there is really no merge, my expectation is you get the answer given yours is more complete. Since we can't split the points... – Femi May 30 '11 at 05:54
4

On my machine, I cannot replicate your problem; I receive the page as intended. However, should the issue be with the redirect, this may solve your problem.

<?php
$opts = array(
    'http' => array(
        'follow_location' => 1,
        'max_redirects' => 20
    )
);
$context = stream_context_create($opts);
echo file_get_contents('http://wp.me/pbZy8-1WM', false, $context);

I imagine there may be a directive that toggles redirect following, but I have not yet found it. I will edit my answer should I.

erisco
  • 14,154
  • 2
  • 40
  • 45
1

What you can do is using curl with CURLOPT_FOLLOWLOCATION set to True:

$ch = curl_init("http://bit.ly/d00E2C");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$result = curl_exec($ch);
curl_close($ch);

echo $result;
fang
  • 617
  • 6
  • 17