Avatar billede old-faithful Praktikant
26. september 2006 - 16:56 Der er 16 kommentarer og
1 løsning

Automatisk linkliste-generator

Hej

Jeg søger et PHP script som automatisk kan lave en link-liste over HTML (samt HTM) filer i den nuværende mappe.

Ideen er at PHP scriptet laver en liste med links, så man ikke selv behøver det, men blot kan lægge filen i samme (eller evt. en angivet) mappe. Links'ne skal ikke vises som URL'er men derimod skal de fundne siders titler benyttes. Jeg forestiller mig at dette burde kunne gøres "on-the-fly" uden brug af databaser, men jeg er ikke nogen PHP ekspert.

Er der nogen der kender et sådant script?

// Old-Faithful™

P.S. Jeg søger ikke deciderede CMS'er, WordPress o.lign., blot en simpel automatisk linkgenerator der viser sidetitler
Avatar billede old-faithful Praktikant
26. september 2006 - 16:57 #1
Jeg må lige præcisere: Listen skal være en klikbar linkliste.
Avatar billede thesurfer Nybegynder
26. september 2006 - 17:08 #2
Scriptet består af:

1) Find alle filerne i mappe

2) Læs indholdet af hver eneste fil (i en loop=:
$filename = Filnavnet_Indæsttes_Her;
$fd = fopen ($filename, "rb");
$contents = fread ($fd, filesize ($filename));
fclose ($fd);

3) Læs $contents, snup det der står mellem <title> og </title>

4) Smid titlen i en array, som udskrives til sidst via en loop


Koden til at læse filen, har jeg fundet i PHP kategorien.. :-)

Du kan gøre det samme med resten af scriptet..
Avatar billede thesurfer Nybegynder
26. september 2006 - 17:11 #3
Jeg har lige læst på/i http://www.eksperten.dk/spm/294853#rid2825295 at der bare skal stå "r":

$fd = fopen ($filename, "rb");
Avatar billede thesurfer Nybegynder
26. september 2006 - 17:12 #4
Avatar billede thesurfer Nybegynder
26. september 2006 - 17:13 #5
"Vis indhold af mappe på server": http://www.eksperten.dk/spm/550425
Avatar billede old-faithful Praktikant
26. september 2006 - 17:34 #6
Hej, tak for de hurtige svar.

Min viden om PHP er desværre minimal, så mens jeg sagtens kan følgen tanken i f.eks. thesurfer's første indlæg, så aner jeg ikke hvordan jeg sætter det sammen i et samlet script.

Jeg skulle helst bare have et script som jeg kan copypaste og evt. ændre nogle enkelte variabler i. Det lyder relativt simpelt, så det må næsten være lavet før?
Avatar billede thesurfer Nybegynder
26. september 2006 - 17:42 #7
Et fungernde script:

<?php
function getFiles() {
    $files = array();
    $handle = opendir(".");
    while($file = readdir($handle)) {
        if($file != '.' && $file != '..' && $file != "getfiles.php") {

            /* HUSK: Du skal have læse rettigheder til mappen */
            $fd = fopen ($file, "r");
            $contents = fread ($fd, filesize ($file));
            fclose ($fd);
            /**/

            $pos_start = strpos($contents, "<title>") + 7;
            $pos_end = strpos($contents, "</title>");
            $title = substr($contents, $pos_start, $pos_end - $pos_start);
            echo '<a href="' . $file . '">' . $title . "</a><br>";
        }
    }
}

getFiles();
?>
Avatar billede thesurfer Nybegynder
26. september 2006 - 17:44 #8
Jeg har forresten kaldet filen "getfiles.php"..
Avatar billede thesurfer Nybegynder
26. september 2006 - 17:50 #9
Scripte kan forbedres.. og det er jeg igang med nu..
Avatar billede old-faithful Praktikant
26. september 2006 - 18:18 #10
Hej. Det ser ganske lovende ud!

Der er nogle enkelte uhensigtsmæssigheder - som at den ser ud til at kigge i alle filer - ikke kun HTM(L) og TXT - og viser så f.eks. data fra PDF filer m.v.

Måske kunne der indbygges en funktion (array måske?) som kan bestemme hvilke filtyper skal benyttes så man undgår ovennævnte snavs.

Eller eventuelt kunne andre filer også blot vises som filnavnet og ikke titlen (da de ikke har noget <title> felt). Dette er dog ikke absolut nødvendigt, da det først og fremmest er HTML filer der skal linkes til.

Kan man lovligt give flere point end udlovet? Jeg vil jo ikke sætte dig på en stor opgave og så kun give 30 point for det.
Avatar billede thesurfer Nybegynder
26. september 2006 - 18:22 #11
Jeg er lige igang med det.. men den vil ikke som jeg vil..

Filtype-begræsningen er nok det nemmeste..

Ellers kunne man checke om filen indeholdte "<title>".. men filtype-begrænsningen er nok den bedste måde at gøre det på..
Avatar billede thesurfer Nybegynder
26. september 2006 - 18:27 #12
Hvad skal der ske, hvis det er en HTMl fil, men det mangler <title></title> delen?
Avatar billede old-faithful Praktikant
26. september 2006 - 18:32 #13
Hmm.. det havde jeg ikke overvejet, da jeg går ud fra at alle html-filer i mappen konkret vil have en <title> del... Men så må den vel bare vise filnavnet i stedet for, hvis det ikke er for besværligt at implementere - ellers kan du bare se bort fra filer uden title-tag i.
Avatar billede thesurfer Nybegynder
26. september 2006 - 18:43 #14
Ok..
Titler bliver vist, ellers filnavn.

Du kan forhøje points under Funktioner (oppe i venstre side af siden) > "Afsæt flere points".
Avatar billede thesurfer Nybegynder
26. september 2006 - 18:48 #15
Sådan:

<?php
/* HUSK: Du skal have læse rettigheder til mappen! */

function getFiles()
{
    $andre_filer = array();
    $files = array();
    $handle = opendir('.');
    $self = explode('/', $_SERVER['PHP_SELF']);
    $self = $self[count($self) - 1];

    while($file = readdir($handle)) {
        $filtype = explode(".", $file);
        $filtype = $filtype[count($filtype) -1];


        if($file != '.' && $file != '..' && $file != $self && strstr("htm,html,txt", $filtype) )
        {

            $fd = fopen ($file, 'r');
            $contents = fread ($fd, filesize ($file));
            fclose ($fd);

            $pos_start = strpos(strtolower($contents), '<title>');
            if ( $pos_start != 0 )
            {
                // Med titel:
                $pos_start = ($pos_start + 7);
                $pos_end = strpos(strtolower($contents), '</title>');
                $title = substr($contents, $pos_start, $pos_end - $pos_start);
                echo '<a href="' . $file . '">' . $title . '</a><br>';
            } else {

                // Uden titel.. filer der bare skal linkes til:
                array_push($andre_filer, $file);
            }

        }
    }

    if (count($andre_filer) > 0)
    {
        echo '<br>'; // lav mellemrum mellem titlerne og de almindelige filer
        sort($andre_filer); // her sorteres de efter alfabetisk rækkefølge
        foreach($andre_filer as $fil)
        {
            echo '<a href="' . $fil . '">' . $fil . '</a><br>';
        }
    }
}

getFiles();
?>
Avatar billede old-faithful Praktikant
26. september 2006 - 19:30 #16
Super! Det virker helt som det skal! Takker.

Smid et svar.
Avatar billede thesurfer Nybegynder
27. september 2006 - 08:47 #17
Så lærte jeg også noget PHP.. :-)
- Svar
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