2011-02-11 3 views
0

Salutations,Regarder un répertoire et rediriger vers PHP

Je regarde un répertoire postfix utilisant iwatch.

iwatch /home/vmail/eamorr/photos/new/

Lorsqu'un nouveau message électronique est envoyé, iWatch sorties une ligne telle que:

[11/Feb/2011 12:23:43] IN_CREATE /home/vmail/eamorr/photos/new//1297427022.Vca01I1e396M000383.eamorr 

Comment puis-je redirigez à un programme PHP pour le traitement?

Voici ce que j'ai essayé:

iwatch /home/vmail/eamorr/photos/new/ | php /home/hynese/sites/eamorr/emailPhotoHandler/handlePhotos.php

Et voici le fichier handlePhotos.php:

<?php 
$data = file_get_contents("php://stdin"); 

$myFile = "testFile.txt"; 
$fh = fopen($myFile, 'w') or die("can't open file"); 
$stringData = $data; 
fwrite($fh, $stringData); 
fclose($fh); 

?> 

Il doit créer un fichier "TestFile.txt" et mettre « [11/Feb/2011 12:23:43] IN_CREATE /home/vmail/eamorr/photos/new//1297427022.Vca01I1e396M000383.eamorr "en elle ... Mais tout ce que je reçois est rien - le fichier n'est même pas créé ...

Je pense que c'est quelque chose à voir avec la tuyauterie et stdin en PHP.

Vous avez des idées?

Un grand merci à l'avance,

+0

La sortie 'iwatch' n'est pas transmise au tuyau. –

+0

iWatch accepte le commutateur '-c' pour exécuter une commande sur un événement. J'ai essayé ça? –

+0

Ok, je peux exécuter la commande, mais comment obtenir le nom du fichier qui a été modifié? – Eamorr

Répondre

1

file_get_contents() ne retourne pas avant a été lu l'intégralité du fichier/flux. Dans ce cas, ce n'est jamais. En supposant que iwatch continue à fonctionner, iwatch gardera le fichier STDIN de PHP ouvert, donc file_get_contents() n'atteindra jamais la fin. À la place, essayez stream_get_line() ou fgets(). Cela vous donnera la sortie ligne par ligne.

Édition: également, la commande doit être php -f <script>, et non php <script>.

Questions connexes