Goedendag,
Ik ben op zoek naar een (PHP?) script die telt hoeveel keer
een bepaald document van mijn site is gedownload.
Het liefst niet met een MySQL database, want ik ben een
volstrekte leek :-)
Bedankt alvast, Inge
Likes: 0
Goedendag,
Ik ben op zoek naar een (PHP?) script die telt hoeveel keer
een bepaald document van mijn site is gedownload.
Het liefst niet met een MySQL database, want ik ben een
volstrekte leek :-)
Bedankt alvast, Inge
"NBB Groningen" <nbbgro@xs4all.nl> schreef in bericht
news:3EF1765F.FD376473@xs4all.nl...
> Goedendag,
>
> Ik ben op zoek naar een (PHP?) script die telt hoeveel keer
> een bepaald document van mijn site is gedownload.
> Het liefst niet met een MySQL database, want ik ben een
> volstrekte leek :-)
> Bedankt alvast, Inge
>
Ik sluit me graag aan bij deze vraag ;-)
Marc.
---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.489 / Virus Database: 288 - Release Date: 6/10/2003
---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.489 / Virus Database: 288 - Release Date: 6/3/2003
"Marc" <Marcnono@nonohotmail.com> schreef in bericht
news:bcs860$tv2$2@news4.tilbu1.nb.home.nl...
> > volstrekte leek :-)
> > Bedankt alvast, Inge
> >
>
> Ik sluit me graag aan bij deze vraag ;-)
>
Ik hoef geen counter maar ik ben ook een leek (-;
--
Rene
http://www.EasyFactuur.com
NBB Groningen schreef:
>
> Ik ben op zoek naar een (PHP?) script die telt hoeveel keer
> een bepaald document van mijn site is gedownload.
> Het liefst niet met een MySQL database, want ik ben een
> volstrekte leek :-)
Het lijkt mij dat sites als hotscripts.com talloze van dergelijke
scripts kant-en-klaar hebben liggen...
In zeer eenvoudige vorm zou het er zo uit kunnen zien:
<?php
$teller = "teller.txt";
$download = "naamVanTeDownloadenBestand";
// bestand openen, stand lezen, sluiten
if ($fp = fopen($teller, "r")) {
$stand = fread($fp, filesize($teller));
fclose($fp);
} else {
exit;
}
// bestand weer openen, nieuwe stand wegschrijven, sluiten
if ($fp = fopen($teller, "w")) {
$stand++;
fwrite($fp, $stand);
fclose($fp);
// browser naar de download sturen
header("Location: $download");
} else {
exit;
}
?>
Op te slaan als leukenaam.php. Plaats het in een de directory waar ook
de download staat. Maak een leeg bestandje teller.txt, uploaden naar de
directory, permissies aanpassen zodat de webserver/php schrijfrechten
krijgt op het bestandje (chmod 646, geloof ik).
In plaats van naar de download link je voortaan naar het script. Het
aantal keren dat het bestand opgevraagd is kun je zien door naar
teller.txt te surfen.
Aanvullingen of verbeteringen zijn welkom; dit 'werkt' alvast.
--
groet, Ronald
Ronald Klip <ronald@bladibla.njet> wrote:
> <?php
> $teller = "teller.txt";
> $download = "naamVanTeDownloadenBestand";
> // bestand openen, stand lezen, sluiten
> if ($fp = fopen($teller, "r")) {
> $stand = fread($fp, filesize($teller));
> fclose($fp);
> } else {
> exit;
> }
> // bestand weer openen, nieuwe stand wegschrijven, sluiten
> if ($fp = fopen($teller, "w")) {
> $stand++;
> fwrite($fp, $stand);
> fclose($fp);
> // browser naar de download sturen
> header("Location: $download");
> } else {
> exit;
> }
> ?>
>
> Aanvullingen of verbeteringen zijn welkom; dit 'werkt' alvast.
-2x het zelfde bestand openen: kan ook met 1 fopen (w+) en 1 rewind.
-geen filelocking dus als er een read plaats vind tussen tussen een
fopen "w" en fclose is $stand leeg: flock
-je kan ook rechtstreeks bij het bestand komen, readfile als mogelijke
oplossing.
Indien mogelijk is het parsen van de access log file interessanter
--
Daniel Tryba
> > Ik ben op zoek naar een (PHP?) script die telt hoeveel keer
> > een bepaald document van mijn site is gedownload.
> > Het liefst niet met een MySQL database, want ik ben een
> > volstrekte leek :-)
>
> Het lijkt mij dat sites als hotscripts.com talloze van dergelijke
> scripts kant-en-klaar hebben liggen...
Dat viel me tegen......gezocht op download counters. Wel enkele
gevonden, maar meestal moeten die samen met een MySQL
database gebruikt worden. Ook een CGI gevonden, maar die
kreeg ik niet aan de praat.
> In zeer eenvoudige vorm zou het er zo uit kunnen zien:
[php-script en uitleg]
> Aanvullingen of verbeteringen zijn welkom; dit 'werkt' alvast.
Enorm bedankt! Het werkt! Kan ik het beste nog wachten op
aanvullingen of verbeteringen of kan ik het zo als het nu is
gaan gebruiken?
Groeten, Inge
NBB Groningen wrote:
>> > Ik ben op zoek naar een (PHP?) script die telt hoeveel keer
>> > een bepaald document van mijn site is gedownload.
>> > Het liefst niet met een MySQL database, want ik ben een
>> > volstrekte leek :-)
>>
>> Het lijkt mij dat sites als hotscripts.com talloze van dergelijke
>> scripts kant-en-klaar hebben liggen...
>
> Dat viel me tegen......gezocht op download counters. Wel enkele
> gevonden, maar meestal moeten die samen met een MySQL
> database gebruikt worden. Ook een CGI gevonden, maar die
> kreeg ik niet aan de praat.
>
>> In zeer eenvoudige vorm zou het er zo uit kunnen zien:
>
> [php-script en uitleg]
>
>> Aanvullingen of verbeteringen zijn welkom; dit 'werkt' alvast.
>
> Enorm bedankt! Het werkt! Kan ik het beste nog wachten op
> aanvullingen of verbeteringen of kan ik het zo als het nu is
> gaan gebruiken?
Ik zou in ieder geval de tip over flock gebruiken opvolgen, anders
wodt het counten nogal random. Misschien dat Daniel voor je kan
uittypen waar je dit precies in moet voegen, of dat je het zelf ff
uitzoekt (erg nuttig)
Mark
[php download counter script plus uitleg]
> >> Aanvullingen of verbeteringen zijn welkom; dit 'werkt' alvast.
> >
> > Enorm bedankt! Het werkt! Kan ik het beste nog wachten op
> > aanvullingen of verbeteringen of kan ik het zo als het nu is
> > gaan gebruiken?
>
> Ik zou in ieder geval de tip over flock gebruiken opvolgen, anders
> wodt het counten nogal random. Misschien dat Daniel voor je kan
> uittypen waar je dit precies in moet voegen, of dat je het zelf ff
> uitzoekt (erg nuttig)
Daniel, zou jij dat willen doen? Bedankt alvast!
('t is geen luiheid, maar het totaal onbekend zijn met php)
Groeten, Inge
> Mark
NBB Groningen <nbbgro@xs4all.nl> wrote:
>> Ik zou in ieder geval de tip over flock gebruiken opvolgen, anders
>> wodt het counten nogal random. Misschien dat Daniel voor je kan
>> uittypen waar je dit precies in moet voegen, of dat je het zelf ff
>> uitzoekt (erg nuttig)
>
> Daniel, zou jij dat willen doen? Bedankt alvast!
> ('t is geen luiheid, maar het totaal onbekend zijn met php)
Jaja, de enige manier om over de onbekendheid met PHP heel te komen is
lezen en proberen.
Nu zitten er aan flock enkele haken en ogen aangezien je de file al open
moet hebben voordat je kunt locken
Dus bij deze maar een voorbeeldje om zelf even te testen hoe het ook alweer
in z'n werk ging:
$ cat lock.php
#!/usr/bin/php4 -q
<?php
if($_SERVER['argc']!=2)
{
die("usage: '{$_SERVER['argv'][0]}' somestring\n");
}
$file='tst.txt';
if(!file_exists($file))
{
touch($file);
}
sleep(rand(1,5));
$start=time();
if($fp=fopen($file,'r+'))
{
flock($fp,LOCK_EX);
$count=(int)fread($fp,filesize($file));
sleep(3);
rewind($fp);
ftruncate($fp,0);
fwrite($fp,++$count);
flock($fp,LOCK_UN);
fclose($fp);
$stop=time();
echo "count: $count arg: {$_SERVER['argv'][1]} start: $start, stop: $stop\n";
}
?>
De test:
$ for a in 0 1 2 3 4 5 6 7 8 9; do (./lock.php $a &) ; done
count: 1 arg: 3 start: 1056050781, stop: 1056050784
count: 2 arg: 6 start: 1056050781, stop: 1056050787
count: 3 arg: 5 start: 1056050781, stop: 1056050790
count: 4 arg: 4 start: 1056050782, stop: 1056050793
count: 5 arg: 7 start: 1056050782, stop: 1056050796
count: 6 arg: 8 start: 1056050782, stop: 1056050799
count: 7 arg: 0 start: 1056050783, stop: 1056050802
count: 8 arg: 2 start: 1056050783, stop: 1056050805
count: 9 arg: 1 start: 1056050785, stop: 1056050808
count: 10 arg: 9 start: 1056050785, stop: 1056050811
$ for a in 0 1 2 3 4 5 6 7 8 9; do (./lock.php $a &) ; done
count: 11 arg: 0 start: 1056052123, stop: 1056052126
count: 12 arg: 3 start: 1056052123, stop: 1056052129
count: 13 arg: 5 start: 1056052123, stop: 1056052132
count: 14 arg: 1 start: 1056052124, stop: 1056052135
count: 15 arg: 8 start: 1056052124, stop: 1056052138
count: 16 arg: 9 start: 1056052125, stop: 1056052141
count: 17 arg: 2 start: 1056052126, stop: 1056052144
count: 18 arg: 4 start: 1056052126, stop: 1056052147
count: 19 arg: 6 start: 1056052126, stop: 1056052150
count: 20 arg: 7 start: 1056052126, stop: 1056052153
$
--
Daniel Tryba
> >> Ik zou in ieder geval de tip over flock gebruiken opvolgen, anders
> >> wodt het counten nogal random. Misschien dat Daniel voor je kan
> >> uittypen waar je dit precies in moet voegen, of dat je het zelf ff
> >> uitzoekt (erg nuttig)
> >
> > Daniel, zou jij dat willen doen? Bedankt alvast!
> > ('t is geen luiheid, maar het totaal onbekend zijn met php)
>
> Jaja, de enige manier om over de onbekendheid met PHP heel te komen is
> lezen en proberen.
Da's waar, eens zal ik er aan moeten geloven :-)
> Nu zitten er aan flock enkele haken en ogen aangezien je de file al open
> moet hebben voordat je kunt locken
>
> Dus bij deze maar een voorbeeldje om zelf even te testen hoe het ook alweer
> in z'n werk ging:
[flock en test]
Wat moet ik nou waar inpassen in het script van Ronald?
Alweer: bedankt!
Groeten, Inge
NBB Groningen schreef:
> Daniel:
> > Jaja, de enige manier om over de onbekendheid met PHP heel te komen is
> > lezen en proberen.
>
> Da's waar, eens zal ik er aan moeten geloven :-)
Het is een vrij simpel scriptje, dat in wezen het volgende doet:
// definieer wat bestandsnamen
$teller = "teller.txt";
$download = "naamTeDownloadenBestand";
// open het tellerbestand. staat in een if-constructie, omdat de rest
// van het script geen zin heeft als openen mislukt.
if ($fp = fopen($teller, "r+")) {
// lock het bestand, zodat niemand anders er gelijktijdig bij kan.
// dat zou nl. problemen kunnen geven.
flock($fp, LOCK_EX);
// lees de inhoud van het bestand
$stand = fread($fp, filesize($teller));
// zet de 'cursor' aan het begin van het bestand en wis vanaf
// die cursorpositie
rewind($fp);
ftruncate($fp, 0);
// verhoog de stand met 1 en schrijf dat in het bestand
fwrite($fp, ++$stand);
// verwijder de lock en sluit het bestand
flock($fp, LOCK_UN);
fclose($fp);
// redirect de browser naar te downloaden bestand (nu met volledige url)
header("Location: ".dirname($_SERVER['SCRIPT_URI'])."/".$download);
} else {
// foutmeldinkje als fopen niet wil
echo "hmm. misschien is het erg druk. probeer F5 eens?";
}
In plaats van de redirect (header()) zou je readfile() kunnen gebruiken
om de inhoud van het downloadbestand meteen naar de browser te sturen.
Voordeel: je bezoeker krijgt de bestandsnaam niet te zien.
Nadelen (marginaal): iets meer werk voor de server, en er moet eerst een
header met het juiste content-type worden gestuurd. Liefst ook een
header met de lengte van het bestand.
--
groet, Ronald
"Rene A" <Enersoft@xs4all.nl> schreef in bericht
news:3ef1cc35$0$49100$e4fe514c@news.xs4all.nl
> "Marc" <Marcnono@nonohotmail.com> schreef in bericht
> news:bcs860$tv2$2@news4.tilbu1.nb.home.nl...
>>> volstrekte leek :-)
>>> Bedankt alvast, Inge
>>>
>>
>> Ik sluit me graag aan bij deze vraag ;-)
>>
>
>
> Ik hoef geen counter maar ik ben ook een leek (-;
http://poeticpollution.net/services/...rl-ShotGun.php
ff zoeken op die phpscripts pagina's.
--
Greetz,
Bertez[z]
-
Site in aanbouw: bertweb.nl.nu
Dag Ronald,
[aangepast php script voor download counter]
Bedankt voor zowel het script als ook de uitleg welke regel wat doet.
Ik heb nog één vraag:
// redirect de browser naar te downloaden bestand (nu met volledige url)
header("Location: ".dirname($_SERVER['SCRIPT_URI'])."/".$download);
De url is iets als http://www.domein.nl/dir/bestand.zip denk ik, maar
waar in de regel moet hij worden geplaatst, moet het in de plaats komen
van 'SCRIPT_URL'? Of bv. van "/"? Of hoef ik helemaal niks in de regel te
veranderen?
Toch nog een tweede vraag :-)
Waarom is readfile beter (behalve dan dat de bezoeker de bestandsnaam
niet te zien krijgt)? Als dat nl. het enige is kan ik het beter zo laten toch?
> In plaats van de redirect (header()) zou je readfile() kunnen gebruiken
> om de inhoud van het downloadbestand meteen naar de browser te sturen.
> Voordeel: je bezoeker krijgt de bestandsnaam niet te zien.
> Nadelen (marginaal): iets meer werk voor de server, en er moet eerst een
> header met het juiste content-type worden gestuurd. Liefst ook een
> header met de lengte van het bestand.
Groeten, Inge
> [aangepast php script voor download counter]
>
> Bedankt voor zowel het script als ook de uitleg welke regel wat doet.
> Ik heb nog één vraag:
>
> // redirect de browser naar te downloaden bestand (nu met volledige url)
> header("Location: ".dirname($_SERVER['SCRIPT_URI'])."/".$download);
Heb de euvele moed gehad om de regel ongewijzigd te laten, uit te proberen
en ben tot de conclusie gekomen dat het werkt :-))
Bedankt.
> Toch nog een tweede vraag :-)
> Waarom is readfile beter (behalve dan dat de bezoeker de bestandsnaam
> niet te zien krijgt)? Als dat nl. het enige is kan ik het beter zo laten toch?
Lijkt onbelangrijk te zijn, maar misschien toch nog een reactie?
Groeten, Inge
NBB Groningen schreef:
> > // redirect de browser naar te downloaden bestand (nu met volledige url)
> > header("Location: ".dirname($_SERVER['SCRIPT_URI'])."/".$download);
>
> Heb de euvele moed gehad om de regel ongewijzigd te laten, uit te proberen
> en ben tot de conclusie gekomen dat het werkt :-))
Het is eigenlijk wat omslachtig geformuleerd. Eenvoudiger is
header("Location: http://www.domein.tld/pad/bestand.ext");
> > Toch nog een tweede vraag :-)
> > Waarom is readfile beter (behalve dan dat de bezoeker de bestandsnaam
> > niet te zien krijgt)? Als dat nl. het enige is kan ik het beter zo laten toch?
Ja, tenzij je koste wat kost wilt voorkomen dat bijv. iemand anders
rechtstreeks naar het bestand gaat linken.
--
groet, Ronald