Welcome to WebmasterWorld Guest from 54.205.119.93

Forum Moderators: coopster & jatar k

Message Too Old, No Replies

Get URL redirected url?

   
10:11 pm on Jun 23, 2008 (gmt 0)

5+ Year Member



Hello Hello,

I'm getting crazy!
This is my problem:

I need to echo/print the url that redirects you to a other url.

So i have www.link1.com this site redirects you to www.link2.com

I want to echo/print the link2.com
I get the url through link1.com

Is it possible for php to see where it's redirecting to?

I found on the internet how to read the url of my browser:
$url="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
echo $url;

Maby some like....:

$url="www.link1.com";
......missing part.......
//needs to see where the link goes/read the url
.........................
echo $url;

1:45 am on Jun 24, 2008 (gmt 0)

10+ Year Member



Explain better please.

I need to echo/print the url that redirects you to a other url

what do you mean? who are redirecting?

8:03 am on Jun 24, 2008 (gmt 0)

5+ Year Member



NomikOS thx for the reaction!

I mean:

I have a URL this URL redirects you to a other URL.
This is not my URL, a url of somebody else.

So how did i get the url before:

First i went to firefox, typt the url: www.link1.com/whatever
Then it is loading......
And it goes to www.link1.com/2839398437839403/whatever
I had to copy this link and past it in my html.
This because i DON"T want to use the www.link1.com/whatever..but the coded link!
Because the coded link(www.link1.com/2839398437839403/whatever) changes every 4 days... i have to do this every week

Does this example helps?

8:40 pm on Jun 24, 2008 (gmt 0)

10+ Year Member



What exactly do you want to do? it's legal?

In first place: if you don't make the redirection (with your script in your server) then you can't do nothing.

Any way it seems not a PHP issue. For URL redirections go to [webmasterworld.com...] (in quest of mod_rewrite)

If it is not the case explain more please. It could be interesting.

9:05 pm on Jun 24, 2008 (gmt 0)

5+ Year Member



Hi,

If I understand correctly what you want to do then something like this should work. Assuming you have the curl extension installed:

<?php
$ch = curl_init("http://www.link1.com/whatever");

curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);
curl_close($ch);

$header = "Location: ";
$pos = strpos($response, $header);
$pos += strlen($header);
$redirect_url = substr($response, $pos, strpos($response, "\r\n", $pos)-$pos);
echo $redirect_url;
?>

Andrew

8:56 am on Jun 25, 2008 (gmt 0)

5+ Year Member



Thx thx Little_G

But it did'n work... :(
Here is what I did and also my link, so you can try it maby?

<?php
$ch = curl_init("http://example.com/file/get/Movtrailer-trailer_deadspace514.mov");

curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);
curl_close($ch);

$header = "Location: ";
$pos = strpos($response, $header);
$pos += strlen($header);
$redirect_url = substr($response, $pos, strpos($response, "\r\n", $pos)-$pos);
echo $redirect_url;
?>

This gave me a blaco screen.

So this is my link: http://example.com/file/get/Movtrailer-trailer_deadspace514.mov

and if you past it in your browser you get:
[s9.video.example.com...]

[edited by: coopster at 12:03 pm (utc) on June 25, 2008]
[edit reason] please use example.com [/edit]

9:48 am on Jun 25, 2008 (gmt 0)

5+ Year Member



Hi,

The page actually redirects twice but you still shouldn't get a blank screen, are you sure you have curl installed?

Andrew

10:02 am on Jun 25, 2008 (gmt 0)

5+ Year Member



hihi :) curl extension installed.. i did not see that.. I will google it up!
11:25 am on Jun 25, 2008 (gmt 0)

5+ Year Member



Is there another way?

Because my host doesn't have curl extension enabled, and are not planning to enabling it!

Little_G thx for your quick respons, i will read more carefully next time.

12:39 pm on Jun 25, 2008 (gmt 0)

5+ Year Member



Hi,

Here's the complete code, if curl is enabled it will use curl otherwise php sockets, I left the curl stuff in in case it gets enabled later as curl is generally faster then sockets.

