Ankündigung

Einklappen
Keine Ankündigung bisher.

Quelltext mit cURL auslesen und in mySQL-DB schreiben

Einklappen

Neue Werbung 2019

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

  • Quelltext mit cURL auslesen und in mySQL-DB schreiben

    Hallo zusammen

    ich habe die folgende Tabelle "links"
    Code:
    id | link
    =========
    1 | http://www.google.de
    2 | http://www.yahoo.de
    und die Tabelle "code"
    Code:
    id | link | code
    ================
    Nun ist es das Ziel, die Links aus der Tabelle "links" mit cURL auszulesen und den HTML code in die Tabelle "code" einzutragen.

    Hier mein Code:
    PHP-Code:
    <?php

    mysql_connect
    ("localhost""root""") or die ("keine Verbindung möglich. Benutzername oder Passwort sind falsch");
    mysql_select_db("job") or die ("Die Datenbank existiert nicht.");
    $ergebnis mysql_query("SELECT * FROM links") OR die("Error: $abfrage <br>".mysql_error());
    while (
    $row mysql_fetch_assoc($ergebnis)) {
    $url $row["link"];

    $ch curl_init();
    $timeout 5// set to zero for no timeout
    curl_setopt ($chCURLOPT_URL'$url');
    curl_setopt ($chCURLOPT_CONNECTTIMEOUT$timeout);
    curl_setopt ($chCURLOPT_USERAGENT'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.6 (KHTML, like Gecko) Chrome/16.0.897.0 Safari/535.6'); 
    curl_setopt ($chCURLOPT_REFERER'http://www.google.de'); 
    ob_start();
    curl_exec($ch);
    curl_close($ch);
    $str ob_get_contents();
    ob_end_clean();

    $code mysql_real_escape_string($str); 
    mysql_query("INSERT INTO code (link, code) VALUES ('$url', '$code')");

    }

    ?>
    Nun funktioniert das leider nicht. Das Problem liegt wahrscheinlich dabei das bei der Variablen-Übergabe aus $row["link"]; er keinen Wert erhält und somit $code leer ist.

    Denn wenn ich die Seite z.B: google.de direkt als URL Variable $url setze funktioniert es. Muss die Variable aus dem mySQL-Fetch irgendwie umgewandelt werden?

    So funktioniert es
    PHP-Code:
    <?php

    mysql_connect
    ("localhost""root""") or die ("keine Verbindung möglich. Benutzername oder Passwort sind falsch");
    mysql_select_db("job") or die ("Die Datenbank existiert nicht.");
    $ergebnis mysql_query("SELECT * FROM links") OR die("Error: $abfrage <br>".mysql_error());
    while (
    $row mysql_fetch_assoc($ergebnis)) {
    $url "http://www.google.de";

    $ch curl_init();
    $timeout 5// set to zero for no timeout
    curl_setopt ($chCURLOPT_URL'$url');
    curl_setopt ($chCURLOPT_CONNECTTIMEOUT$timeout);
    curl_setopt ($chCURLOPT_USERAGENT'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.6 (KHTML, like Gecko) Chrome/16.0.897.0 Safari/535.6'); 
    curl_setopt ($chCURLOPT_REFERER'http://www.google.de'); 
    ob_start();
    curl_exec($ch);
    curl_close($ch);
    $str ob_get_contents();
    ob_end_clean();

    $code mysql_real_escape_string($str); 
    mysql_query("INSERT INTO code (link, code) VALUES ('$url', '$code')");

    }

    ?>
    Weiss einer Rat oder eine Möglichkeit dies anderst zu machen? Es darf dabei nicht fopen benutzt werden, da der Header und der Ref mitgegeben werden müssen (die Seiten Google und Yahoo sind Beispiele).


  • #2
    code tags benützt, ist schon mal super.
    einrücken wäre noch nett gewesen^^.
    . Das Problem liegt wahrscheinlich dabei das bei der Variablen-Übergabe aus $row["link"]; er keinen Wert erhält und somit $code leer ist.
    curl ohne url funktioniert nicht, richtig.
    baer wieso ist deas leer?. wieso willst du die url(srtatisch) immer wieder neu eintragen.
    scheint mir ja nicht super normalisiert.
    btw, curl kann auch ohne ob_* den erhaltenen content in einer variable verwalten.
    PHP-Code:
     curl_setopt($chCURLOPT_RETURNTRANSFER,1); 

    Kommentar


    • #3
      Also die $url Variable ist in beiden Fällen nicht leer.
      Sowohl
      PHP-Code:
      $url $row["link"]; 
      als auch
      PHP-Code:
      $url "http://www.google.de"
      haben den folgenden Wert:
      Code:
      http://www.google.de
      Aber das Problem dabei liegt, dass bei der einen Version (direkte Link-Nennung - untere Version) es funktioniert und bei der Auslesung aus der DB nicht.
      Nein Normalisiert ist es nicht, es muss ca. von 5000 Links der Quelltext ausgelesen werden und in der DB im Typ LONGTEXT abgelegt werden. Die Url muss in die zweite Tabelle wieder weitergegeben werden, da diese Tabelle später exportiert werden soll und weiterverarbeitet wird.

      Zuerst habe ich gedacht, dass es möglicherweise daran liegt das die Row-Fetch Ausgabe kein String ist und umgewandelt werden muss, habe es aber mit var_dump überprüft $url / $row["link"]; sind beides Strings.
      Ich weiss wirklich nicht weiter.

      Kommentar


      • #4
        Ich kann dein püroblem nicht ganz nachvollzeiehn, gebe ich zu.
        im zweiten beispiel überschreibst du $url, deswegen ist das ganze db select-zeugs überflüssig.
        das hab ich schon gerafft.
        jedoch nach:
        http://www.php.de/php-fortgeschritte...uncements.html

        hätte ich gerne etwas mehr infos, curl error codes, var_dump ausgaben des db selcts und was auch immer alles notwendig ist um das problem einzugrenzen, ohne selbst so ein setup bauen zu müssen.

        Kommentar

        Lädt...
        X