Pagina 1 van 1

Controleren of een pagina bestaat

Geplaatst: 30 aug 2005, 21:26
door ElbertF
Hoe kan ik met PHP het snelst controleren of een webpagina (niet op mijn eigen server) bestaat? Ik gebruik nu dit:

Code: Selecteer alles

$page = @fopen($url, 'r');
Werkt prima, maar erg langzaam als de pagina niet bestaat. Ik wil eigenlijk binnen 5 seconden een stuk of 10 pagina's kunnen controleren. is_file() en file_exists() werken alleen met lokale bestanden.

Dank :bier:

Geplaatst: 31 aug 2005, 07:52
door WebSiteNet

Code: Selecteer alles

$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
   echo "Autsj";
} else {
   echo "Joepie";
}
:)

http://nl2.php.net/fsockopen/

Geplaatst: 31 aug 2005, 08:56
door WebSiteNet
Ik heb even een mass-checker gemaakt. Misschien komt dat in jouw geval beter van pas:

Code: Selecteer alles

<?
$array = array(
    "www.websitenet.nl" => 80,
	"ftp.websitenet.nl" => 21,
	"jgjhllgjlhgh.com" => 80
);

while(list($url, $port) = each($array))
{
    echo "Checking " . $url . " on port " . $port . ": ";
    $fp = fsockopen($url, $port, $errno, $errstr, 30);
    
    if($fp)
	{
        echo '<b style="color: #00cc00;">Beschikbaar</b>';
    }
    else
    {
        echo '<b style="color: #ff0000;">Offline</b>';
    }
	echo "<br />\n";
}
echo "Complete";
?>

Geplaatst: 31 aug 2005, 20:50
door ElbertF
Dit is ongetwijfeld precies wat ik zoek, binnenkort ga ik het implementeren en laat ik weten wat mijn bevindingen zijn :)

Bedankt :bier:

Geplaatst: 31 aug 2005, 21:59
door ElbertF
Helaas blijkt dit ook veel vertraging op te leveren indien de pagina niet bestaat. Het gaat hierom:

http://etncrew.com/extra.php?page=3

Het gaat erom hoe lang er "Retrieving webcam status" onder het kopje "Webcams" staat.

Geplaatst: 31 aug 2005, 22:13
door Lontronics

Code: Selecteer alles

$array = array(
   "www.websitenet.nl",
   "www.etc.nl",
); 
	
foreach ($array as $value)
{
  $fp = @fopen("http://".$value,"rb");
  if ($fp)
  {
      actie
  }
}
Dit bleek voor mij het snelste om van ca. 200 websites informatie te checken ;)

Maar ik ben uiteraard ook zeker nieuwsgierig naar eventuele andere opties....

Jan

Geplaatst: 31 aug 2005, 22:16
door ElbertF
Ja dat is dus exact hetzelfde als mijn eerste poging hierboven. Misschien is het mogelijk de timeout van fopen() of fsockopen() te verkorten, of aantal pogingen te verminderen (zonder php.ini aan te passen)..?

Geplaatst: 31 aug 2005, 22:22
door Lontronics
default_socket_timeout integer

Standaard timeout (in seconden) voor socket gebaseerde streams.
Die misschien? ;)

Staat standaard op 60 vlgs http://nl2.php.net/manual/nl/ref.filesy ... -url-fopen

Geplaatst: 31 aug 2005, 22:26
door Lontronics
Hier de info, ik ga morgen of zo zelf ook eens wat proberen ;)

http://nl2.php.net/manual/nl/function.s ... imeout.php

Geplaatst: 31 aug 2005, 22:31
door ElbertF

Code: Selecteer alles

ini_set("default_socket_timeout", 2);
Dit bedoel je denk ik, maar geen verschil. Ook dit kan ik niet gebruiken:

Code: Selecteer alles

socket_set_timeout($page, 2);
:?

Dit veranderd ook niets:

Code: Selecteer alles

$cam_page = @fsockopen($webcam_id[$_GET[id]][ip], $webcam_id[$_GET[id]][port], $errno, $errstr, 2);
..waar de laatste "2" de "float timeout" is, volgens de PHP site.