<?php
function follow_redirect($url){
$redirect_url = null;

if(function_exists("curl_init")){
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
}
else{
$url_parts = parse_url($url);
$sock = fsockopen($url_parts['host'], (isset($url_parts['port']) ? (int)$url_parts['port'] : 80));
$request = "HEAD " . $url_parts['path'] . (isset($url_parts['query']) ? '?'.$url_parts['query'] : '') . " HTTP/1.1\r\n";
$request .= 'Host: ' . $url_parts['host'] . "\r\n";
$request .= "Connection: Close\r\n\r\n";
fwrite($sock, $request);
$response = fread($sock, 2048);
fclose($sock);
}

$header = "Location: ";
$pos = strpos($response, $header);
if($pos === false){
return false;
}
else{
$pos += strlen($header);
$redirect_url = substr($response, $pos, strpos($response, "\r\n", $pos)-$pos);
return $redirect_url;
}
}

$url = 'http://example.com/file/get/Movtrailer-trailer_deadspace514.mov';

echo '<ol>';
while(($newurl = follow_redirect($url)) !== false){
echo '<li>', $url, '</li>';
$url = $newurl;
}
echo '</ol>';

echo '<a href="', $url, '">', $url, '</a>';
?>

Andrew

3:44 pm on Jun 25, 2008 (gmt 0)

5+ Year Member



Little_G i LOVE you...

It works great :)
I'm a hobby phpr, so i never would have found this!

Now i have to make this happen on my page... thankyou;)

Great thanks!

3:52 pm on Jun 25, 2008 (gmt 0)

5+ Year Member



Haha, no problem, good luck!

Andrew

9:28 am on Jul 2, 2008 (gmt 0)

5+ Year Member



Ok Little_G Thx for the help before :)

[webmasterworld.com...]

now i have one small question,

I'm going to adjust the script.

First i will tell you what i'm planning to do:
I want to past the $url that it generates to mysql database..
This happens the first time, the second time somebody clicks the link..
it checks if the link is still working(form the mysql)
if yes it echo's the link from mysql
if no it generates the new link it safed to mysql and echo's the new link.

What is my question:
How can i see a link is dead?

some like:

if $url_from_db is empty{
old script
save link to db
echo dblink }
else{
echo dblink}

Also i have to realise that i have to give every url I have a ID so the php script/mysql knows what link to grab! The id i can give by hand.. that is no probleme..

I'm trying the php->mysql->php for the first time so maby you have some tips?

hope you can help me out... i'm spending ours at it
but it's fun ;)

Greats,
Janton

1:55 pm on Jul 2, 2008 (gmt 0)

5+ Year Member



Hi,

The follow_redirect function above sends a HEAD request to look for redirection, you can do a similar thing to check if the link is dead by send a HEAD request and check the response for an error.

Andrew

2:21 pm on Jul 2, 2008 (gmt 0)

5+ Year Member



ok will take a look at that tonight! Thx
But what is the response for an error -> (function code or code)
2:25 pm on Jul 2, 2008 (gmt 0)

5+ Year Member



Hi,

I'm assuming the HTTP response code will be an error code, but that would depend on the website.

Andrew

12:00 pm on Jul 4, 2008 (gmt 0)

5+ Year Member



Hi... I'm getting really close! ;) But at the end there is something wrong..

Ok everything works UNTIL i want to echo $dburl;
or $dburl = "SELECT url FROM `films` WHERE id = '10'";

So my question How do i get the url out of my database?

____________________________________________________________________________________________________________

$_CONFIG["Username"]= 'username'; // Gebruikersnaam
$_CONFIG["Password"]= 'pass'; // Wachtwoord
$_CONFIG["Host"]= 'localhost'; // Host
$_CONFIG["Database"]= 'database';

$url = 'http://example.get.com';

function follow_redirect($url){
$redirect_url = null;


if(function_exists("curl_init")){
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
}
else{
$url_parts = parse_url($url);
$sock = fsockopen($url_parts['host'], (isset($url_parts['port']) ? (int)$url_parts['port'] : 80));
$request = "HEAD " . $url_parts['path'] . (isset($url_parts['query']) ? '?'.$url_parts['query'] : '') . " HTTP/1.1\r\n";
$request .= 'Host: ' . $url_parts['host'] . "\r\n";
$request .= "Connection: Close\r\n\r\n";
fwrite($sock, $request);
$response = fread($sock, 2048);
fclose($sock);
}

$header = "Location: ";
$pos = strpos($response, $header);
if($pos === false){
return false;
}
else{
$pos += strlen($header);
$redirect_url = substr($response, $pos, strpos($response, "\r\n", $pos)-$pos);
return $redirect_url;
}
}


//echo '<ol>';
while(($newurl = follow_redirect($url)) !== false){
//echo '<li>', $url, '</li>';
$url = $newurl;
}
//echo '</ol>';

