[php/apache] Logs op gedeelde server naar MySQL

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik zit met het volgende vraagstuk, dat ik hier graag even voorleg.

Ik zit met een site op een gedeelde server, waar ik geen toegang heb tot de volledige Apache access logs. Toch wil ik van een beperkt aantal bestanden precies monitoren, of en wanneer ze gedownload zijn: het gaat om mp3's, die door een Flash-player worden gestreamd/afgespeeld.

Mijn host maakt in een folder van mijn domein dagelijks een ge-tar.gz tekstbestand aan, met daarin de regels uit de access log voor mijn domein. Deze bestanden blijven beperkt bewaard. Ik kan deze downloaden, un-tarren en bekijken met een teksteditor. Ik zie daar netjes entry's staan voor elke keer dat een mp3 is afgespeeld.

Ik zou de filenaam en de access-tijd echter graag automatisch in een MySQL-database laten zetten.

Ik had het volgende bedacht: ik maak een php-script aan, dat met een cronjob dagelijks wordt aangeroepen. Het script gaat in de betreffende folder op zoek naar de nieuwste tar.gz, pakt die uit en leest het tesktbestand in.

Regel voor regel controleert het script of het om een bestand gaat dat ik wil monitoren, – is dat het geval, dan zet het de bestandsnaam en de access-tijd in een MySQL-database. (Ik controleer eerst natuurlijk op duplicaten.)

Ik loop er nu tegenaan, dat ik van de tar.gz-files met geen mogelijkheid de bewerkingsdatum naar voren krijg. Ik heb dit geprobeerd met stat() en filectime(), maar ik krijg in beide gevallen een foutmelding:

code:
1
Warning:  stat() [function.stat]: stat failed for BLAAT.tar.gz in BLAAT2.php on line XX


Het gekke is, dat ik van de dirs '.' en '..' wel een tijd krijg. Ik vraag me dus af, of ik iets over het hoofd zie. "Iedereen" heeft leesrechten voor deze bestanden (644). Is het nu zo, dat je execute-rechten moet hebben om de datum naar voren te krijgen? Ik kan de files nl. niet chmod-den.

Daarnaast vraag ik me af of ik vanuit php wel kan un-tarren, omdat bijvoorbeeld exec() (ik heb vergeefs met exec geprobeerd om stat uit te voeren) om veiligheidsredenen is uitgezet. Is er een andere manier om de bestanden te un-tarren vanuit php?

Of zit ik helemaal op het verkeerde spoor met dit idee, en zou ik bij het aanroepen van de mp3's door de Flash-player al een log in de database kunnen schrijven?

Kortom, ik zie het niet. Heeft iemand een geniale tip qua hoe ik dit het beste aan kan pakken?

Acties:
  • 0 Henk 'm!

  • orf
  • Registratie: Augustus 2005
  • Laatst online: 00:44

orf

Het is veel makkelijker om de mp3's met PHP te serveren. Kijk eens naar bijvoorbeeld readfile. In combinatie met de juiste headers kun je zo het bestand als output geven en tegelijk al het verkeer loggen.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dat klinkt interessant. Je zou een php-bestand als doorgeefluik kunnen gebruiken als het ware, en da tegelijkertijd snel een record in de db schrijven.

Of snap ik je nu verkeerd?

Acties:
  • 0 Henk 'm!

  • orf
  • Registratie: Augustus 2005
  • Laatst online: 00:44

orf

Precies. Hier staat een voorbeeldje voor een PNG:
http://nl.php.net/manual/en/function.fpassthru.php

Pas de headers aan naar MP3 en schrijf weg in de database dat een bestand is gedownload. :)

Acties:
  • 0 Henk 'm!

Verwijderd

Nee dat begrijp je helemaal goed, gewoon een paar headers meesturen, de records wegschrijven in de database en dan de mp3 doorsluizen.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Juist, dat moet lukken. Ik was van plan om volgende week iets soortgelijks te gaan doen met ics-files. Maar hier kwam ik weer niet op.

Laatste vraagje: de Flash-player kijkt denk ik (kan 't nu niet checken) alleen naar mp3-files in een dir. Ik neem aan dat hij alleen naar de extensie kijkt.

Is het mogelijk om php-files op te slaan met extensie .mp3, maar ze toch te laten interpreteren als php? Kan dat met .htacces of zoiets?

Acties:
  • 0 Henk 'm!

  • orf
  • Registratie: Augustus 2005
  • Laatst online: 00:44

orf

Je kunt met Flash niet een een dir kijken. Waarschijnlijk worden de filenames doorgegeven aan de Flash movie.

Je kunt op meerdere manieren een PHP file met extensie mp3 serveren; met mod_rewrite kun je de php extensie behouden maar met mp3 extensie serveren; met addtpye:

code:
1
AddType application/x-httpd-php .mp3

Let wel op dat alle bestanden met een mp3 extensie in de betreffende dir (en dieper liggende) door de PHP parser worden gehaald.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
orf schreef op dinsdag 05 augustus 2008 @ 22:03:
Je kunt met Flash niet een een dir kijken. Waarschijnlijk worden de filenames doorgegeven aan de Flash movie.
Makes sense. Dat betekent dat er al een php-script draait dat de dir list en de filenames doorgeeft aan de movie. En dat zou het wel heel gemakkelijk maken :)

Thanks!
Pagina: 1