Avatar billede lsolesen Nybegynder
11. februar 2003 - 20:23 Der er 39 kommentarer og
2 løsninger

Tjek for dødt link

Jeg har ved at kigge rundt på Eksperten.dk fået lavet følgende, men det returnerer ikke helt det rigtige, som du kan se på www.larsolesen.dk/links/links.php.

function tjek_link($linket)
{
    if($filepointer=@fopen($linket,"r"))
    {
    echo " linket virker";
    @fclose($filepointer);
    }
    else
    {
    echo " dødt link";
    }

}
Avatar billede 7th Praktikant
11. februar 2003 - 20:29 #1
Sjovt nok sidder jeg og roder med noget ala det samme. Her er det jeg har bikset sammen.

if (! empty ($_REQUEST['www']))
{
$www = $_REQUEST['www'];

if ((substr ($www , 0 , 7) == "http://") && (strlen ($www) == 7))
{
echo "Webadresse godkendt...";
}

if ((substr ($www , 0 , 7) == "http://") && (strlen ($www) > 7))
{
$url = @fopen ("$www" , "r");
if ($url)
{
echo "Webadresse godkendt...";
}

else
{
echo "Webadresse ukorrekt...";
}
}

elseif (substr ($www , 0 , 7) != "http://")
{
echo "Webadresse ukorrekt...";
}
}
Avatar billede 7th Praktikant
11. februar 2003 - 20:30 #2
Hov, disse to if-sætninger er til mit eget interne system, så dem kan du godt pille fra.

if ((substr ($www , 0 , 7) == "http://") && (strlen ($www) == 7))
{
echo "Webadresse godkendt...";
}

elseif (substr ($www , 0 , 7) != "http://")
{
echo "Webadresse ukorrekt...";
}
Avatar billede 7th Praktikant
11. februar 2003 - 20:40 #3
Hmm mærkeligt, din funktion burde virke fint. Hvordan bruger du din funktion ? Måske er det der problemet er.
Avatar billede fangel Nybegynder
11. februar 2003 - 20:42 #4
burde man, i teorien, ikke kunne åbne en socket til siden, og se om man fik en header 404 tilbage? bare et teoretisk spm... ?
Avatar billede schaefner Juniormester
11. februar 2003 - 20:49 #5
<?php
function FileExist($file){
    if ($fp = @fopen($file, "r")){
        echo "<font color=\"darkgreen\">Online</font> | $file<br>";
        fclose($fp);
    } else {
        echo "<font color=\"red\">Offline</font> | $file<br>";
    }
}
FileExist("http://eksperten.dk");
FileExist("http://soeloeve.dk");
FileExist("http://thomaslunde.dk");
FileExist("http://sukkerbolle.com");
FileExist("http://sex.com");
?>
Avatar billede schaefner Juniormester
11. februar 2003 - 20:49 #6
www.disneyzone.dk/link.php
- Lader til at virke fint
Avatar billede lsolesen Nybegynder
11. februar 2003 - 20:57 #7
Er problemet måske, at man ikke kan tjekke specifikke sider?
Avatar billede schaefner Juniormester
11. februar 2003 - 20:58 #8
lsolesen >> Mener du f.eks www.disneyzone.dk/enside.html ?
Avatar billede schaefner Juniormester
11. februar 2003 - 21:00 #9
lsolesen >> Prøv at se linket nu
Avatar billede lsolesen Nybegynder
11. februar 2003 - 21:16 #10
Ok, nu forstår jeg ikke så meget. Har kopieret dit script og sat det ind på:
www.larsolesen.dk/links/links.php