// edit: ik vermoedt dat de serverinstellingen een manuele opgave van de timeout niet toestaan..?

Geplaatst: 01 sep 2005, 01:09
door mosymuis
Als fopen() en fsockopen() allebei niet voldoen, blijft er weinig over dan de Curl library te proberen. Wellicht werkt deze sneller, kwestie van testen.

http://nl3.php.net/curl

Geplaatst: 01 sep 2005, 01:26
door Montana
WebSiteNet schreef:Ik heb even een mass-checker gemaakt. Misschien komt dat in jouw geval beter van pas:

Code: Selecteer alles

<?
$array = array(
    "www.websitenet.nl" => 80,
	"ftp.websitenet.nl" => 21,
	"jgjhllgjlhgh.com" => 80
);

while(list($url, $port) = each($array))
{
    echo "Checking " . $url . " on port " . $port . ": ";
    $fp = fsockopen($url, $port, $errno, $errstr, 30);
    
    if($fp)
	{
        echo '<b style="color: #00cc00;">Beschikbaar</b>';
    }
    else
    {
        echo '<b style="color: #ff0000;">Offline</b>';
    }
	echo "<br />\n";
}
echo "Complete";
?>
$fp = fsockopen($url, $port, $errno, $errstr, 30);

die 30 kan je dacht ik ook verlagen in bv 10 seconde
alleen moet je wel uitkijken dat het niet te snel gaat want dan kan je krijgen dat die de site als offline ziet

ik heb dit gebruikt om te kijken of me chatserver online was
om zo een bericht te geven in het forum de status van de chat en wie der in de room waren

af en toe wou die wel eens offline weergeven terwijl de server aan stond :roll:

Geplaatst: 01 sep 2005, 10:07
door ElbertF
mosymuis schreef:Als fopen() en fsockopen() allebei niet voldoen, blijft er weinig over dan de Curl library te proberen. Wellicht werkt deze sneller, kwestie van testen.

http://nl3.php.net/curl
Vreemd genoeg geeft curl_init($uri) bij mij altijd TRUE..?
Montana schreef:$fp = fsockopen($url, $port, $errno, $errstr, 30);

die 30 kan je dacht ik ook verlagen in bv 10 seconde
Dat zei ik ook in mijn vorige bericht :) . Maar ik heb het nog een keer geprobeerd en nu werkt het inderdaad wel! Ik had er een mailtje over gestuurd naar mijn provider, misschien dat zij het voor me hebben opgelost (ook al heb ik nog geen reactie gekregen).

Het werkt, ik heb een snelle online/offline checker voor mijn webcams. Bedankt allemaal :bier:

Geplaatst: 01 sep 2005, 12:51
door Paul
Welke script heb je nu precies gebruikt? Vind het wel interesant :)

Geplaatst: 01 sep 2005, 19:26
door ElbertF
Ehm, bij elkaar zijn het 5 samengevoegde pagina's, maar dit is de checker + weergave van de lijst met statussen van de webcams:

Code: Selecteer alles

		for ( $row = 0; $row < count($webcam); $row ++ )
		{
			$webcam_status = @fsockopen($webcam[$row][ip], $webcam[$row][port], $errno, $errstr, 1);
			
			print add_zeros(count($webcam) - $row) . ' ' . BULLET_2 . ( $webcam_status ? '<a target="_top" href="*ROOT*extra.php?page=' . PAGE_EXTRA_WEBCAM . '&id=' . $webcam[$row][id] . '" title="">' : '' ) . $webcam[$row][name] . ( $webcam_status ? '</a>' : '' ) . 
			( ( $webcam[$row][add_date] >= ( mktime() - ( 60 * 60 * 24 * 7 * 2 ) ) ) ? ' <span class="flag">[ new ]</span>' : '' ) .
			' [ ' . (	$webcam_status ? '<b>Online</b>' : 'Offline' ) . ' ]' .
			( ( $webcam[$row][id] == $_GET[id] ) ? BULLET_5 : '' ) .
			'<br />';
		}
Als je meer wilt zien moet je het maar zeggen :bier: