Avatar billede tfswebguy Nybegynder
01. august 2005 - 07:34 Der er 21 kommentarer og
1 løsning

Hente URL fra en fil automatisk

Hvordan kan jeg få et script til at gennemsøge en fil for en URL, og så vise mig den?

f.eks: en linker til mig:
<td width='50px'>
<a href='dtweb.dk'>en hjemmeside</a>
</td>

Så skal scriptet kunne vise:
dtweb.dk
Avatar billede nielle Nybegynder
01. august 2005 - 08:35 #1
F.eks. sådan:
$textFraFil = "<td width='50px'><a href='dtweb.dk'>en hjemmeside</a></td>";

if (preg_match("/<a .*?href=['\"](.+?)['\"].*?>/i", $textFraFil, $matches))
{
    for ($matchNo=1; $matchNo<count($matches); $matchNo++)
    {
        echo $matches[$matchNo] . "<br>";
    }
}
Avatar billede tfswebguy Nybegynder
01. august 2005 - 08:47 #2
okay. Har nu skiftet $textFraFil = ... ud med $tekst = file_get_contents("http://dtweb.dk");

Hvorfor viser den kun én URL? Der er en del flere på
Avatar billede nielle Nybegynder
01. august 2005 - 08:48 #3
Hvis du vil hente teksten fra en fil på disk, så skal den åbnes for læsning med:

    $handle = fopen("c:\\data\\info.txt", "r");  // Windows

- eller

    $handle = fopen("/usr/home/tfswebguy/info.txt", "r");  // Linux el. Unix

Hvis du vil henteteksten fra en webadresse, så skal den åbnes for læsning med:

    $handle = fopen("http://www.example.com/", "r");

Når du har et handle på filen, så læses indholdet med:

    $textFraFil = "";
    while (!feof($handle))
    {
        $textFraFil .= fread($handle, 4096);
    }
    fclose($handle);
Avatar billede nielle Nybegynder
01. august 2005 - 08:49 #4
Prug preg_match_all() i stedet for preg_match()
Avatar billede tfswebguy Nybegynder
01. august 2005 - 08:53 #5
"Array"
Avatar billede nielle Nybegynder
01. august 2005 - 08:55 #6
$textFraFil = "<td width='50px'><a href='dtweb.dk'>en hjemmeside</a></td>";

$totalMatches = preg_match_all("/<a .*?href=['\"](.+?)['\"].*?>/i", $textFraFil, $matches);
if ($totalMatches >= 1)
{
    for ($matchNo=1; $matchNo<$totalMatches; $matchNo++)
    {
        echo $matches[$matchNo][0] . "<br>";
    }
}
Avatar billede tfswebguy Nybegynder
01. august 2005 - 09:02 #7
http://dtweb.dk:81/tester.php

<?
$url = fopen("http://dtweb.dk", 'r');

$tekst = "";
while(!feof($url)){
$tekst .= fread($url, 4096);
}
fclose($url);

$totalMatches = preg_match_all("/<a .*?href=['\"](.+?)['\"].*?>/i", $tekst, $matches);
if($totalMaches >=1)
{
for ($matchNo=1; $matchNo<$totalMatches; $matchNo++)
{
echo $matches[$matchNo][0] ."<br>";
}
}
?>
Avatar billede nielle Nybegynder
01. august 2005 - 09:22 #8
Hmmm, jeg kan ikke lige se hvor det er det går galt. Prøv at udkommentere dele af koden til at der i det mindste er noget som går igennem.

PS: Du må meget gerne øve dig i at skrive lidt mere sigende fejlbeskrivelser end f.eks. blot "Array". Husk på at jeg ikke har den luksus at jeg kan se hvad det er du sidder og laver. Og min ESP-sans er desværre ikke så forfærdeligt veludviklet. ;^)
Avatar billede nielle Nybegynder
01. august 2005 - 09:24 #9
Hmm, prøv at ret:

if ($totalMaches >= 1)

- til:

if ($totalMatches >= 1)
Avatar billede tfswebguy Nybegynder
01. august 2005 - 09:26 #10
Sorry.. Min lille stavefejl. Der står allerede TotalMatches ;)

Og skal nok prøve at uddybe mine fejlbeskrivelser.. :o)
Avatar billede tfswebguy Nybegynder
01. august 2005 - 09:28 #11
totalMatches *
Avatar billede nielle Nybegynder
01. august 2005 - 09:33 #12
Prøv lige at cut'n'paste din kode hertil - i stedet for at afskrive den (og dermed løbe risikoen for intoducere fejl ad den vej).
Avatar billede tfswebguy Nybegynder
01. august 2005 - 19:10 #13
<?
$url = fopen("http://dtweb.dk", 'r');

$tekst = "";
while(!feof($url)){
    $tekst .= fread($url, 4096);
}
fclose($url);

$totalMatches = preg_match_all("/<a .*?href=['\"](.+?)['\"].*?>/i", $tekst, $matches);
if($totalMatches >=1)
{
    for ($matchNo=1; $matchNo<$totalMatches; $matchNo++)
    {
        echo $matches[$matchNo][0] ."<br>";
    }
}
?>

Undskyld den lange ventetid
Avatar billede nielle Nybegynder
01. august 2005 - 19:45 #14
Den der kode virker da helt fin hos mig:

http://www.frip.dk/nielle/e636410.php
Avatar billede nielle Nybegynder
01. august 2005 - 20:02 #15
Den driller, men dette synes at virke:

<?
$url = fopen("http://dtweb.dk", 'r');

$tekst = "";
while (!feof($url))
{
    $tekst .= fread($url, 4096);
}
fclose($url);

$totalMatches = preg_match_all( "/<a[^>]+href=[\"']([^\"']+)/i", $tekst, $matches);
if ($totalMatches >= 1)
{
    foreach ($matches[1] as $match)
    {
        echo $match ."<br>";
    }
}
?>

Der er godt nok nogle halv-underlige urls på den side ;^)
Avatar billede tfswebguy Nybegynder
01. august 2005 - 20:18 #16
Det er alle sub sider, hehe...

Du kan jo se på hjemmesiden, hvordan den er bygget op ;)
Nu virker den.. takker :D
Smid svar..
(Eller, kan du også lige sige mig, hvordan man kan få den til at gå ind og hente teksten mellem <title>--</title> på siderne? Jeg vil nemlig gerne have dem indekseret)
Avatar billede nielle Nybegynder
01. august 2005 - 20:37 #17
$titel = "";
if (preg_match("/<title>(.+?)<\/title>/i"), $tekst, $matches)
    $titel = $matches[1];
Avatar billede nielle Nybegynder
01. august 2005 - 20:37 #18
... og et svar :^)
Avatar billede tfswebguy Nybegynder
01. august 2005 - 20:51 #19
Parse error: parse error, unexpected ',' in c:\inetpub\wwwroot\tester.php on line 18

if (preg_match("/<title>(.+?)<\/title>/i"), $tekst, $matches) <-- Linie 18
Avatar billede nielle Nybegynder
01. august 2005 - 21:27 #20
Der havde sneget sig en parentes for meget ind:

if (preg_match("/<title>(.+?)<\/title>/i", $tekst, $matches)
Avatar billede tfswebguy Nybegynder
01. august 2005 - 23:07 #21
Har rettet den så den kun tager dem med http i, helt selv :D

Den der med titel virker ikke :(
Avatar billede tfswebguy Nybegynder
01. august 2005 - 23:09 #22
Fik den lavet.. :D Takker :D
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