Får felmeddelande, hjälp - PHP unset()

  • Författare
  • Meddelande

patrikalbertsson

html-kodare

  • Inlägg: 17
  • Blev medlem: 01 sep 2014, 08:15

Får felmeddelande, hjälp - PHP unset()

Inlägg28 jan 2016, 15:51

Hejsan! Jag håller på med ett litet "script" som ska leta efter mailadresser på bloggar via cURL.

När jag ska sortera bort alla länkar som innehåller en img-extension (.jpg osv) på RAD 93 så får jag felmeddelande "Undefined variable: fullurl in C:\Users\Patrik\Dropbox\www\blogcurl.php on line 80".

$fullurl är alltså en länk t.ex "www.google.se/contact", och jag vill unsetta den om en extension hittas.

Någon som kan hjälpa mig att få bort detta problem?
Jag är lite oklar så fråga om ni inte förstår.

KOD: https://codeshare.io/U63Cm


Kod: Markera allt
<?php
set_time_limit(360);

//
// If no mailadress on first page
//
function tryToFindAboutPage($res) {
   
    if (preg_match_all('#href="([^"]*(kontakt|om|about|contact)[^"]*)"#i', $res['body'], $matches)) {
    return $matches[1];
    }   
    return false;
}


//
// Find Email on page
//
function findEmail($res) {
   
    // Search for an email-adress
    if(preg_match_all('#[a-zA-Z0-9_.]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+#', $res['body'], $matches)) {
    return $matches;
    }
    return false;
}


//
// Get content from external page
//
function Crawl($url) {
   
    // Init curl
    $c = curl_init();

    // Set options
    curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($c, CURLOPT_URL, $url);
    curl_setopt($c, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($c, CURLOPT_HEADER, false);
   
    $response = curl_exec($c);
    $info = curl_getinfo($c);
   
    // Close Curl
    curl_close($c);
   
    return['body' => $response, 'url' => $info['url']];
}

//
// Get links from page
//
$urls = [];
for ($i = 150; $i <= 150; $i+=50) {
    $location = "http://www.toppblogg.se/?category=15&offset=$i";
    $res = Crawl($location);
    preg_match_all('#href="/\?action=out&amp;id=(\d+)" target="_blank"#', $res['body'], $matches);
    $urls = array_merge($matches[1], $urls);
}

//
//
//
foreach ($urls AS $match) {
    $url = 'http://www.toppblogg.se/?action=out&id=' . $match;
    $res = Crawl($url);
    $matches = findEmail($res);
   
    // If no mail was found on first page, search for links with keywords
    if ($matches == false) {
        $urls = tryToFindAboutPage($res);
        if ($urls == false) {continue;}
       
        foreach ($urls AS  $url) {
            $fullurl = null;
           
            // If  missing "http", add to link
            if (!preg_match("/http/", $url)) {
                $fullurl = $res['url'] . $url;
            }  else {
                $fullurl = $url;
            }
           
            // If link doesnt include baseurl, remove
            $pos = strpos($fullurl, $res['url']);
            if ($pos === false || $pos > 0) {
                unset($fullurl);
                continue;
            }
            // If any image-extension, remove
            $extensions = [".jpg", ".jpg", ".gif", ".png", ".bmp", ".css"];
            foreach ($extensions AS $e) {
                $pos = strpos($fullurl, $e);
                if ($pos !== false) {
                    unset($fullurl);
                    break;
                }
            }
           
            echo $fullurl . "<br />";
           
        }
    }
}
Användarvisningsbild

Lew

dbwebb

  • Inlägg: 402
  • Blev medlem: 05 sep 2012, 13:42
  • Ort: Karlskrona

Re: Får felmeddelande, hjälp - PHP unset()

Inlägg28 jan 2016, 16:18

Hej,

Prova att skriva ut $fullurl på godtyckliga ställen. Det är ett bra sätt att felsöka på.

Enligt felmeddelandet verkar den gå till unset() innan variabeln är satt.

Mvh Kenneth
When in doubt, use brute force.
Online
Användarvisningsbild

mos

dbwebb

  • Inlägg: 10975
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: Får felmeddelande, hjälp - PHP unset()

Inlägg28 jan 2016, 18:32

"Undefined variable: fullurl in C:\Users\Patrik\Dropbox\www\blogcurl.php on line 80".

På rad 80 har du koden (enligt din codeshare):
Kod: Markera allt
            if (!preg_match("/http/", $url)) {


Så din codeshare matchar nog inte felmeddelandet. Just nu blir det ingen logik i felet. Man vill se den exakta kodraden för felet.

Troligen ser vi en kodrad där du försöker använda (läsa) variabeln $fullurl, men den har inte blivit tilldelad ett värde.
...
..:
.... /mos

patrikalbertsson

html-kodare

  • Inlägg: 17
  • Blev medlem: 01 sep 2014, 08:15

Re: Får felmeddelande, hjälp - PHP unset()

Inlägg28 jan 2016, 20:31

mos skrev:"Undefined variable: fullurl in C:\Users\Patrik\Dropbox\www\blogcurl.php on line 80".

På rad 80 har du koden (enligt din codeshare):
Kod: Markera allt
            if (!preg_match("/http/", $url)) {


Så din codeshare matchar nog inte felmeddelandet. Just nu blir det ingen logik i felet. Man vill se den exakta kodraden för felet.

Troligen ser vi en kodrad där du försöker använda (läsa) variabeln $fullurl, men den har inte blivit tilldelad ett värde.



Hej!

Sorry, felet är på rad 95, alltså
Kod: Markera allt
$pos = strpos($fullurl, $e);


(lade till comments för er så det skulle bli lättare att läsa, därav fler rader.)

Saken är den att $fullurl är ju tilldelat ett värde. När jag kör koden så ser jag alla länkar som jag vill se, sen de länkar som hade en förbjudet format blev felmeddelande. Jag tycker, om jag hade fått bestämma, att foreachloopen borde break; a när den hittat ett fel och unsettat den, sen gå vidare med nästa länk. Men det verkar ju på något sätt som att den vill hitta den igen fast den inte finns..?
Användarvisningsbild

Allinrep

dbwebb

  • Inlägg: 1124
  • Blev medlem: 03 sep 2012, 09:19
  • Ort: Portugal (tillfälligt)

Re: Får felmeddelande, hjälp - PHP unset()

Inlägg28 jan 2016, 23:03

Jag hade felsökt koden med hjälp av mer output. In i varje if och foreach för att se vad som händer på vägen. Output som t.ex.
Kod: Markera allt
            foreach ($extensions AS $e) {
echo "<p>Line 95. foreach extension.</p>";
var_dump($fullurl);
                $pos = strpos($fullurl, $e);
                if ($pos !== false) {
                    unset($fullurl);
                    break;
                }
            }

Nu lär väl i och för sig just de raderna inte ge så mycket eftersom koden redan anser att $fullurl inte finns i det läget...

Kanske här istället, är det helt säkert att det finns något värde i $res och $url ?
Kod: Markera allt
            // If  missing "http", add to link
            if (!preg_match("/http/", $url)) {
                $fullurl = $res['url'] . $url;
echo "<p>Line 81. if match http</p>";
var_dump($fullurl);
            }  else {
                $fullurl = $url;
echo "<p>Line 83. if don't match http</p>";
var_dump($fullurl);
            }

Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 16 gäster