• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 599
  • Last Modified:

Test site connection

I E's, I use this line of code for test the connection of a website:
<? $url_actual = "www.example.com";
$fp = fsockopen("$url_actual", 80, $errno, $errstr, 1); ?>

fsockopen returns if have connection or not.

Perhaps, if I use a address like www.example.com/index/site.php, 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 www.example.com/index/site.php:80 (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
0
Pedro Chagas
Asked:
Pedro Chagas
2 Solutions
 
Roger BaklundCommented:
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:

http://php.net/manual/en/function.fsockopen.php#75388
0
 
ycTINCommented:
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("http://google.com/");
var_dump($return);

Open in new window

0
 
Roger BaklundCommented:
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);
0
Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

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

 
markh789Commented:
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

0
 
Pedro ChagasWebmasterAuthor Commented:
Hi @cxr, in your code how I can see the result, connect or not connect, what your code return:
I do this:
====================================
$url = "www.adwordsapi.blogspot.com";
$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
0
 
Roger BaklundCommented:
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);

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

Open in new window

0
 
Pedro ChagasWebmasterAuthor Commented:
Both solutions work (@cxr and @markh789).
0

Featured Post

[Webinar] Improve your customer journey

A positive customer journey is important in attracting and retaining business. To improve this experience, you can use Google Maps APIs to increase checkout conversions, boost user engagement, and optimize order fulfillment. Learn how in this webinar presented by Dito.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now