Vis kilde, hvis du ikke tror mig :)
Avatar billede schaefner Juniormester
11. februar 2003 - 21:26 #11
hmmm, mærkeligt :)
Avatar billede lsolesen Nybegynder
11. februar 2003 - 21:33 #12
schaefner > Ja, ikke
Avatar billede 7th Praktikant
11. februar 2003 - 22:04 #13
Måske kunne det have noget at gøre med dit php modul. Kig engang her http://www.php.net/manual/en/function.fopen.php
Avatar billede lsolesen Nybegynder
12. februar 2003 - 00:47 #14
Kan det have noget med at gøre at serveren kører SAFE MODE, og hvis det har, hvordan kommer jeg så uden om det, uden at lave om på serveren?
Avatar billede lsolesen Nybegynder
12. februar 2003 - 00:49 #15
allow_url_fopen er sat til No Value i phpinfo() - kan det være årsagen?
Avatar billede lsolesen Nybegynder
12. februar 2003 - 01:59 #16
Jeg har flyttet testfilen til www.larsolesen.dk/testarea/index.php
Avatar billede 7th Praktikant
12. februar 2003 - 17:27 #17
Safe mode kan enten sættes til on eller off. Generelt rådes man til at sætte safe mode til off, hvilket jeg personligt også har gjort. Du kan sætte safe mode til off i php.ini filen. Søg efter safe_mode = On i filen, men jeg tror nu ikke det er der problemet ligger. Omkring allow_url_fopen har jeg disse værdier. allow_url_fopen: Local Value = on - Master Value = on. Der står i php.ini, "to allow the treatment of URLs (like http:// or ftp://) as files" skal allow_url_fopen være = On. Prøv det og se om det ikke hjælper. Søg efter allow_url_fopen = Off.
Avatar billede 7th Praktikant
27. marts 2003 - 13:56 #18
Kuk kuk, lukketid...
Avatar billede lsolesen Nybegynder
18. maj 2003 - 09:11 #19
Tak for hjælpen. Undskyld den lange lukketid, men har været i Afrika i 3 mdr :) Ingen af svarene virker, fordi jeg hos B-one ikke kan få allow_url_fopen slået til. Så det virker fortsat ikke :(
Avatar billede fangel Nybegynder
18. maj 2003 - 11:11 #20
hmm... som sagt burde man kunne lave en fsockopen til siden... lave et request og se hvilke headere man fik tilbage... vil lige undersøge sagen...

Morten
Avatar billede lsolesen Nybegynder
18. maj 2003 - 11:12 #21
Det må du gerne. Du kan stadig tjekke min test-side på www.larsolesen.dk/testarea/index.php for at se, hvad jeg har gjort.
Avatar billede fangel Nybegynder
18. maj 2003 - 12:15 #22
prøv at se på det her script:

---
<?php

// funktioner

function checkSite($host, $page){
  $sock = fsockopen($host, 80);
  fputs($sock, "GET /" . $page . " HTTP/0.9\n");
  fputs($sock, "Host: " . $host . "\n");
  fputs($sock, "\n");
  $data = fgets($sock,2048);
  if(ereg("404 Not Found", $data)){
    return false;
  }
  else{
    return true;
  }
}

function checkSiteText($host, $page){
  if(checkSite($host, $page)) echo "Online";
  else echo "Offline";
}

// afprøvelse


// unden text return
if(checkSite("www.eksperten.dk","")){
  echo "Online";
}
else{
  echo "Offline'";
}

echo "<br><hr><br>";

// med text return
checkSiteText("www.eksperten.dk","denne_side_findes_ik.phtml");

?>
---

ved ikke om det virker uden allow_url_fopen, men det er sådan set ikke en fopen men en fsockopen... ;)

Morten
Avatar billede lsolesen Nybegynder
18. maj 2003 - 12:31 #23
Det virker perfekt. Nu skal jeg bare have lavet det sådan, at jeg ikke behøver at skrive host og siden for sig, men det må jeg lige kigge på! Det må let kunne laves med noget explode?
Avatar billede lsolesen Nybegynder
18. maj 2003 - 12:32 #24
I øvrigt. Er det meget hårdt for ens server at køre sådan et script ved sine links. Det er et forsøg på at sikre sig, at der aldrig er døde links på min side!
Avatar billede fangel Nybegynder
18. maj 2003 - 12:33 #25
jeg ved det faktisk ik'... ;)

laver det lige om så host og page er en variabel

Morten
Avatar billede lsolesen Nybegynder
18. maj 2003 - 12:35 #26
Det lyder perfekt. Gad vide, hvordan man finder ud af, om det er for hårdt for ens server at lave sådan et tjek på ens eksterne links? Det ville være ret rart at vide!
Avatar billede fangel Nybegynder
18. maj 2003 - 12:37 #27
meget utestet... men prøv engang...

---
<?php

// funktioner

function checkSite($uri){
  $pos = strpos($uri, "/");
  $host = addslashes(substr($uri, 0, pos));
  $page = addslashes(substr($uri, $pos, strlen($uri)-$pos);
  $sock = fsockopen($host, 80);
  fputs($sock, "GET /" . $page . " HTTP/0.9\n");
  fputs($sock, "Host: " . $host . "\n");
  fputs($sock, "\n");
  $data = fgets($sock,2048);
  if(ereg("404 Not Found", $data)) return false;
  else return true;
}
function checkSiteText($uri){
  if(checkSite($uri)) echo "Online";
  else echo "Offline";
}

// afprøvelse


// unden text return
if(checkSite("www.eksperten.dk/")){
  echo "Online";
}
else{
  echo "Offline'";
}

echo "<br><hr><br>";

// med text return
checkSiteText("www.eksperten.dk/denne_side_findes_ik.phtml");

?>
---

Morten
Avatar billede fangel Nybegynder
18. maj 2003 - 12:44 #28
hmm... du kan jo se hvor lang tid det tager for serveren at tjekke 50 links... ;)

Morten
Avatar billede fangel Nybegynder
18. maj 2003 - 12:49 #29
hovsa... sådan her...

---
<?php

// funktioner

