Avatar billede old-faithful Praktikant
31. oktober 2006 - 23:19 Der er 10 kommentarer og
1 løsning

Automatisk linkliste-generator (vol. II)

Hej,

Jeg har et PHP script der automatisk laver en liste over filer i pågældende mappe.

Jeg kunne godt tænke mig at udvide funktionaliteten lidt, så jeg har følgende spørgsmål:
1) Hvordan kan jeg få vist filerne i en angiven undermappe (uden at bruge includes)?
2) Hvordan kan jeg få vist mine links sådan, at der er i linkteksten kun vises teksten efter en vis streng? F.eks. hvis der står "Min side - Overskrift", så vises kun "Overskrift" (dvs. teksten efter "-").

Jeg har vedlagt scriptet herunder:
Avatar billede old-faithful Praktikant
31. oktober 2006 - 23:20 #1
<?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 thesurfer Nybegynder
01. november 2006 - 00:31 #2
Det ligner min kode det der.. :-)

1) Ingen anelse..

2) Link-teksten står her:
            $pos_start = strpos(strtolower($contents), '<title>'); // find positionen af "<title>"
            if ( $pos_start != 0 ) // hvis positionen er større end 0 (dvs, "<title>" findes)
            {
                // Med titel:
                $pos_start = ($pos_start + 7); // hop forbi "</title>"
                $pos_end = strpos(strtolower($contents), '</title>'); // snup indtil "</title>"
                $title = substr($contents, $pos_start, $pos_end - $pos_start); // titlen er mellem de 2 punkter
               
                // Det er her punkt 2 kommer ind..
                // Du skal så finde positionen af tegnet (f.eks. "-")
                // og hoppe videre.. du behøver ikke nogen slutpunkter
                // da det er slutningen på værdien i variablen "$title"
               
                echo '<a href="' . $file . '">' . $title . '</a><br>';
            } else {
Avatar billede thesurfer Nybegynder
01. november 2006 - 00:44 #3
Eksempel:

            $pos_start = strpos(strtolower($contents), '<title>');
            if ( $pos_start != 0 )
            {
                // Med titel:
                $pos_start = ($pos_start + 7); // hop forbi "</title>"
                $pos_end = strpos(strtolower($contents), '</title>');
                $title = substr($contents, $pos_start, $pos_end - $pos_start);

                $pos_start = strpos(strtolower($title), '-');
                if ( $pos_start != 0 ) { $title = substr($title, $pos_start) }

                echo '<a href="' . $file . '">' . $title . '</a><br>';
            } else {
Avatar billede thesurfer Nybegynder
01. november 2006 - 00:46 #4
Hmm.. Det skal nok være:

                if ( $pos_start != 0 ) { $title = substr($title, $pos_start + 2) }

Jeg har lige tilføjet "+ 2", da man skal forbi "- ", som er 2 tegn.. prøv at eksperimentere med "2".. det kan være at det skal være 0, 1, 2 eller 3..

Men jeg mener at det skal være 2..
Avatar billede old-faithful Praktikant
01. november 2006 - 14:44 #5
Tak. Ja det er din kode ;-)

Ang. 1) bruger jeg chdir, nu og det virker fint.

Ang. 2) Afprøver det lige og melder så tilbage.
Avatar billede old-faithful Praktikant
01. november 2006 - 17:11 #6
Hmm.. jeg får en fejl: "Parse error: syntax error, unexpected '}' in..."

Nogle råd?
Avatar billede old-faithful Praktikant
01. november 2006 - 17:38 #7
Jeg fandt selv fejlen. Der manglede bare en ";" i koden ;-)

Tak. Læg et svar.
Avatar billede thesurfer Nybegynder
02. november 2006 - 10:13 #8
Semikolon-fejl opstår tit.. :-)

Specielt når man også programmerer i sprog hvor man ikke bruger ";".. og sjovt nok så dukker der også ";" i sprog hvor det ikke indgår.. :-)

- Svar.
Avatar billede old-faithful Praktikant
02. november 2006 - 12:14 #9
Ja, kender det godt... irriterende små tegn! :-)
Avatar billede thesurfer Nybegynder
02. november 2006 - 12:17 #10
Takker for points.. held og lykke med projektet! :-)
Avatar billede old-faithful Praktikant
02. november 2006 - 12:46 #11
Tak!
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