Du skal formentlig have PHP til at tjekke i logfilen for serveren. Du kan udforme din request sådan, at du identificerer brugeren. Så er spørgsmålet, om du kan få din server til at skrive i logfilen, hvor meget en bestemt bruger downloader af en fil.
-og så kommer det anpå, hvad der menes med 'download'. Som det så ofte gælder ved spørgsmål i et hjælpeforum, er det vigtigt at give en udførlig forklaring af, hvad det er, man ønsker/prøver ;o)
Du kan få php til at levere downloaden, med fopen og fread i et loop. I samme loop brug connection_aborted() http://dk.php.net/connection_aborted - Så kan du selv regne ud hvornår den har nået hvad ;)
coderdk >> det var netop det, jeg sad og tænkte på - men det er jo ikke en holdbar løsning, hvis det er alle et sites dokumenter, vi taler om ... altså en slags avanceret hit-counter. Til download af (enkelte) specielle dokumenter er det derimod en fin løsning, hvorfor jeg efterlyste en bedre forklaring på, hvad der ønskes ;o)
Synes godt om
Slettet bruger
04. februar 2006 - 15:33#6
uddybende forklaring:
Det er til et music site hvor hvor hver user har en tilknyttet mappe med uploadede mp3 filer. Jeg vil så holder styr på hvor mange downloads de forskellige mp3er har til at lave en hitliste over hvem der har flest downloads.
For at være sikker på at folk har downloaded filen og ikke bare trykket på linket for at få counteren til at tælle vil jeg gerne have besked når en vis del af download er gennemført
Grunden til at jeg siger 50% er at jeg også skal bruge signalet til når folk streamer filen. Når folk har lyttet til 50% af sangen tæller det som en lytning
Hvis der en metode der kan fortælle hvornår filen er 100% downloadet vil jeg da gerne høre den også. Er det den samme metode
Synes godt om
Slettet bruger
04. februar 2006 - 15:53#7
Jeg hat fundet dette script på php manualen. Det skulle vist kunne fortælle når en fil er downloaded fuldt. Men jeg kan ikke få det til at virke
Jeg bliver nød til at slette den linie jeg har kommenteret ud for overhovedet at kunne køre scriptet. men så ved jeg ikke om scriptet stadig virker.
<?php function send_file($name) { ob_end_clean(); $path = $name; if (!is_file($path) or connection_status()!=0) return(FALSE); ############ denne line bliver jeg nød til at slette ## header("Cache-Control: no-store, no-cache, must-revalidate"); ######################################## header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); header("Expires: ".gmdate("D, d M Y H:i:s", mktime(date("H")+2, date("i"), date("s"), date("m"), date("d"), date("Y")))." GMT"); header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); header("Content-Type: application/octet-stream"); header("Content-Length: ".(string)(filesize($path))); header("Content-Disposition: inline; filename=$name"); header("Content-Transfer-Encoding: binary\n"); if ($file = fopen($path, 'rb')) { while(!feof($file) and (connection_status()==0)) { print(fread($file, 1024*8)); flush(); } fclose($file); } return((connection_status()==0) and !connection_aborted()); } ?> <?php if (!send_file("tet.mp3")) { die ("file transfer failed"); // either the file transfer was incomplete // or the file was not found } else {
echo "file is fully downloaded"; // the download was a success // log, or do whatever else } ?>
Sådan ca. ville jeg lave det. Bare hovedtrækkene, koden må du selv strikke. 1) inden download omdøbes (kopieres) filen til f.eks. a12f45hc022bb.mp3 2) du gemmer filnavnet sammen med bruger-ID i din database 3) I serverens logfil kan du bagefter finde request for dette filnavn sammen med brugerens IP og en http-kode (f.eks. 200) og endelig størrelsen af download. (det skulle i hvertfald være muligt på Apache) 4) Du lader PHP af læse logfilen og sammenligne download med filens størrelse
Synes godt om
Slettet bruger
04. februar 2006 - 20:51#9
jeg har fået mit script til at virke. Det gjorde ikke noget at jeg kommenterede den linie ud. Gad vide hvad den gjorde??
Det jeg gjorde for at få det til at virke var at tilføje en mysql query ved succes. Ved en 100% download returnere scriptet succes og vil så køre min query og opdatere databasen
Jeg ved dog ikke hvordan jeg skal gøre hvis jeg vil have den til at virke når folk streamer mine mp3 er.
Sagen er at jeg så sender en m3u fil til download scriptet. En sådan fil er jo hurtigt downloaded og så vil den fortælle at filen er downloadet hvad den jo egentlig også er. Men jeg ville jo have scriptet til at notere når mp3 filen var downloaded.
alså jeg sender en m3u fil til download scriptet hvad der starter en streaming af mp3 filen. Jeg har så brug for en funktion der fortæller mig hvornår lytteren har streamet 50% af filen hvad der tæller som en lytning
....er det mon muligt
Hej boris....Det kan være jeg skal bruge din metode. Jeg synes bare det er lidt træls at jeg bliver nød til at kopiere filen.
Kan du ikke benytte samme metode? .m3u filen indeholder vel en reference til mp3-filen på nettet? Du kan vel lade et php-script levere denne mp3?
Synes godt om
Slettet bruger
04. februar 2006 - 21:05#11
Hej coder dk Jeg tror du har ret
Iøvrigt tror jeg ikke jeg har adgang til logfiler på min server. Jeg kan i hvert fald ikke finde noget der har med "log" at gøre. Hvor skulle de ligge hvis de er der??
Synes godt om
Slettet bruger
04. februar 2006 - 21:11#12
coder dk du havde ret det virker perfekt
Så er der kun et problem tilbage. Jeg har fundet ud af hvordan jeg får opdateret databasen når sangen er 100% downloadet
Nu ville jeg gerne have at den opdatere databasen når sangen er 50% downloadet og så forsætter med at downloade
$updated = false; $bytes = 0; $fsize = filesize( ...din fil... ); while (...læs din fil...) { $bytes += 1024*8; // Det du også bruger på fread() if ( !$updated && $bytes >= ( $fsize / 2 ) ) { $updated = true; // Opdatér databasen } }
Synes godt om
Slettet bruger
04. februar 2006 - 21:46#14
Hey coder mange mange tak vil du ikke nok vise hvor det skal indsættes i mit script. Jeg kan ikke rigtig finde ud af hvor det skal tilføjes og om jeg skal slette noget af det jeg har
if ( !send_file( "tet.mp3" ) ) { die( "file transfer failed" ); // either the file transfer was incomplete // or the file was not found } else { echo "file is fully downloaded"; // the download was a success // log, or do whatever else }
?>
Synes godt om
Slettet bruger
04. februar 2006 - 23:30#16
hej igen. Jeg kan altså ikke få det til at virke. Hvis du vil gi det et kig vil jeg være meget taknemmelig
#download link bliver så "users/".$mappeid."/".$sangid.""; $filename = "users/".$mappeid."/".$sangid.""; $shortname = basename( $filename );
if ( !send_file( $filename ) ) { die( "file transfer failed" ); // either the file transfer was incomplete // or the file was not found } else { echo "file is fully downloaded"; // the download was a success // log, or do whatever else
}
?>
Synes godt om
Slettet bruger
05. februar 2006 - 01:26#18
Mange Mange tak til jer for den gode hjælp
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.