$Verbinding = mysql_connect($_CONFIG["Host"], $_CONFIG["Username"], $_CONFIG["Password"]);


$DbSelect = mysql_select_db($_CONFIG["Database"], $Verbinding);

if ($DbSelect == false)
{
trigger_error("can't find database");
}

$TestData = array();
$TestData[] = array( '10', $url );

$Query = "
INSERT INTO
`films`
SET
`id` = '%s',
`url` = '%s'
";

foreach ($TestData as $Data)
{
mysql_query(vsprintf($Query, $Data), $Verbinding)
or trigger_error('Can't find query');
}

$dburl = "SELECT url FROM `films` WHERE id = '10'";

echo $dburl;

MySql_close($Verbinding);
____________________________________________________________________________________________________________

Ok everything works UNTIL i want to echo $dburl;
or $dburl = "SELECT url FROM `films` WHERE id = '10'";

So my question How do i get the url out of my database?

12:29 pm on Jul 4, 2008 (gmt 0)

5+ Year Member



o yeah is it possible to have a query been replaced (over the old one).

Because if i want to make a new url, that overrides the old id... it gives a error ;(

$TestData = array();
$TestData[] = array( '10', $url );

$Query = "
INSERT INTO
`films`
SET
`id` = '%s',
`url` = '%s'
";

If i delete the old one out of mysql (the one with 10 id) than i can make a new one that hase the value (id)

8:03 pm on Jul 4, 2008 (gmt 0)

5+ Year Member



OK OK i have it :) well not all but i know how to export or echo database code!

//-- haal de nieuws berichten uit de database
$sql = "SELECT url FROM `films` WHERE `films`.`id` = $jumi[3] LIMIT 1 ";
$res = mysql_query($sql);
$row = mysql_fetch_array($res);
$dburl = $row['url'];

echo $dburl

only how can i replace a existing tabel? question above here?

8:16 pm on Jul 4, 2008 (gmt 0)

5+ Year Member



AND...

well i'm getting really close now! yes yes..
only the if statement?

Like my question before... how does php know the link is dead?
I mean:

you say: HEAD request and check the response for an error.

dburl is the url out of my database!
is it false or error or some? do you know?

$check = "HEAD " . $dburl . (isset($dburl['query']) ? '?'.$dburl['query'] : '') . " HTTP/1.1\r\n";

if ($check == error){
script
}
else {
script
}

8:40 pm on Jul 4, 2008 (gmt 0)

5+ Year Member



Hi,

For overwriting a value in the database use UPDATE [dev.mysql.com].
I'll post code for how to check a dead link in a minute.

Andrew

[edited by: Little_G at 8:48 pm (utc) on July 4, 2008]

8:47 pm on Jul 4, 2008 (gmt 0)

5+ Year Member



Hi,

The following function will check a url to see if it returns a '404 Not Found' error.


<?php
function is_link_dead($url){
if(function_exists("curl_init")){
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
}
else{
$url_parts = parse_url($url);
$sock = fsockopen($url_parts['host'], (isset($url_parts['port']) ? (int)$url_parts['port'] : 80));
$request = "HEAD " . $url_parts['path'] . (isset($url_parts['query']) ? '?'.$url_parts['query'] : '') . " HTTP/1.1\r\n";
$request .= 'Host: ' . $url_parts['host'] . "\r\n";
$request .= "Connection: Close\r\n\r\n";
fwrite($sock, $request);
$response = fread($sock, 2048);
fclose($sock);
}

return (strpos($response, 'HTTP/1.1 404') === 0);
}
?>

Andrew

[edited by: Little_G at 8:48 pm (utc) on July 4, 2008]

4:51 pm on Jul 5, 2008 (gmt 0)

5+ Year Member



Thx little_g

I'm trying it now!

3:56 pm on Aug 18, 2008 (gmt 0)

5+ Year Member



Hey I had the same problem as janton, but sadly the script did not work for me...

the links on this newspaper site:
http://www.example.com/englanda-k.htm
they are all to some intermediate place e.g.
http://lt.example2.com/lt.php?3070
and if you go to this url, you get forwarded to the newspaper's site...

but sadly that script does not return the redirected url...
any ideas?
cheers

[edited by: jatar_k at 4:17 pm (utc) on Aug. 18, 2008]
[edit reason] please use example.com [/edit]

6:16 pm on Aug 19, 2008 (gmt 0)

5+ Year Member



Hi,

That website appears to be blocking scraping [en.wikipedia.org].

Andrew

 

Featured Threads

Hot Threads This Week

Hot Threads This Month