function checkSite($uri){
  $pos = strpos($uri, "/");
  $host = substr($uri, 0, $pos);
  $page = substr($uri, $pos, strlen($uri)-$pos);
  $sock = fsockopen($host, 80);
  fputs($sock, "GET /" . $page . " HTTP/0.9\n");
  fputs($sock, "Host: " . $host . "\n");
  fputs($sock, "\n");
  $data = fgets($sock,2048);
  if(ereg("404 Not Found", $data)) return false;
  else return true;
}
function checkSiteText($uri){
  if(checkSite($uri)) echo "Online";
  else echo "Offline";
}

// afprøvelse


// unden text return
if(checkSite("www.eksperten.dk/")){
  echo "Online";
}
else{
  echo "Offline'";
}

echo "<br><hr><br>";

// med text return
checkSiteText("www.eksperten.dk/denne_side_findes_ik.phtml");

?>
---

Morten
Avatar billede fangel Nybegynder
18. maj 2003 - 12:58 #30
hov... der er vidst en fejl... kan ikke få den til at tjekke mere end en adresse...

(i første omgang er det fordi der mangler en fclose(), men selv om denne er der kan den stadig ik'... vil lege lidt videre med det...)

Morten
Avatar billede fangel Nybegynder
18. maj 2003 - 13:04 #31
Ahh... fundet fejlen... den bliver sur når domainet ikke findes ;) ;) ;) laver lige noget rettelse... ;)
Avatar billede lsolesen Nybegynder
18. maj 2003 - 13:05 #32
Ser frem til en god løsning :)
Avatar billede fangel Nybegynder
18. maj 2003 - 13:18 #33
sådan... nu virker det... også selvom domainet ikke findes eller host er en IP...

Der er dog mindst en fejl... hvis du laver opslag på "[IP]/side.html" ligner det at scriptet hænger... ;)

---
<?php

// funktioner
function checkSite($uri){
  $pos = strpos($uri, "/");
  if($pos !== false){
    $host = substr($uri, 0, $pos);
    $page = substr($uri, $pos+1, strlen($uri)-$pos);
  }
  else{
    $host = $uri;
    $page = "";
  }
  if(ereg("[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}", $host) || gethostbyname($host) !== $host){
    $sock = fsockopen($host, 80);
    fputs($sock, "GET /" . $page . " HTTP/0.9\n");
    fputs($sock, "Host: " . $host . "\n");
    fputs($sock, "\n");
    $data = fgets($sock,2048);
    fclose($sock);
    if(ereg("404 Not Found", $data)) return false;
    else return true;
  }
  else return false;
}
function checkSiteText($uri){
  if(checkSite($uri)) echo "<font color=\"green\">Online</font> | $uri<br>";
  else echo "<font color=\"red\">Offline</font> | $uri<br>";
}

// afprøvelse med text return
checkSiteText("www.eksperten.dk/konto.phtml");
checkSiteText("www.eksperten.dk/enside.asp");
checkSiteText("www.soeloeve.dk/");
checkSiteText("www.thomaslunde.dk");
checkSiteText("www.sukkerbolle.com/");
checkSiteText("www.sex.com/");
checkSiteText("80.199.149.130");
//checkSiteText("80.199.149.130/findes.php"); // hænger
?>
---

Morten
Avatar billede fangel Nybegynder
18. maj 2003 - 13:19 #34
hov... kom lige itanke om endnu en fejl... ved ikke hvad der sker når man prøver at connecte til en IP der ikke findes... vil lige rette det...

Morten
Avatar billede fangel Nybegynder
18. maj 2003 - 13:29 #35
nu kan den også se på en IP der ikke findes... gået væk fra at skrive source...

se den her:
http://mfa.ath.cx/findes.php

Morten
Avatar billede fangel Nybegynder
18. maj 2003 - 13:31 #36
MEN, jeg har lige nogle lektier der skal klares... du må pt leve med at du ikke kan tjekke sider hvor du har en "[IP]/page.ext"

Morten
Avatar billede lsolesen Nybegynder
18. maj 2003 - 13:33 #37
Lidt mærkeligt giver den et andet output, når jeg har den på min side!

http://www.larsolesen.dk/testarea/index.php
Avatar billede fangel Nybegynder
18. maj 2003 - 13:33 #38
Hov, kan se på din test at du får 2 af sider til at være Online hvor jeg får den til Offline... ved ikke hvorfor, og skal som sagt lave lektier...
Avatar billede lsolesen Nybegynder
18. maj 2003 - 13:37 #39
Ja, dit site har ret, og mit har fejl. Men din løsning virker i hvert fald bedre end den forrige, hvor den kun kunne gætte offline.
Avatar billede 7th Praktikant
19. maj 2003 - 10:36 #40
Aha Afrika, nice - takker for points :) Nice løsning dea_pg...
Avatar billede fangel Nybegynder
19. maj 2003 - 15:09 #41
7th => tak... synes selv den er ret funky... gidder dog ikke bruge mere tid på at lave den perfekt... desuden synes den at være for langsom til integrering i større sammenhæng... ;)

Morten
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester