04. juli 2002 - 03:24Der er
22 kommentarer og 2 løsninger
Reload side på et bestemt tidspunkt
Jeg har to problemer og et spørgsmål :)
1: Jeg har en tidsfunktion på min side i php. If ($time == "02:20:00") så skal der afvikles en handling. Da jeg ikke kan køre cronjobs på min server, må jeg prøve at få fat i tiden på andenvis. Manuelt kan jeg godt selv få fat i tiden, og derved afvikle handlingen ved at reloade siden et par gange.
2: Kan man ved at lave et javascript som reloader siden på et bestemt tidspunkt "fange" tiden i php scriptet på samme ovenstående manuelle måde ?
3: Hvis ja, så skal jeg have hjælp til at lave et script som reloader siden f.eks klokken 17:00:00 tre gange.
Jeg prøvede selv at strikke noget sammen som synes logisk for mig, men den er ikke alt for god (sucks), da den ikke reloader ;)
<script language="javascript"> <!--
function timer() { nu = new Date(); klTime = nu.getHours(); klMinut = nu.getMinutes(); klSekund = nu.getSeconds(); if (klTime < 10) klTime = "0" + klTime; if (klMinut < 10) klMinut = "0" + klMinut; if (klSekund < 10) klSekund = "0" + klSekund; tiden = klTime + ":" + klMinut + ":" + klSekund; if (tiden == "03:12:00") { location.reload(true); }
det nemmester er slet ikke at reloade siden. Alt hvad du vil have er jo at dit php script bliver trigget, og det kan du gøre ved at preloade det ind i et Image.
<script type='text/javascript'> <!-- //
var startTid = new Date( 2002, 7-1, 4, 3, 12, 00 ); // år, måned-1, dag, time, minut, sekund
var imgs = new Array( new Image(), new Image(), new Image() );
function waitForIt( ) { var nu = new Date(); if ( nu.valieOf() > startTis.valueOf() ) { doload( 0 ); } else { setTimeout( "waitForIt( );", 60*1000 ); } }; //end waitForIt( )
function doLoad( nr ) { imgs[nr].src = self.location.href; // eller en anden url nr++; if ( nr < 4 ) { setTimeout( "doload(" +nr +");", 1000 ); } }; //end doLoad
</script>
men jeg fatter ikke hvorfor der skal reloades 3 gange, kan een gang ikke gøre det?
Checker lige jakoba... Nej, det er 7th logik den med tre reloads ;) Jeg har brug for to sekunder til at få afviklet mine handlinger, det trejde sekund er for at være på den sikre side.
Jeg forstår ikke helt hvad du mener ved at trigge og preloade mit php script ind i et image. Dumt spørgsmål, men skal jeg putte mit php script ind i et image tag ?
Sorry to say, men der sker ingenting, siden hverken blinker eller reloader. Jeg har sat scriptet ind i head på min side, hvor jeg også har inkluderet php scriptet. Prøvede så at sætte tiden til var startTid = new Date( 2002, 7-1, 4, 4, 14, 58 ); og if ($time == "04:14:59"), men ingenting. Har jeg gjort noget galt ?
Kan man ikke bare lave noget ala dette (dog virker det ikke), og som kun reloader tre gange...
<!--
function reloader() { timer = new Date(); var time = timer.getHours(); var minut = timer.getMinutes(); var sekund = timer.getSeconds(); thetime = time + ":" + minut + ":" + sekund;
if (thetime == "5:21:0"); { setTimeout("self.location.reload(true)",1000); } }
problemet med den der er "kun 3 gange". Hver reload loader det samme script og hvordan skal den tredie reload vide at den er den tredie og ikke skal reloade igen.
" min side, hvor jeg også har inkluderet php scriptet. " Hvordan bliver det php-script inkluderet? har du mulighed for at vise noget af koden.
Jeg bruger bare den normale inklude kode include "statistik.txt". Statistik ligger sig så mellem <!-- statistik start --> og <!-- statistik slut -->. http://www.justrandb.dk/test/statistik.txt er php koden som kan afvikles.
1) lav en kopi af koden i statistik.txt hvor den ikke genererer nogensomhelst htmlkode
2) skriv linierne: header ("Content-type: image/gif"); header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header ("Cache-Control: no-cache, must-revalidate"); header ("Pragma: no-cache"); forreest i filen. tilføj linien efter første '<?'
3) kald den ye fil statistik2.php
første linie i funktionen doLoad imgs[nr].src = self.location.href; // eller en anden url ændres så til: imgs[nr].src = "statistik2.php"; // eller en anden url
Oki lad mig lige omskrive statistik, det kommer nok til at tage et stykke tid, da jeg lige skal nørkle den med ingen html kode, da koden jo er viklet ind i netop en tabel ;)
Får denne fejl på grund af de indsatte header i toppen af statistiktest.php...
Warning: Cannot add header information - headers already sent by (output started at C:\Php Base\Just RnB\index.php:6) in C:\Php Base\Just RnB\statistiktest.php on line 2
Hviler mig lige et par timer, imens kan du hvis du har lyst så lige måske komme op med en anden ide, da det script du har skrevet lader til at volde ( ihvertfald hos mig :) ) problemer...
Men når jeg tænker kommer der ikke nødvendigvis MINDRE arbejde ud af det.
Du har et program der samler statistikdata og som med jævne mellemrum skal summere op på de statistikdata.
Det er faktisk to helt forskellige jobs. Eller 3 hvis de indsamlede statistikdata også engang skal vises frem
1) indsamle data der skal indgå i statistikken
2) summere indsamlede data for en periode sammen til så det fylder mindre og let kan vises
3) hente summerede data og vise dem frem.
På noget nær alle sider udføres 1) lav e record i dtabasen med tidspunkt, referer, unik, skærmopløsning, IPnr, osv. osv, hvad du nu indsamler det giver en masse records der er uoverskuelige og optager en masse plads, til gengæld indeholder de al den information der overhovedet kan indsamles.
hvis du har plads nok og en hurtig server kan du lave 3) udfra de data der blev samlet af 1) hvis brugeren vil hav info om skærmopløsninger i uge 14 kan du udtrække de data fra databasen, samle dem sammen og skrive dem pænt i en tabel.
men det fylder ad h til at gemme alle de rådata forever after. Så det ville være rart med 2) også, at fortygge de indsamlede rådata og gemme dem i en komprimeret form; "jeg vil bare vide hvormange % der bruger 800*600, ikke hvad IP-numre de har" i andre situationer er det så ip-numrene der er relevante mens skærmopløsningen er ligegyldig.
tusinder af indsamlede records for uge 14 kan erstattes af nogle få records i en anden tabel med færdiglavede statistikker for den uge. den 'komprimering' er job 2).
Behøver job 2) overhovedet at køre på slaget midnat? er det ikke nok at det er kørt inden vil kører job 3) ?
Kunne vi evt ikke ligesågodt køre det som en del ag job 3) efter devisen:
job 3) skal vise statistikken for uge 18: a. job 3) kikker i databasen for statistikker, er uge 18 klar? b. Ja, uge 18 er klar, gå til step d. c. Nej. kør job 2) for uge 18 d. hent statistik for uge 18 og vis den.
Så er der ingen grund til at time nogetsomhelst. men tilgengæld skal du opdele di PHP script i de 3 faser, så du klart har defineret for dig selv hvad der er job 1), 2) og 3)
Hmm både ja og nej...kører i øjeblikket ikke med en sql database, da jeg hverken har en til rådighed, eller har forstand på disse koder. Jeg har i stedet for små simple .txt filer som "databaser".
1: Jeg har tre counters.
En online counter som tæller antal brugere på sitet. Den indsamler ipadressen og tidspunkt. Disse dataer kan jeg strengt nødvendigt ikke bruge til noget, da den enkelte bruger bliver "frigivet" og talt igen efter et vis tidsrum... Denne er sat til at blive slettet efter 24 timer.
En daglig hitcounter, som meget simpelt bare tæller antal sitehits. Den skal og bliver selvfølgelig også nulstillet for hvert døgn... Den tæller f.eks fra 1 og + 1 for hvert hit og overskriver.
En counter som viser det samlet antal sitebesøg ud fra ipadresser. Den vil blive sat til kun at tælle og registrere den samme ipadresse en gang i døgnet. Da den kun tæller og registrerer den samme bruger til .txt filen en gang i døgnet, kan disse dataer altså godt tåle at blive slettet. Antallet af ipadresser gemmes i en anden .txt fil før jeg slettet det forrige døgns registrede ipadresser. På den måde kan jeg opdatere og samtidig slette de unødvendige dataer, da brugerne i .txt filen jo netop er blevet "frigivet" fra den.
Håber du forstår min mening med at ville sætte indsætte en time funktion som sletter dataerne en gang i døgnet.
Anyway prøver lige at pusle videre med min simple javascript reloadfunktion, da jeg tror i det lange træk det måske vil være den nemmeste løsning.
Derved har jeg fået den til at reloade siden imellem det angivet tidsrum, så jeg kan fange de tre reloads sekunder ;) Venter lige med at lukke og give dig dine velfortjente points, hvis du nu skulle have en kommentar, rettelse eller en bedre ide...
Det er ikke velfortjente points når det ikke kan bruges. svar selv.
i scriptet ovenover er der 2minutter, hvor du såvidt jeg kan se reloader en gang i sekundet. kan blive mange reloads altefter hvor hurtigt serveren reagerer.
Ja tiden var også bare et eksempel for at teste ;) Nah, når man virkelig har prøvet at hjælpe selvom det måske ikke kan bruges, så har man da fortjent points alligevel.
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.