Controleren of een pagina bestaat

Praat mee over van alles en nog wat!
Forumregels
Dit forum is voor alle zinnige gesprekken buiten phpBB om. Discussies en gesprekken over interessante onderwerpen.

Een nieuw onderwerp moet..:
  • uiteraard voldoen aan de algemene voorwaarden
  • niet passen in de gewone supportfora
  • interessante zijn voor het overgrote deel van onze gebruikers
  • een neutrale of positieve ondertoon hebben
  • anders zijn dan bestaande onderwerpen
Plaats reactie
ElbertF
Berichten: 5803
Lid geworden op: 12 okt 2004, 08:34
Contacteer:

Controleren of een pagina bestaat

Bericht door ElbertF » 30 aug 2005, 21:26

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:

Gebruikersavatar
WebSiteNet
Berichten: 6524
Lid geworden op: 20 okt 2003, 16:56
Locatie: Wieringerwerf
Contacteer:

Bericht door WebSiteNet » 31 aug 2005, 07:52

Code: Selecteer alles

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

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

Gebruikersavatar
WebSiteNet
Berichten: 6524
Lid geworden op: 20 okt 2003, 16:56
Locatie: Wieringerwerf
Contacteer:

Bericht door WebSiteNet » 31 aug 2005, 08:56

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";
?>

ElbertF
Berichten: 5803
Lid geworden op: 12 okt 2004, 08:34
Contacteer:

Bericht door ElbertF » 31 aug 2005, 20:50

Dit is ongetwijfeld precies wat ik zoek, binnenkort ga ik het implementeren en laat ik weten wat mijn bevindingen zijn :)

Bedankt :bier:

ElbertF
Berichten: 5803
Lid geworden op: 12 okt 2004, 08:34
Contacteer:

Bericht door ElbertF » 31 aug 2005, 21:59

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.

Lontronics

Bericht door Lontronics » 31 aug 2005, 22:13

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

ElbertF
Berichten: 5803
Lid geworden op: 12 okt 2004, 08:34
Contacteer:

Bericht door ElbertF » 31 aug 2005, 22:16

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)..?

Lontronics

Bericht door Lontronics » 31 aug 2005, 22:22

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

Lontronics

Bericht door Lontronics » 31 aug 2005, 22:26

Hier de info, ik ga morgen of zo zelf ook eens wat proberen ;)

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

ElbertF
Berichten: 5803
Lid geworden op: 12 okt 2004, 08:34
Contacteer:

Bericht door ElbertF » 31 aug 2005, 22:31

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..?

Gebruikersavatar
mosymuis
Berichten: 6940
Lid geworden op: 05 feb 2003, 14:00
Locatie: Amsterdam
Contacteer:

Bericht door mosymuis » 01 sep 2005, 01:09

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

Gebruikersavatar
Montana
Berichten: 222
Lid geworden op: 19 jul 2004, 17:09
Locatie: Hellevoetsluis
Contacteer:

Bericht door Montana » 01 sep 2005, 01:26

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:
Gaat het niet zoals het moet,
dan moet het maar zoals het gaat.
Montanas corner
Chat-united

ElbertF
Berichten: 5803
Lid geworden op: 12 okt 2004, 08:34
Contacteer:

Bericht door ElbertF » 01 sep 2005, 10:07

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:

Gebruikersavatar
Paul
Beheerder
Beheerder
Berichten: 20315
Lid geworden op: 23 okt 2003, 11:38
Locatie: Utrecht
Contacteer:

Bericht door Paul » 01 sep 2005, 12:51

Welke script heb je nu precies gebruikt? Vind het wel interesant :)

ElbertF
Berichten: 5803
Lid geworden op: 12 okt 2004, 08:34
Contacteer:

Bericht door ElbertF » 01 sep 2005, 19:26

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:

Plaats reactie