Website-Status möglichst effizient und genau

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

      Website-Status möglichst effizient und genau

      Website-Status möglichst effizient und genau
      Hey Leute, ich schreibe gerade an einem Script dass Links aus einer DB auf Online/Offline prüfen soll.
      Dazu nehme ich get_headers();. Leider kommen mir hierbei false-positives auf und das Skript läuft recht lange (55 Links).

      PHP-Quellcode

      1. while($row = $statement->fetchArray()){
      2. $link = new Link($row['linkID']);
      3. ini_set('user_agent', 'LinkCheck 1.0');
      4. @$headers = get_headers($link->url);
      5. if($headers != false){
      6. $code = substr($headers[0], 9, 3);
      7. if(intval($code) < 400){
      8. $editor = new LinkEditor($link);
      9. $editor->update(array(
      10. 'isOnline' => 1
      11. ));
      12. }
      13. else{
      14. $editor = new LinkEditor($link);
      15. $editor->update(array(
      16. 'isOnline' => 0
      17. ));
      18. }
      19. }
      20. else{
      21. $editor = new LinkEditor($link);
      22. $editor->update(array(
      23. 'isOnline' => 0
      24. ));
      25. }
      26. }
      Alles anzeigen


      Wie krieg ich vor allem die 11 falschen Offline Meldungen weg (darunter auch stagetwo)
      Du hast es noch gut!
      Ich würde curl nehmen und die Response und den status Code prüfen.

      hangman schrieb:

      Wenn es bei der deutschen Sprache eine Syntax Prüfung gäbe, wären so einige Menschen stumm


      Du kannst mit Multithreading arbeiten sodass du mehrere Webseiten gleichzeitig geprüft werden.
      Zudem kannst du den Timeout auf sagen wir 5 Sekunden setzen.
      Eine webseite sollte bis dahin zumindest den Anfang einer Anwort gemacht haben^^

      hangman schrieb:

      Wenn es bei der deutschen Sprache eine Syntax Prüfung gäbe, wären so einige Menschen stumm


      mit cURL komme ich auf verbleibende 3 Falschmeldungen, darunter StageTwo:

      PHP-Quellcode

      1. while($row = $statement->fetchArray()){
      2. $link = new Link($row['linkID']);
      3. //ini_set('user_agent', 'Mozilla/5.0 (compatible; codeQuake Linklist V2.0 +http://codequake.de)');
      4. //@$headers = get_headers($link->url);
      5. $ch = curl_init();
      6. curl_setopt($ch, CURLOPT_URL, $link->url);
      7. curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0');
      8. curl_setopt($ch, CURLOPT_TIMEOUT, 5);
      9. curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
      10. curl_setopt ($ch,CURLOPT_VERBOSE,false);
      11. curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false);
      12. curl_setopt($ch,CURLOPT_SSLVERSION,3);
      13. curl_setopt($ch,CURLOPT_SSL_VERIFYHOST, false);
      14. $page = curl_exec($ch);
      15. $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
      16. curl_close($ch);
      17. if($code >=200 && $code < 400){
      18. $editor = new LinkEditor($link);
      19. $editor->update(array(
      20. 'isOnline' => 1
      21. ));
      22. }
      23. else{
      24. $editor = new LinkEditor($link);
      25. $editor->update(array(
      26. 'isOnline' => 0
      27. ));
      28. }
      29. }
      Alles anzeigen


      //thante Edit: Ups jetzt sind sie weg, hatte nach der letzten Änderung vergessen das Skript auszuführen^^
      Du hast es noch gut!
      Das ist mir noch nicht passiert :)
      Ich ver gesse nur ab und an zu speichern und führe das script dann aus^^

      hangman schrieb:

      Wenn es bei der deutschen Sprache eine Syntax Prüfung gäbe, wären so einige Menschen stumm


      hab das ganze jetzt so gemacht:

      PHP-Quellcode

      1. $mh = curl_multi_init();
      2. $handles = array();
      3. while($row = $statement->fetchArray()){
      4. $link = new Link($row['linkID']);
      5. $ch = curl_init();
      6. curl_setopt($ch, CURLOPT_URL, $link->url);
      7. curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0');
      8. curl_setopt($ch, CURLOPT_TIMEOUT, 5);
      9. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
      10. curl_setopt($ch,CURLOPT_VERBOSE,false);
      11. curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false);
      12. curl_setopt($ch,CURLOPT_SSLVERSION,3);
      13. curl_setopt($ch,CURLOPT_SSL_VERIFYHOST, false);
      14. $handles[] = array('linkID' => $link->linkID, 'handle' => $ch);
      15. }
      16. foreach ($handles as $handle){
      17. curl_multi_add_handle($mh, $handle['handle']);
      18. }
      19. $running = null;
      20. do{
      21. curl_multi_exec($mh, $running);
      22. } while ($running);
      23. foreach($handles as $handle){
      24. $codes[] = array('linkID' => $handle['linkID'], 'code' => curl_getinfo($handle['handle'], CURLINFO_HTTP_CODE));
      25. curl_multi_remove_handle($mh, $handle['handle']);
      26. }
      27. curl_multi_close($mh);
      28. foreach($codes as $code){
      29. if($code['code'] >=200 && $code['code'] < 400){
      30. $editor = new LinkEditor($link);
      31. $editor->update(array('isOnline' => 1));
      32. }
      33. else{
      34. $editor = new LinkEditor($link);
      35. $editor->update(array('isOnline' => 0));
      36. }
      37. }
      Alles anzeigen


      läuft seehr fix :)
      Du hast es noch gut!