Avatar billede expnet Seniormester
16. juli 2004 - 20:32 Der er 19 kommentarer og
1 løsning

tjek for døde link?

Hej exp'er..

hvordan kan jeg jeg tjekke om nogle af de link jeg har virker eller ikke virker da isted for at skal tage alle linke op i adresse-line en efter en LOL :D


håber i forstår og har en løsning..

//expnet
Avatar billede razmuz_dk Nybegynder
16. juli 2004 - 21:11 #1
Jeg tror ikke PHP har en sådan funktion, men jeg fandt denne "hjemmelavede" funktion på http://dk.php.net/function.file-exists. Den virker på samme måde som file_exists();

<?php
function remote_file_exists($url)
{
  $head = '';
  $url_p = parse_url ($url);

  if (isset ($url_p['host']))
  { $host = $url_p['host']; }
  else
  {
      return '1 Invalid URL host';
  }

  if (isset ($url_p['path']))
  { $path = $url_p['path']; }
  else
  { $path = ''; }

  $fp = fsockopen ($host, 80, $errno, $errstr, 20);
  if (!$fp)
  {
      return '2 Unable to connect to remote host';
  }
  else
  {
      $parse = parse_url($url);
      $host = $parse['host'];

      fputs($fp, 'HEAD '.$url." HTTP/1.1\r\n");
      fputs($fp, 'HOST: '.$host."\r\n");
      fputs($fp, "Connection: close\r\n\r\n");
      $headers = '';
      while (!feof ($fp))
      { $headers .= fgets ($fp, 128); }
  }
  fclose ($fp);
 
  // for debug
  //echo nl2br($headers);
 
  $arr_headers = explode("\n", $headers);
  if (isset ($arr_headers[0]))    {
      if(strpos ($arr_headers[0], '200') !== false)
      { return true; }
      if( (strpos ($arr_headers[0], '404') !== false) ||
          (strpos ($arr_headers[0], '410') !== false))
      { return false; }
      if( (strpos ($arr_headers[0], '301') !== false) ||
          (strpos ($arr_headers[0], '302') !== false))
      {
          preg_match("/Location:\s*(.+)\r/i", $headers, $matches);
          if(!isset($matches[1]))
              return false;
          $nextloc = $matches[1];
          return remote_file_exists($nextloc);
      }
  }
  preg_match('/HTTP.*(\d\d\d.*)\r/i', $headers, $matches);
  return '3 Status Code not supported'.
      (isset($matches[1])?": $matches[1]":'');
}
?>

Du skriver herefter simpelthen:

<?
if(remote_file_exists($url)) { // $url ku fx være http://google.com
print "Linket er lever :-)";
} else {
print "linket er dødt..";
}
?>
Avatar billede Slettet bruger
16. juli 2004 - 22:36 #2
Eller brug en online link-checker, som f.eks http://validator.w3.org/checklink
Avatar billede expnet Seniormester
17. juli 2004 - 00:40 #3
sandbox -> det ville ikke være sjovt at skulle gøre det med over 200 links
Avatar billede Slettet bruger
17. juli 2004 - 02:06 #4
Måske ikke, men stadig bedre end at gøre det manuelt ;-)

Og hvis du ikke gider bruge den online, kan deres script (skrevet i Perl) downloades, så man kan køre det på sin egen maskine. (Både som kommandolinieværktøj og som CGI via sin egen webserver.)

Meget mere fleksibelt kan det næsten ikke blive.
Avatar billede jammerlab Nybegynder
18. juli 2004 - 16:14 #5
Er det bare mig eller kan man ikke bare bruge sockets og hvis den for data så virker den og gør man ik så virker siden jo ik... ikke brug for en masse 10000 linjer kode for at gøre det...
Avatar billede jammerlab Nybegynder
18. juli 2004 - 16:51 #6
<?php
$fp = @fsockopen("www.lala.com", 80, $errno, $errstr, 30);
if (!$fp) {
  echo "Den virker ikke";
} else {
  echo "Den virker";
  fclose($fp);
}
?>
Avatar billede jammerlab Nybegynder
18. juli 2004 - 16:54 #7
og så lige for at gøre den lige mere spændene:

<?php

$query = mysql_query("SELECT * FROM links")or die (mysql_error());
while($row = mysql_fetch_array($query)) {
$fp = @fsockopen("$row[link]", 80, $errno, $errstr, 30);
if (!$fp) {
  mysql_query("DELETE FROM links WHERE id='$row[id]'");
}
}

?>
Avatar billede expnet Seniormester
19. juli 2004 - 14:33 #8
talker -> $errno, $errstr

hva gør de lige
Avatar billede jammerlab Nybegynder
19. juli 2004 - 14:57 #9
Ja de skal være der... det er noget med fejlmeddelserne hvis du ikke kan få forbindelse til siden. Altså om det er en forbindelses fejl osv.

http://dk2.php.net/manual/en/function.fsockopen.php
Avatar billede lonet Nybegynder
19. juli 2004 - 15:02 #10
Der er også muligheden for at bruge W3C's linkchecker: http://validator.w3.org/checklink
Avatar billede lonet Nybegynder
19. juli 2004 - 15:02 #11
Det er selvfølgeligt ikke en php-kode.... Sorry. Det tænkte jeg ikke lige på i forbifarten....
Avatar billede expnet Seniormester
19. juli 2004 - 16:05 #12
talker din løsning er top da du også lige kom med en mysql løsning takker point til dig

forsat god'dag
Avatar billede expnet Seniormester
19. juli 2004 - 16:51 #13
Avatar billede jammerlab Nybegynder
19. juli 2004 - 17:32 #14
Hm godt spørgsmål ;) http://www.comunitatvalenciana.com ser ikke ud til at fungere med http:// foran... og resten efter .com kan den da vidst heller ikke lide... 2.sek ser lige på det.
Avatar billede expnet Seniormester
19. juli 2004 - 17:34 #15
takker fordi du kigger at kigge på det har mange link i sådaner udgaver
Avatar billede jammerlab Nybegynder
19. juli 2004 - 17:51 #16
Hmm.. ser ikke ud til man må havde http:// eller noget efter selve domæne navnet... du kan eventuelt strip dine links så den kontrollere domænet... men jeg kan ikke se nogen løsning på det andet... har prøvet med det meste der var at finde på
http://dk2.php.net/manual/en/function.fsockopen.php
Avatar billede expnet Seniormester
19. juli 2004 - 17:59 #17
talker -> jeg har prøvet razmuz_dk's script og det viker fint
Avatar billede jammerlab Nybegynder
19. juli 2004 - 18:01 #18
ups hehe :) men hvordan den kan finde ud af dte med http:// og ?sdfsdf osv fatter jeg ikke lige ... tror lige jeg vil bruge lidt tid på hans script hehe
Avatar billede jammerlab Nybegynder
19. juli 2004 - 18:03 #19
Ja okay men ikke helt... den kan ikke se om en PHP fukntion som www.domæne.dk/index.php?ælala=true eksistere kun at filen index.php eksistere... men det er da bedre end det jeg kunne komme op med :P
Avatar billede expnet Seniormester
19. juli 2004 - 18:04 #20
preg_match('/HTTP.*(\d\d\d.*)\r/i', $headers, $matches);

preg_match("/Location:\s*(.+)\r/i", $headers, $matches);
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