22. juni 2003 - 02:25Der er
52 kommentarer og 1 løsning
Array der henter en filstruktur
Hvordan skrives et array, der læser samtlige filer i en struktur med en bestemt extension, henter en bestemt linje fra de ti nyest redigerede filer, og poster dem?
Har forgæves rodet rundt i readDir() og array_search() osv, uden resultat.
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
"i en filstuktur" betyder det en mappe og alle den mappes undermapper, etc
sekvensen vil være noget i retning af:
1) gennemløb filstrukturen og find filer med den ekstension 2) De til hver en tid 10 senest redigerede huskes i et array med 10 celler, sammen med deres opdateringsdato. 3) efter gennemløbet tages den der linie fra de 10 filer i arrayet.
tilsidst postes de (hvad det så betyder?)
Synes godt om
Slettet bruger
22. juni 2003 - 12:50#2
Ja, det er jeg klar over.. men hvordan skrives det?!
Det kan jeg ikke svare dig på før du fortæller klar og tydeligt hvad det er du vil.
hvad mener du med "en filstruktur"? hvad karakteristisk er der ved din "en bestemt linie" som vi kan bruge til at finde den? hvad er det "at poste"?
Synes godt om
Slettet bruger
22. juni 2003 - 18:25#4
En filstruktur mener jeg en samling af mapper og undermapper, der indeholder forskellige filer, både billedfiler, html og php filer, og af dem skal filerne med extention'en *.dat.php læses.
En bestemt lije, er den 6. linje i de 10 senest redigerede filer, hvor der starter en linje der begynder med "$archive_text"
Det er muligt jeg bruger "poste" forkert... jeg mener at de ti textstrenge skal hentes fra de ti filer, og samles på en oversigt...
Så på den måde har man en oversigt over de 10 senest skrevede kommentarer i et kommentar-system...
Synes godt om
Slettet bruger
22. juni 2003 - 18:27#5
Oh no.. dvs... det skal rent faktisk hentes fra den 3-sidste linje i filen, ikke den 6.
class Find_ti { var $ti_sidste_filer; var $ti_sidste_tider;
function Find_ti() { $this->ti_sidste_filer = array(); $this->ti_sidste_tider = array(); } // end constructor Find_ti( )
function sift( $fil ) { $tid = filectime( $fil ); if ( count( $this->ti_sidste_filer ) < 10 ) { // endnu ikke fundet 10 $this->ti_sidste_filer[] = $fil; $this->ti_sidste_tider[] = $tid; } else { // har allerede 10 så skrot den ældste $mintid = $tid; // finder mindste tid ( mindst == ældst ) $minindex = 11; // og index hvor mindste tid ligger for ( $i=0; $i<10; $i++ ) { // find mindste if ( $mintid > $this->ti_sidste_tider[$i] ) { $mintid = $this->ti_sidste_tider[$i]; $minindex = $i; } } if ( $minindex < 10 ) { // indsæt denne istedet for den mindste $this->ti_sidste_tider[$minindex] = $tid; $this->ti_sidste_filer[$minindex] = $fil; } } } // end function sift( string )
} // endclass Find_ti
function traverse( $mappesti ) { global $kq; // funktionen må ikke kaldes før $kq er oprettet $dirptr = opendir( $mappesti ); while (($file = readdir($dirptr)) !== false) { if ( is_dir($mappesti."/".$file) { // er det en undermappe ? traverse( $mappesti."/".$file ); } else if ( substr( $file, strlen($file)-4 ) == ".dat" ) { // er det en .dat fil $kq->sift( $mappesti."/".$file ); } else { // alt andet end undermapper og .dat filer ignorerer vi bare } } } // end function traverse( string )
$bundmappe = "/images"; // din grundmappe i strukturen. indskriv selv korrekt mappesti. $kq = new Find_ti(); // et objekt til at indsamle filerne i traverse( $bundmappe ); // indsamler de 10 nyeste .dat filer.
for ( $i=0; $i<count($this->ti_sidste_filer); $i++ ) { // for hver fil vi fandt $temp = file( $this->ti_sidste_filer[$i] ); echo "<br>".$temp[ count($temp)-3 ]; // udskriv trediesidste linie. } // det skulle være det.
det er nok denne kommentar: // alt andet end undermapper og .dat filer ignorerer vi bare prøv at læse den en gang mere :-)
Synes godt om
Slettet bruger
22. juni 2003 - 22:01#13
Læse den engang mere? Hvad mener du ?
Jeg har btw ændret if ( substr( $file, strlen($file)-4 ) == ".dat" ) { // er det en .dat fil
Til
if ( substr( $file, strlen($file)-8 ) == ".dat.php" ) { // er det en .dat fil
Dette er korrekt, ikke?
Synes godt om
Slettet bruger
22. juni 2003 - 22:03#14
Orv.. så kom der ellers gang i den:
Warning: readdir(): supplied argument is not a valid Directory resource in /customers/drengenebynight.dk/drengenebynight.dk/httpd.www/codex_main_test.php on line 167
Linje 167 værende:
while (($file = readdir($dirptr)) !== false) {
Jeg må lige endnu engang takke for at du gider bruge så meget tid på mit problem.. men jeg lærer virkelig af din hjælp..
Synes godt om
Slettet bruger
22. juni 2003 - 22:04#15
Nåå.. jeg kan heller ikke læse dine comments korrekt mere.. my bad.
der et korrekt hvis de filer har navne a la: "filnr1.dat.php" men umiddelbart tvivler jeg på det er det du ønsker. det er mere almindelig at nøjes med en '.dat' extension på filer der indeholder data.
mvh JakobA
Synes godt om
Slettet bruger
22. juni 2003 - 22:07#17
Commentsystemet genererer filer der hedder ".dat.php" .. men jeg kan vel godt ændre det til at lave .dat filer istedet.. men kan jeg ikke bare ændre linjen som jeg har gjort her?
$bundmappe = "./billeder"; // din grundmappe i strukturen. indskriv selv korrekt mappesti. skulle være korrekt. (jeg har tilføjet det der punktum.
nej du skal IKKE ændre til $mappesti."/billeder".$file Det ville gå totalt galt.
vi kalder funktionen traverse med $bundmappe som parameter traverse( $bundmappe ); og det betyder at imens funktionen kører har $mappesti den værdi indeni funktionen.
Synes godt om
Slettet bruger
22. juni 2003 - 22:23#29
Tilføjer jeg det punktum looper den med fejl:
Warning: stat failed for ./billeder/./././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././. in /customers/drengenebynight.dk/drengenebynight.dk/httpd.www/codex_main_test.php on line 168
Kan mit webhotel måske nægte scriptet at liste filer i strukturen?
prøv at kikke i browserens sourcekode. bliver der skrevet noget der der blot ikke bliver vist?
allenfals er det efterhånden på tide du viser hvordan dit php script ser ud NU, så vi ikke snakker forbi hinanden.
Synes godt om
Slettet bruger
22. juni 2003 - 22:41#33
<?php
class Find_ti { var $ti_sidste_filer; var $ti_sidste_tider;
function Find_ti() { $this->ti_sidste_filer = array(); $this->ti_sidste_tider = array(); } // end constructor Find_ti( )
function sift( $fil ) { $tid = filectime( $fil ); if ( count( $this->ti_sidste_filer ) < 10 ) { // endnu ikke fundet 10 $this->ti_sidste_filer[] = $fil; $this->ti_sidste_tider[] = $tid; } else { // har allerede 10 så skrot den ældste $mintid = $tid; // finder mindste tid ( mindst == ældst ) $minindex = 11; // og index hvor mindste tid ligger for ( $i=0; $i<10; $i++ ) { // find mindste if ( $mintid > $this->ti_sidste_tider[$i] ) { $mintid = $this->ti_sidste_tider[$i]; $minindex = $i; } } if ( $minindex < 10 ) { // indsæt denne istedet for den mindste $this->ti_sidste_tider[$minindex] = $tid; $this->ti_sidste_filer[$minindex] = $fil; } } } // end function sift( string )
} // endclass Find_ti
function traverse( $mappesti ) { global $kq; // funktionen må ikke kaldes før $kq er oprettet $dirptr = opendir( $mappesti ); while (($file = readdir($dirptr)) !== false) { if ( $file == "." || $file == ".." ) { // TILFØJET 3 linier her // ignorer windows's standardmapper } else if ( is_dir($mappesti."/".$file) ) { // er det en undermappe ?
traverse( $mappesti."/".$file ); } else if ( substr( $file, strlen($file)-8 ) == ".dat.php" ) { // er det en .dat fil $kq->sift( $mappesti."/".$file ); } else { // alt andet end undermapper og .dat filer ignorerer vi bare } } closedir( $dirptr ); // luk mappen igen. } // end function traverse( string )
$bundmappe = "./billeder"; // din grundmappe i strukturen. indskriv selv korrekt mappesti. $kq = new Find_ti(); // et objekt til at indsamle filerne i traverse( $bundmappe ); // indsamler de 10 nyeste .dat filer.
for ( $i=0; $i<count($this->ti_sidste_filer); $i++ ) { // for hver fil vi fandt $temp = file( $this->ti_sidste_filer[$i] ); echo "<br>".$temp[ count($temp)-3 ]; // udskriv trediesidste linie. } ?>
Der er ikke noget, der ikke bliver vist i sourcen...
Der hvor data skulle fremkomme, står der bare <-- Fully Catched -->
det ser korrekt ud. Den der linie '<-- fully cached -->' kan ikke komme fra scriptet. den må komme fra den kode du har føre eller efter.
Næe hov, det er igen mig. de steder der står $this i forløkken fornede skal der istedetfor stå $kq
for ( $i=0; $i<count($kq->ti_sidste_filer); $i++ ) { // for hver fil vi fandt $temp = file( $kq->ti_sidste_filer[$i] ); echo "<br>".$temp[ count($temp)-3 ]; // udskriv trediesidste linie. }
Det burde egentlig have givet en klar php-fejlmelding, men du har nok slået advarsler fra.
det er de to første linier i for løkken der er rettet i.
Synes godt om
Slettet bruger
22. juni 2003 - 22:54#35
Ah ! Det lader til at virke.
Hvordan slår jeg fejlmeddelelser på så?
Så har jeg kun en sidste bøn til dig.. hvordan fjerner man de første 26 tegn i hver linje, og de sidste 2 En linje starter nemlig sådan her: $archive_text[ $index] = "text text";
Men det er jo kun "text text" jeg skal bruge...
Og hvis jeg kunne lave hver linje til et link, til den side hvor det kommer fra?
Jeg har en parameter, i commentsystemet der hedder $relativeScriptPath der er = den url hvor commenten er lavet på, men ved ikke om den kan bruges her, uden for comment-scriptet.
Synes godt om
Slettet bruger
22. juni 2003 - 22:57#36
Ah .. nogle steder er linjerne rykket lidt, så det er 4-sidste og ikke 3-sidste.
Kan den finde nederste linje der starter med $archive_text[ $index] i stedet for?
Synes godt om
Slettet bruger
22. juni 2003 - 22:59#37
..og endnu en ting når vi er igang med debuggigen!
Det nyeste indlæg vises på 2. linje.. den 1 linje vedbliver det samme indlæg...
du tage en underdel af en linie med funktionen substr http://dk2.php.net/substr fx echo substr( $temp[count($temp)-3], 26, strlen($temp[count($temp)-3]) -26 -3 ); det skulle fjerne de første 26 tegn og de sidste 2 (der er et linieskift allersidst)
hvis der også skal søges efter linien bliver det lidt mere besværligt:
for ( $i=0; $i<count($kq->ti_sidste_filer); $i++ ) { // for hver fil vi fandt $temp = file( $kq->ti_sidste_filer[$i] );
$j = count($temp)-3; // index for 3diesidste linie if ( strpos( $temp[$j], "\$archive_text[ \$index]" ) !== 0 ) { // hvis det ikke er den $j--; // så brug den 4desidste istedetfor } echo "<br>".substring( $temp[$j], 26, strlen($temp[$j]) -26-3 ); // udskriv midten af tredie/fjerde sidste linie. }
check efter om det du er den rigtige linie der udskrives. jeg er ikke helt sikker på det kald af strpos funktionen
an sidste. Ja det er korrekt. de 10 filer er ikke sorteret på nogen måde.
... PATTER!!! test Ingen dato - ... noen rimeligt klamme kommentarer :-))
Synes godt om
Slettet bruger
22. juni 2003 - 23:29#41
Hvor skal det så indsættest helt præcist?
Når folk skriver lange kommentare, kan den hoppe endnu flere linjer op, så det ville være smartest at den kunne udskrive den sidste linje i filen, der starter med $archive_text[ $index]
Ja, kommentarerne varrierer en smule i intelligensnivaeu .. :)
der er for-løkken forneden der er blevet nogen linier større. du kan udskifte if med while så den finder 5'tesidste, 6'tesidste, oswv linie om nødvendigt.
for ( $i=0; $i<count($kq->ti_sidste_filer); $i++ ) { // for hver fil vi fandt $temp = file( $kq->ti_sidste_filer[$i] ); $j = count($temp)-3; // index for 3diesidste linie // ændret til while i næste linie while ( $j>0 && strpos( $temp[$j], "\$archive_text[ \$index]" ) !== 0 ) { // hvis det ikke er den $j--; // så prøv den ovenover istedetfor } echo "<br>".substring( $temp[$j], 26, strlen($temp[$j]) -26-3 ); // udskriv midten af tredie/fjerde/femmte/... -sidste linie. }
det der <br> forrest i echo linien skulle søreme sørge for at der kommer et linieskift der.
Synes godt om
Slettet bruger
22. juni 2003 - 23:41#44
Fatal error: Call to undefined function: substring() in /customers/drengenebynight.dk/drengenebynight.dk/httpd.www/codex_main_test.php on line 195
"hun er fandme klam"ok <br>"jaja - fuck dig!! stop nu bare med de der lorte-mails.. det er ik engang sjovt, bare stalker agtigt... og er det dig, der har skrevet det der pis om mig på alkoholdet.com???"lol - det billede kan jeg bare ikke huske jeg tog..."PATTER!!!"test"Ingen dato - autogenereret post"overvej hvor meget makeup pigen har på!"4th March 2003 - 12:00:00 PM"nej hun har ikke et navn desværre :o)
der bliver kun skrevet <br> een eneste gang.
Synes godt om
Slettet bruger
22. juni 2003 - 23:43#46
Men det <br> er jo forkert.. det sku være mellem "hun er fandme klam" og "ok"
det lyder somom den strpos test jeg laver ikke virker. Check i dine .dat.php filer, er det korrekt at første linie i de filer er en lille kort linie?
prøv evt med blot:
for ( $i=0; $i<count($kq->ti_sidste_filer); $i++ ) { // for hver fil vi fandt $temp = file( $kq->ti_sidste_filer[$i] ); $j = count($temp)-3; // index for 3diesidste linie // ændret til while i næste linie while ( $j>0 && strpos( $temp[$j], "archive_text[" ) === false ) { // hvis det ikke er den $j--; // så prøv den ovenover istedetfor } echo "<br>".substring( $temp[$j], 26, strlen($temp[$j]) -26-2 ); // udskriv midten af tredie/fjerde/femmte/... -sidste linie. }
Synes godt om
Slettet bruger
23. juni 2003 - 12:06#50
Tjek siden.. den virker næsten.
Den viser dog kun 8 linjer, og laver et lidt sjovt break ved sitationstegnene i starten, men ellers er det nogenlunde på plads.
Havde du nogen idé om det med at lave linjerne til et link, til den side de bliver hentet fra?
Hvis det kan hjælpe, er urlen til de sider der postes i, den samme som .dat.php filen, bare uden .dat.
Det hjælper altid at få at vide hvad det er der slal linkes til når der skal laves et link. Så ja det er en hjælp. :-))
men jeg er lidt træt nu. Så det må en anden klare. (eller du selv:)
mvh JakobA
Synes godt om
Slettet bruger
23. juni 2003 - 12:40#52
Din hjælp har også været exceptionel. Jeg takker :)
Synes godt om
Slettet bruger
24. juni 2003 - 17:37#53
Hm.. nu viser den pludselig 10 <br> igen...
Forhelvede!
Synes godt om
Ny brugerNybegynder
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.