Test site connection

Posted on 2009-05-11
Last Modified: 2012-05-06
I E's, I use this line of code for test the connection of a website:
<? $url_actual = "";
$fp = fsockopen("$url_actual", 80, $errno, $errstr, 1); ?>

fsockopen returns if have connection or not.

Perhaps, if I use a address like, the system return a error:
Warning: fsockopen() [function.fsockopen]: php_network_getaddresses: getaddrinfo failed: Name or service not known in /home/tags/public_html/teste2.php on line 3

Warning: fsockopen() [function.fsockopen]: unable to connect to (php_network_getaddresses: getaddrinfo failed: Name or service not known) in /home/tags/public_html/teste2.php on line 3"
//LINE3: $fp = fsockopen("$url_actual", 80, $errno, $errstr, 1);

fsockopen just read a pure domains or subdomains, they don't check url with domains+folder+file?

If fsockopen don´t work for check url's, what is the alternative for check if the url exists and have connection?

Regards, JC
Question by:Pedro Chagas
LVL 39

Expert Comment

by:Roger Baklund
ID: 24360181
fsockopen() is for connecting to a host, not to a resource (=web page). If you can connect, then you can send a HEAD request to check if a resource is available. See example code here:

Expert Comment

ID: 24360492
the function  of fsockopen is create the connection between PHP and server, so you only can be use IP,domain or sub-domain

if you need detect remote file, please use file_get_contents() or Curl

$return = @file_get_contents("");

Open in new window

LVL 39

Expert Comment

by:Roger Baklund
ID: 24360567
file_get_contents() can be used, but it reads the entire resouce, and it has a very long timeout by default. fsockopen() can easily be called with a short timeout, and by sending a HEAD request you don't need to read the entire page.

You can set a short timeout with file_get_contents() too, by using a stream context:

$ctx = stream_context_create(array('http'=>array('timeout'=>1)));
$page = file_get_contents($URL, 0, $ctx);
Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.


Assisted Solution

markh789 earned 160 total points
ID: 24363401
Attached a code snippet, give it ago.
function CheckWebsite($website_to_check) {
   if (@fopen($website_to_check, "r")) {
       return true;
   } else {
       return false;

Open in new window


Author Comment

by:Pedro Chagas
ID: 24369635
Hi @cxr, in your code how I can see the result, connect or not connect, what your code return:
I do this:
$url = "";
$ctx = stream_context_create(array('http'=>array('timeout'=>1)));
$page = file_get_contents($URL, 0, $ctx);
echo $ctx;
The result in the browser is: "Resource id #1"

After your code I need do something like:
if (connect) { do something } else if (not connected) { do other thing }

With your code how I work with conditional "IF"?

Regards, JC
LVL 39

Accepted Solution

Roger Baklund earned 240 total points
ID: 24369761
That code is not the best approach, I just wanted to show how you can set a short timeout for file_get_contents(). The $page variable contains the page, or false if the page was not found.

if($page===false) echo 'page is down';
else echo 'page is up';

Note that there is a difference between $url and $URL, variable names are case sensitive.

You must use @ to prevent error when the file is not found: @file_get_contents($url, 0, $ctx);

"" is a host name, not an url. You must prepend it with "http://".
$url = "";
$ctx = stream_context_create(array('http'=>array('timeout'=>1)));
$page = @file_get_contents($url, 0, $ctx);
  echo 'page is down'; 
  echo 'page is up';

Open in new window


Author Closing Comment

by:Pedro Chagas
ID: 31580361
Both solutions work (@cxr and @markh789).

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Foreword (July, 2015) Since I first wrote this article, years ago, a great many more people have begun using the internet.  They are coming online from every part of the globe, learning, reading, shopping and spending money at an ever-increasing ra…
These days socially coordinated efforts have turned into a critical requirement for enterprises.
The viewer will learn how to count occurrences of each item in an array.
The viewer will learn how to create a basic form using some HTML5 and PHP for later processing. Set up your basic HTML file. Open your form tag and set the method and action attributes.: (CODE) Set up your first few inputs one for the name and …

828 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question