NamePros.Com (http://www.namepros.com/)
-   CODE (http://www.namepros.com/code/)
-   -   Check if a URL exists. (http://www.namepros.com/code/315565-check-if-a-url-exists.html)

SecondVersion 04-11-2007 12:52 PM

Check if a URL exists.
 
Howdy.

This simple function will check if a url is valid (going by parse_url()) and if it's 'online' - by seeing if it returns a 302, 301, or 200 status code.

EDIT: 3/4/2008, updated to more efficient.

PHP Code:
<?php

function is_valid_url($url)
{
    
$url = @parse_url($url);

    if (!
$url)
    {
        return
false;
    }

    
$url = array_map('trim', $url);
    
$url['port'] = (!isset($url['port'])) ? 80 : (int)$url['port'];

    
$path = (isset($url['path'])) ? $url['path'] : '/';
    
$path .= (isset($url['query'])) ? "?$url[query]" : '';

    if (isset(
$url['host']) AND $url['host'] != gethostbyname($url['host']))
    {
        if (
PHP_VERSION >= 5)
        {
            
$headers = implode('', get_headers("$url[scheme]://$url[host]:$url[port]$path"));
        }
        else
        {
            
$fp = fsockopen($url['host'], $url['port'], $errno, $errstr, 30);

            if (!
$fp)
            {
                return
false;
            }
            
fputs($fp, "HEAD $path HTTP/1.1\r\nHost: $url[host]\r\n\r\n");
            
$headers = fread($fp, 4096);
            
fclose($fp);
        }
        return (bool)
preg_match('#^HTTP/.*\s+[(200|301|302)]+\s#i', $headers);
    }
    return
false;
}

?>

bobby9101 04-15-2007 05:04 PM

I needed this a little while ago, and here is what I have:
PHP Code:
function url_exists($url) {
@
$headers = get_headers($url);
    return
preg_match('/^HTTP\/\d\.\d\s+(200|301|302)/', $headers[0]);
}

then use:
if ($headers[0] == 1) {
code
}

SecondVersion 04-15-2007 05:17 PM

Originally Posted by bobby9101
I needed this a little while ago, and here is what I have:
PHP Code:
function url_exists($url) {
@
$headers = get_headers($url);
    return
preg_match('/^HTTP\/\d\.\d\s+(200|301|302)/', $headers[0]);
}

then use:
if ($headers[0] == 1) {
code
}


Not everyone has PHP5 ;)

SecondVersion 03-04-2008 05:28 PM

Updated the code, check first post.

abcde 04-10-2008 05:26 AM

Originally Posted by SecondVersion
Updated the code, check first post.



I don't get it, how to use that code above? sorry, im a newbie with php

RageD 04-10-2008 04:49 PM

Originally Posted by abcde
I don't get it, how to use that code above? sorry, im a newbie with php



First, you need a webhost which supports PHP or to install it on your own PC. But on your own PC you need to also install a webserver and it's a real hassle so it's easier to have a webhost with this.

Then, input this script in to a file called file.php (or whatever_you_want.php) and save and close the file.

Now in SecondVersion's script he created the function called $is_valid_url($url); so what you'll want to do to see if a URL exists: (within the same file that the function is in [or if it's included for that matter])

PHP Code:
<?php
// Test script. Function created by SecondVersion
function is_valid_url($url)
{
    
$url = @parse_url($url);

    if (!
$url)
    {
        return
false;
    }

    
$url = array_map('trim', $url);
    
$url['port'] = (!isset($url['port'])) ? 80 : (int)$url['port'];

    
$path = (isset($url['path'])) ? $url['path'] : '/';
    
$path .= (isset($url['query'])) ? "?$url[query]" : '';

    if (isset(
$url['host']) AND $url['host'] != gethostbyname($url['host']))
    {
        if (
PHP_VERSION >= 5)
        {
            
$headers = implode('', get_headers("$url[scheme]://$url[host]:$url[port]$path"));
        }
        else
        {
            
$fp = fsockopen($url['host'], $url['port'], $errno, $errstr, 30);

            if (!
$fp)
            {
                return
false;
            }
            
fputs($fp, "HEAD $path HTTP/1.1\r\nHost: $url[host]\r\n\r\n");
            
$headers = fread($fp, 4096);
            
fclose($fp);
        }
        return (bool)
preg_match('#^HTTP/.*\s+[(200|301|302)]+\s#i', $headers);
    }
    return
false;
}

if(
is_valid_url("http://namepros.com"))
{
    echo(
"w00t for Namepros.com! It's alive!");
}else{
    echo(
"Oh no! Where did NamePros go!?! :(");
}

?>


-RageD

SecondVersion 04-17-2008 05:11 AM

Thanks for answering that for me, RageD. :tu:

itnashvillecom 06-30-2008 07:42 PM

why not just:

$var = file_get_contents($url);
if ($var == TRUE) {
// url is ok
} else {
// url is invalid
}

SecondVersion 06-30-2008 08:31 PM

Originally Posted by itnashvillecom
why not just:

$var = file_get_contents($url);
if ($var == TRUE) {
// url is ok
} else {
// url is invalid
}


What would be the point of getting the URL's content? That'd be useless and inefficient. This function does the same without the burden of gathering content.

itnashvillecom 07-11-2008 10:33 PM

Just set max length to 1 to keep from grabbing the whole thing.. Beats using a gigantic function, overkill to me. Much less processing time and lower load.


All times are GMT -7. The time now is 10:14 PM.
Site Sponsors
Advertise your business at NamePros

Powered by: vBulletin Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 2.4.0