API pour lire un fichier de type "access.log"

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : API pour lire un fichier de type "access.log"

Re: API pour lire un fichier de type "access.log"

par Dr@ke » 01 mars 2010, 17:40

tu peux combiner l'utilisation de CustomLog dans un htaccess et le fonction sscanf().

Petit exemple trouvé sur le net:

Code : Tout sélectionner

SetEnvIf Request_URI "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|gz|swf|txt)$" dontlog SetEnvIf Request_URI "^\/rss\/" dontlog CustomLog /var/log/apache/access.log combined env=!dontlog
Tu peux aussi créer, je croies car jamais tester personnellement, un CustomLog fichier log (nom différent).

Genre tu vires tout ce qui est inutile pour ton projet avec le htaccess que tu enregistres dans un fichier access.log personnalisé et ensuite tu filtres ce même fichier avec la fonction sscanf...

Enfin c'est juste une idée :wink:

Re: API pour lire un fichier de type "access.log"

par cyruss » 01 mars 2010, 17:22

Pour information je suis entrain de voir dans quelle mesure en exploitant les fichiers de log d'Apache on peut générer un parcours type.
Ceci dans l'optique d'injecter ensuite ces données dans un outil de WebStress comme Jmeter ou Siege.

++

Re: API pour lire un fichier de type "access.log"

par cyruss » 01 mars 2010, 17:16

Oui finalement j'ai été lire les commentaires sur la fonction sscanf() et qqun propose un code qui fonctionne :

Code : Tout sélectionner

foreach ($fichier_log as $line) { echo htmlspecialchars($line) . "<br />\n"; $log = array(); $n = sscanf(trim($line), '%s %s %s [%[^]]] "%s %s %[^"]" %d %s "%[^"]" "%[^"]"', $log['ip'], $log['client'], $log['user'], $log['time'], $log['method'], $log['uri'], $log['prot'], $log['code'], $log['bytes'], $log['ref'], $log['agent']); print_r($log); echo "<br/>"; }
Dans l'idéal j'aurais aimé un bout de code paramétrable mais je vais pas me plaindre, c'est un bon début.

Allez hop je tag en resolu.

Re: API pour lire un fichier de type "access.log"

par Dr@ke » 01 mars 2010, 17:10

Serait une contribution intéressante ça :wink:
J'avais cherché à un moment mais sans pousser énormément mes recherches car je n'étais pas sur le serveur adéquat pour tester tout ceci.

Re: API pour lire un fichier de type "access.log"

par Calimero » 01 mars 2010, 17:07

Re cyruss,
je m'étais bien évidement tourné vers sscanf() mais cela n'est pas aussi évident.
C'est à dire ? A quel niveau ça a coincé ?

De mémoire, un motif scanf est un peu plus rigide (notamment sur les caractères d'espacement) qu'une regexp, mais la contrainte du typage de variables étant absente en php le remplacement de tous les motifs par du %s devrait fonctionner pas trop mal...
Du coup je me suis demandé si une API existant et faute d'en trouver une valable (il en existe une sur PEAR mais utilisant des fonctions PHP obsolettes) je regarde maintenant du coté des expressions régulières.
J'imagine que tu vas traiter une grande quantité de lignes, d'où une contrainte de performance assez forte. C'est donc tout bénéfice si tu peux éviter les regexp amha ;)

Est-il possible d'avoir un échantillon de données pour tester ? :)

Re: API pour lire un fichier de type "access.log"

par cyruss » 01 mars 2010, 16:57

Salut Calimero,

je m'étais bien évidement tourné vers sscanf() mais cela n'est pas aussi évident. Du coup je me suis demandé si une API existant et faute d'en trouver une valable (il en existe une sur PEAR mais utilisant des fonctions PHP obsolettes) je regarde maintenant du coté des expressions régulières.

++

cyruss

Re: API pour lire un fichier de type "access.log"

par Calimero » 01 mars 2010, 16:48

Hello,

As-tu regardé du côté des fonctions *scanf ? C'est un peu comme des regexp light, et ça ressemble à la syntaxe LogFormat d'ailleurs (devrait fonctionner tel quel ou presque, au pire une modification minimale du pattern).

http://fr2.php.net/manual/fr/function.sscanf.php
http://fr2.php.net/manual/fr/function.fscanf.php

PS: désolé pour le franglais 8-|

API pour lire un fichier de type "access.log"

par cyruss » 01 mars 2010, 16:43

Bonjour,

je suis à la recherche d'une API/fonction me permettant de lire facilement le fichier de log d'Apache "access.log".
Dans l'idéal qq chose qui traduit en fonction de la variable LogFormat définie dans le fichier de conf d'Apache :
LogFormat "%h %l %u %t \"%r\" %>s %b" common

Sinon juste une expression régulière qui va bien.

Merci
++

Cyruss