Awk et php

lucky82 Messages postés 89 Date d'inscription samedi 30 octobre 2004 Statut Membre Dernière intervention 16 juin 2008 - 6 mai 2005 à 17:50
willowman Messages postés 143 Date d'inscription vendredi 5 juillet 2002 Statut Membre Dernière intervention 18 mars 2006 - 8 mai 2005 à 07:38
Bonjour
j'ai un petit prblème et j'espere que vous m'aidiez,voila un programmme en php:
"
<?
touch("cmdawk");
if (!$cmdawk=fopen("cmdawk","w")){
echo "ouverture du fichier impossible";
}

else{

fputs($cmdawk,"{a=sbstr($4,2,11) print($1,a)}");
fclose($cmdawk);
echo exec('awk -f cmdawk access.log > file');

}


?>

"
le probleme c'est que toutes les etapes marchent à la merveille sauf la commande: echo exec('awk -f cmdawk access.log > file');
n.b:
le fichier access.log contient des lignes de type:
123.100.0.9 - - [22/Mar/2005:16:17:00 +0100] "GET / HTTP/1.1" 200 1552
le fichier file s'est crée mais il est vide

MERCI D'AVANCE

8 réponses

cs_Dfx4 Messages postés 31 Date d'inscription dimanche 17 avril 2005 Statut Membre Dernière intervention 27 février 2006
6 mai 2005 à 22:51
Ben on saisi pas bien ta question ??

Déjà pour utiliser la commande exec() tu dois désactiver le Safe mode !! Mais tu le savais je pense ?

Sinon ce qui est indiqué dans ton fichier log se sont les config de la personne qui c'est connécté !!
0
lucky82 Messages postés 89 Date d'inscription samedi 30 octobre 2004 Statut Membre Dernière intervention 16 juin 2008
7 mai 2005 à 00:53
peut etre je me suis mal exprimée,
bon,le fichier access.log est constituer de plusieurs lignes et chaque ligne est constituée de plusieurs champs voici un extrait:

137.0.0.1 - - [22/Mar/2005:16:17:00 +0100] "GET / HTTP/1.1" 200 1552
127.10.0.1 - - [22/Mar/2005:16:17:00 +0100] "GET /apache_pb.gif HTTP/1.1" 200 2326
127.0.0.10 - - [22/Mar/2005:16:17:46 +0100] "GET / HTTP/1.1" 200 1552
127.100.0.1 - - [22/Mar/2005:16:17:46 +0100] "GET /apache_pb.gif HTTP/1.1" 304 -
127.0.0.1 - - [22/Mar/2005:16:17:51 +0100] "GET /phpinfo.php HTTP/1.1" 404 296

de ce fichier là je n'est besoin que de l'adresse ip et de la date donc des champs 1 et 4 ( mais le champs 4 et constitué de la date plus l'heure et moi je n'est besoin que de la date donc j'ai pris depuis la position 2 du 4eme champs 11caractere ce qui me donnera la date toute seuls)

je voulias faire ceci en php ,et le code c'est celui que j'ai deja présenté mais le probleme c'est que la commande :
echo exec('awk -f cmdawk access.log > file');
ne fonctionne pas ,cela veux dire que le fichier "file " est vide.
merci pour votre patience.

ce Safe mode dont vous m'avez parlé je ne le connait pas ; prière de me l'expliquer
MERCI
0
willowman Messages postés 143 Date d'inscription vendredi 5 juillet 2002 Statut Membre Dernière intervention 18 mars 2006 1
7 mai 2005 à 01:09
Salut a toi lucky82



Je pars du principe que le safe mode n'est pas activé !



Quand tu dis que la ligne exec(...) ne marche pas, as-tu un message d'erreur ??

As-tu testé l'execution d'une autre commande ?? (autre que awk !)

A priori, si tu obtiens un fichier 'file' vide, cela signifie que la
redirection ">" dans ton 'exec' est bien passée ! Après il faut
examiner pourquoi est ce que celui ci est vide !?



As-tu testé ton script awk directement dans un terminal ? (avec le meme
appel que celui du 'exec(...)' ?? Obtiens-tu ce que tu désires sur la
ligne de commande ? (apparement tu desires récuperer l'ip et la date
issue de ton access.log d'apache)



Est ce que tu as le meme resultat avec la commande system(...) ??

As-tu essayé le chemin en dur du awk ? (/usr/bin/awk) Et surtout le
chemin en dur de ton fichier access.log (dépend de ta distrib !!
/var/log/http/access.log au lieu de access.log)

Idem pour ton fichier cmdawk !



Bref, si tu pouvais nous en dire plus sur ce que tu dis "ne marche pas", ce serait cool !!



a+



Anli.
0
lucky82 Messages postés 89 Date d'inscription samedi 30 octobre 2004 Statut Membre Dernière intervention 16 juin 2008
7 mai 2005 à 01:38
Salut et merci
ooups je crois que j'ai comis une grosse bétise en oubliant de signaler que je suis sous linux ..
n.b:
je n'obtiens pas de message d'erreur en executant exec()
j'ai essayé avec system et ca donne la meme chose
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lucky82 Messages postés 89 Date d'inscription samedi 30 octobre 2004 Statut Membre Dernière intervention 16 juin 2008
7 mai 2005 à 01:39
pardon je voulais dire que je ne suis pas sous linux mais sous windows
0
willowman Messages postés 143 Date d'inscription vendredi 5 juillet 2002 Statut Membre Dernière intervention 18 mars 2006 1
7 mai 2005 à 02:03
Ok autant pour moi !!



Alors ou as-tu eu la commande awk ?? (est-ce gawk ?)

As-tu tester en mettant le chemin complet de l'executable ?

Sous windows, lorsque tu rediriges ta sortie standard vers un fichier,
il est bon de toujours rediriger celle d'erreur ( awk -truc- >
monfichier 2>&1) lors de l'appel !



Donc si j'etais toi, je m'orienterais plus vers une rigueur dans
l'appel de mes executables, mes fichiers filtre et log (pour awk) et le
fichier en sortie ! Ensuite je testerais la redirection !!



Bon courage !



Anli.
0
lucky82 Messages postés 89 Date d'inscription samedi 30 octobre 2004 Statut Membre Dernière intervention 16 juin 2008
7 mai 2005 à 02:17
voici le message d'erreur que j'obtient dans le ficher "file" (apres avoir modifier la redirection en prenant en consideration les erreurs)

'awk' n'est pas reconnu en tant que commande interne
ou externe, un programme ex‚cutable ou un fichier de commandes.

je conclut alors que windows ne peut pas executer la commande awk
0
willowman Messages postés 143 Date d'inscription vendredi 5 juillet 2002 Statut Membre Dernière intervention 18 mars 2006 1
8 mai 2005 à 07:38
Effectivement, dans un précedent post, je te demandais quel version de awk sous windows tu utilisais ?



Voici un lien pour gawk, il marche bien ! Tu mettras en suite le path en dur de l'executable dans ton appel avec "exec(...)" !



http://gnuwin32.sourceforge.net/packages/gawk.htm



a+



Anli.
0
Rejoignez-nous