Finde den Fehler nicht Hilfe

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Finde den Fehler nicht Hilfe

    Der nachfolgende Code soll eine Internetseite öffnen (mit der Adresse $url)
    Diese Php-Seite heißt link.php und wird mit link.php?url=$blaa von einer anderen Seite aufgerufen.

    Bei der Linkausgabe, sollen die Links ausgegeben werden.
    Der auftretenden Fehler:

    PHP Fatal error: Maximum execution time of 30 seconds exceeded in C:\Programme\Jana2\html\linkliste\link.php on line 16

    PHP-Code:
    <?php
    /*** Datei einlesen und Links filter ***/
    $filename $url
    $data = @join ('' file ($filename)); 
    if (!
    $data) { 
        echo 
    "there were no data in the specified file."
        exit(); 

    $urls = array(); 
    $links = array(); 
    $pos 0;  
    while (
    $pos strlen($data)-1)  { 
        
    $pos =  strpos($data,"<",$pos); 
        
    $pos++;  
        
    $lastpos strpos($data,">",$pos);  
        
    $tag substr($data,$pos,$lastpos-$pos);  //FEHLER!!!! das ist Zeile 16
        
    if (!strcasecmp(strtok($tag," "),"A")) { 
            
    $pos $lastpos+1
            
    $linkpos $pos
            
    $pos strpos($data,"<",$pos);  
            
    $link substr($data,$linkpos,$pos-$linkpos);  
            
    $links[] = trim($link); 
            if (
    eregi("HREF[ \t\n\rv]*=[ \t\n\rv]*[\"']*([^\"']*)[\"']*",$tag,$regs)) 

                
    $urls[] = $regs[1];  
            } else { 
                
    $urls[] = "";  
            }
        } 
        
    $pos $lastpos+1
    }

    /*** Link Ausgabe ***/
    for ($i=0$i<sizeof($urls); $i++) {  
        print
    "<div><a href=\"$links[$i]\" target=\"_blank\">".$links[$i]."</a></div>";  
    }
    ?>

  • #2
    endlosschleife?

    Kommentar


    • #3
      Brauche Pattern für eregi Funktion

      Ich möchte Links aus einem Html Dokument auslesen:

      $tag ist die Html-Datei, als String
      PHP-Code:
      if (eregi("HREF[ \t\n\rv]*=[ \t\n\rv]*[\"']*([^\"']*)[\"']*",$tag,$regs)) 
      //"<a href=\"/./>/./</a>"
              
      {     
                  
      $urls[] = $regs[1];  
              } 
              else
              { 
                  
      $urls[] = "";  
              } 
      Das erste pattern habe ich gefunden, das zweite habe ich mir selbst überlegt.
      Was bedeutet das : [ \t\n\rv]* kannmir jemand das erste pattern erklären.
      Es funzt nicht richtig, da es immer nur den Teil hinter dem letzten slash als $regs[1] zurück gibt.

      Mein Pattern gibt nichts zurück, ich brauche Hilfe

      Kommentar


      • #4
        1. mit $pos = strpos($data,"<",$pos); suchst du nach < in dem String.
        Frage: warum sollte < in einem URL vorkommen ?
        Ich habe so verstanden, dass du sowas aufrufst:
        link.php?url=http://www.abc.de...

        2. du überprüfst das Ergebnis von strpos nicht und verlässt dich blind
        darauf dass der zurückgegebene Wert auch gültig ist, was meinst du,
        was liefert strpos, wenn < garnicht vorkommt

        3. dito mit $lastpos

        5. Folgerung: $tag kann u.U. garnicht bestimmt werden

        EDIT:

        hab wieder Tomaten aufs Auge gehabt

        Zuletzt geändert von asp2php; 29.03.2004, 21:45.

        Kommentar


        • #5
          Re: Brauche Pattern für eregi Funktion

          Original geschrieben von svebert
          Was bedeutet das : [ \t\n\rv]* kannmir jemand das erste pattern erklären.
          leerzeichen, tabulator und zeilenumbruch (wo für das v steht, weiss ich nicht.)

          also beliebiger whitespace zwischen href und gleichheitszeichen sowie gleichheitszeichen und wert erlaubt.


          EDIT:
          warum machst du einen neuen thread auf, wenn's ums selbe thema geht?
          lass das bitte in zukunft.

          Zuletzt geändert von wahsaga; 29.03.2004, 09:46.
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            Entschuldigung, mit dem neuen Thread.
            Mit diesem Teil:

            PHP-Code:
            $pos =  strpos($data,"<",$pos); 
                
            $pos++;  
                
            $lastpos strpos($data,">",$pos);  
                
            $tag substr($data,$pos,$lastpos-$pos); 
            wird einfach immer der nächste Tag gesucht, it dieser If-Abfrage:
            PHP-Code:
            if (!strcasecmp(strtok($tag," "),"A")) { 
            Soll dann überprüft werden, ob das ein a-Tag ist, also <a. a-Tags sind ja Links.

            PHP-Code:
            $pos $lastpos+1
            $linkpos $pos
            $pos strpos($data,"<",$pos);  
            $link substr($data,$linkpos,$pos-$linkpos);  
            $links[] = trim($link); 
            Das ließt dann den Namen aus, das was zwischen < a herf...> und </a> steht.

            PHP-Code:
            if (eregi("HREF[ \t\n\rv]*=[ \t\n\rv]*[\"']*([^\"']*)[\"']*",$tag,$regs)) 

                        
            $urls[] = $regs[1];  
                    } else { 
                        
            $urls[] = "";  
                    }
                } 
            Damit soll dann die Adresse (href=) ausgelesen werden. (Funktioniert aber nicht richtig!

            Dann zuletzt habe ich jetzt ein break eingefügt und einen Zähler

            PHP-Code:
            if($zähler>strlen($data)){break;}
            $zähler++; 

            Die Ausgabe habe ich auch verändert(Relative Links werden in absolute umgeschrieben:
            PHP-Code:
            /*** Link Ausgabe ***/
            for ($i=0$i<sizeof($urls); $i++) {  
            if(
            substr($urls[$i],0,7)!="http://")
            {
            $urls[$i]=$url."/".$urls[$i];
            }
                print
            "<div><a href=\"$urls[$i]\" target=\"_blank\">".$links[$i]."</a></div>";  

            Aber irgendwie läuft das alles noch nicht richtig.
            $urls[$i] ist leer. --> Der reguläre Ausdruck bei eregi() ist nicht ganz richtig.
            Kann mir jemand ein besseren geben?
            Danke

            Kommentar


            • #7
              Ich habe jetzt ein neues Script geschrieben, bzw das alte modifiziert, kannmir jetzt jemand helfen.
              Es kommt Totales Gewirr herraus. Warum?

              Diese Seite wird mit link.php?url=http://www.existierende-seite.de
              aufgerufen.

              Hier der Code:

              PHP-Code:
              <?php
              /*** Datei einlesen und Links filter ***/
              $filename $url
              $data = @join ('' file ($filename)); 
              if (!
              $data) { 
                  echo 
              "there were no data in the specified file."
                  exit(); 

              $data=strtoupper($data);
              $urls = array(); 
              $links = array(); 
              $pos 0;  
              $gzähler=0;
              while (
              $pos strlen($data)-1)  { 
                  
              $pos =  strpos($data,"<",$pos); //Der nächste offene-Tag
                  
              $pos++;  
                  
              $lastpos strpos($data,">",$pos);  //Position des nächsten geschlossenen Tags
                  
              $tag substr($data,$pos,2);
                  
              $tag=trim($tag);    // Tag-Typ (a, oder br, oder h1, oder p oder was weiß ich
                  
              if($tag=="A")    //Wenn der Tag ein a-Tag ist, dann mache das (s. o. $data=stringtoupper($data):
                  

                      
              $tagpos=$pos;
                      
              $pos $lastpos+1
                      
              $linkpos $pos
                      
              $pos strpos($data,"<",$pos);  //nächster offner Tag (eigentlich immer der </a> Tag
                      
              $link substr($data,$linkpos,$pos-$linkpos);  //Linkbeschriftung (zwischen <a herf="..."> und </a>
                      
              $links[] = trim($link);        //Leerzeichen weg
                      
              $pos=strpos($data,"HREF=",$tagpos); //nächstes Href= suchen,
                      
              $endpos1=strpos($data," ",$pos);     //ende Suchen, entweder bei Leerzeichen, oder bei "
                      
              $endpos2=strpos($data,"\"",$pos);
                      if(
              $endpos1<=$endpos2){$endpos=$endpos1;}else{$endpos=$endpos2;}
                      
              $urln=substr($data,$pos+5,$endpos-($pos+5)); //die neue url
                      
              $urln=str_replace("\"","",$urln); // Gänsefüßchen weg
                  
                      
              $urls[]= trim($urln); //Leerzeichen weg
              }       
                        
              $pos $lastpos+1;  // hinter den Zu-Tag 
                        
              $gzähler++; // Overflow Zähler
              if($gzähler>strlen($data)){break;} //Wenn einmal durch, dann Schleife beenden
              }
              /*** Link Ausgabe ***/
              for ($i=0$i<sizeof($urls); $i++) { 

              if(
              substr($urls[$i],0,7)!="http://"//Wenn relativer Link
              {
              $urls[$i]=$url."/".$urls[$i];  //Dann in absoluter Link ($url wurde bei Aufruf des Scripts übergeben)
              }
                  print
              "<div><a href=\"$urls[$i]\" target=\"_blank\">".$links  [$i]."</a></div>";//Ausgeben
              }
              ?>
              Wo liegt der Fehler?

              Kommentar


              • #8
                Original geschrieben von svebert
                Es kommt Totales Gewirr herraus. Warum?
                Weil dein Script völliger Quatsch ist.
                RegEx-Tutorial lesen und verstehen - dann wirst du feststellen, dass dein Ziel mit wenigen Zeilen PHP erreicht werden kann.
                hopka.net!

                Kommentar


                • #9
                  Das Problem sind diese Regulären Ausdrücke, kann mir da denn nicht jemand helfen?
                  Ich bekomme es einfach nicht gebacken, deshalb bin ich auf das hier oben umgestiegen.

                  Ich habe ja schon zwei Reguläre ausdrücke, sie Funktionieren beide nur nicht richtig!

                  Kommentar


                  • #10
                    In diesem Code sind noch ein paar kleine macken drinne. Es kommt jedenfalls keine Fehlermeldung.
                    Könnte jemand diesen Code überarbeiten und nach Fehlern suchen?

                    PHP-Code:
                    <?php
                    /*** Datei einlesen und Links filter ***/
                    $filename $url
                    $data = @join ('' file ($filename)); 
                    if (!
                    $data) { 
                        echo 
                    "there were no data in the specified file."
                        exit(); 

                    $data=strtoupper($data);
                    $urls = array(); 
                    $links = array(); 
                    $pos 0;  
                    $gzähler=0;
                    while (
                    $pos strlen($data)-1)  { 
                            
                    $posn =  strpos($data,"HREF",$pos);
                             if(
                    $posn!=FALSE){$pos=$posn+5;}
                            
                    $pos++;  
                            
                    $lastpos1 strpos($data," ",$pos);
                            
                    $lastpos2 strpos($data,"\"",$pos);  
                            if(
                    $lastpos1<=$lastpos2){$lastpos=$lastpos1;}else{$lastpos=$lastpos2;}
                            
                    $poso=strpos($data,">",$lastpos);  
                            
                    $posa=strpos($data,"<",$lastpos);
                           
                    $name=substr($data,$poso+1,($posa-$poso)-1);
                        if(
                    $pos==($posn+6)){
                            
                    $länge=$lastpos-$pos;
                            
                    $tag=substr($data,$pos,$länge);
                            
                    $tagstrlen=strlen($tag);
                               
                    preg_match("/^(http:\/\/)?([^\/]+)/i",$tag$matches);
                            
                    $urls[]=$tag;
                            
                    $names[]=$name;
                            if(isset(
                    $matches[0]))
                            {
                                
                    $hosts[]=$matches[0];
                            }
                            else
                            {
                                
                    $hosts[]="";
                            }
                            if(isset(
                    $matches[0]))
                            {
                                
                    $hostnames[]=$matches[1];
                            }
                            else
                            {
                                
                    $hostnames[]="";
                            }
                            
                    $kommentar[]="";
                        }
                    }
                    $i=sizeof($urls);
                    while(
                    $i>0)
                    {
                        
                    $i=$i-1;
                        if(
                    substr($urls[$i],0,7)!="HTTP://")
                        {
                            
                    $url."/".$urls[$i]=$urls[$i];$kommentar[$i]="relativer Link";
                        }
                        else
                        {
                            
                    $kommentar[$i]="absoluter Link";
                        }
                        
                    $endungspos=strpos($urls[$i],".");
                        if(
                    $endungspos!=FALSE)
                        {
                            
                    $endung=substr($urls[$i],$endungspos+1);
                        }
                        else
                        {
                            
                    $kommentar[$i]=$kommentar[$i]."|"."NO POINT";
                            
                    $endung="";
                        }
                        if(
                    $endung!="PHP" and $endung!="HTML" and $endung!="HTM" and $endung!="ASP")
                        {
                            
                    $kommentar[$i]=$kommentar[$i]."|".$endung;
                        }
                        if(
                    substr($urls[$i],strlen($urls[$i]),1)!="/" and substr($kommentar[$i],strlen($kommentar[$i])-3,3)=="INT")
                        {
                            
                    $urls[$i]=$urls[$i]."/";
                        }
                        echo
                    "<br>$kommentar[$i]<br><a href='$urls[$i]'>$names[$i]</a><br>";
                        if(
                    $hosts[$i]!="")
                        {
                            echo
                    "Hostadresse: $hosts[$i]<br>";
                        }
                        if(
                    $hostnames[$i]!="")
                        {
                            echo
                    "Hostname: $hostnames[$i]<br>";
                        }
                        echo
                    "<hr>";
                    }
                    Danke schon einmal im Voraus!

                    Kommentar


                    • #11
                      Original geschrieben von svebert
                      Könnte jemand diesen Code überarbeiten und nach Fehlern suchen?
                      Nein.
                      Du brauchst einfach nur ein preg_match, um alle Links mit Beschreibungen in ein Array zu speichern und anschließend eine Schleife, um die Links ggf. zu ergänzen und auszugeben.

                      Dein Code wird irgendwie immer länger und unübersichtlicher, da blickst du wahrscheinlich selbst nicht mehr durch, oder?
                      hopka.net!

                      Kommentar


                      • #12
                        und wie soll dann dieser verflixte Reguläre Ausdruck aussehen?
                        Könnt ihr mir nicht mal ein Beispiel geben, oder so?

                        Kommentar


                        • #13
                          wie wäre es, wenn DU dich mal mit regex auseinander setzt. es gibt hier ein top tut

                          btw klasse überschrift

                          Kommentar


                          • #14
                            PHP-Code:
                            preg_match("/<a href=\"(.*)\">(.*)</a>/i"$text$matches); 
                            Das wäre ein Beispiel - wird allerdings nur recht selten das gewünschte Ergebnis liefern.
                            hopka.net!

                            Kommentar


                            • #15
                              PHP-Code:
                              <?php
                              echo"<h3>$url</h3><br>";
                              $file=$url;
                              $fcontents  implode (''file($file));   
                              $links=preg_match_all('/<A.*?href.*?=.*?"(.*?)".*?>(.*?)</si',$fcontents,$matches); 
                              foreach(
                              $matches[1] as $key=>$value){
                              $val[]=$value;
                              if(
                              substr(strtoupper($value),0,7)!="HTTP://"){
                              if(
                              substr($value,0,1)!="/"){
                              $value=$url."/".$value;}
                              else{
                              $value=$url.$value;}}
                              $urls[]=$value;
                              }
                              foreach(
                              $matches[2] as $key=>$value){ 
                              $names[]=$value;
                              }
                              $i=0;
                              while(
                              $i<sizeof($urls)){
                                  if(
                              $val[$i]!="/" and $val[$i]!=" /" and $val[$i]!="javascript:;" and substr($val[$i],0,1)!="'")
                                  {
                                      
                              $nr=$i+1;
                                      if(
                              $names[$i]!="" and $names[$i]!=" " and $names[$i]!="  ")
                                      {
                                          echo
                              "$nr) <a href='$urls[$i]'>$names[$i]</a><br>";
                                      }
                                      else
                                      {
                                          echo
                              "$nr) <a href='$urls[$i]'>$urls[$i]</a><br>";
                                      }
                                  }

                              $i++;
                              }
                              ?>
                              Für die, die genauso nach diesen Code gesucht haben....

                              Kommentar

                              Lädt...
                              X