2010-12-16 214 views
1

Chaque fois que j'appelle un script PHP via la ligne de commande dans windows (soit dans cygwin ou cmd) le script semble tourner plusieurs fois, mais seulement la sortie de la première exécution est envoyé à la sortie de l'écran. C'est un problème très étrange, un peu difficile à décrire.Le script PHP s'exécute plusieurs fois lorsqu'il n'est invoqué qu'une seule fois sur la ligne de commande. Seule la sortie de la première exécution est envoyée à stdout

test.php:

<?php 
$t = microtime(); 
error_log($t . "\n", 3, 'test.out'); 
echo $t; 
?> 

je lance le script une fois, ce qui est le résultat

$ php test.php; 
0.97800300 1292476780 
$ cat test.out 
0.97800300 1292476780 
0.04000200 1292476781 
0.09500200 1292476781 
0.14700200 1292476781 
0.19900200 1292476781 
0.25600300 1292476781 

À travers différents fichiers de test, et différentes versions de PHP, il semble toujours courir 6 fois. Cela n'a pas d'importance si je lance le script via cygwin ou le shell Windows. J'ai essayé en utilisant php5.2.6 et php5.2.7 et php5.2.11 - tous installés via WAMP. J'ai essayé d'utiliser strace, mais sa sortie était vide - je ne l'ai jamais utilisé sur Windows auparavant, peut-être que mon installation de cygwin n'est pas correcte. J'utilise Windows 7, et le problème a commencé quand j'ai commencé à utiliser Windows 7. J'ai un collègue exécutant Windows 7 et il a exactement le même problème, mais tout le monde (y compris mon ancien moi) Windows XP n'a aucun problème avec le php CLI.

J'espère ne rien manquer ici! Faites-moi savoir tout ce que je peux vous fournir, et si quelqu'un a des idées ou des conseils, je serais très reconnaissant!

Répondre

0

Il ressemble maintenant à une erreur dans les versions/builds de PHP que je utilise, comme les tests avec différentes versions de PHP ne produira pas la même erreur. J'ai clairement fait une erreur dans mon post ci-dessus (et test hier) et n'ai pas testé correctement avec les différentes versions.

Mise à jour test.php

<?php 
$t = microtime(); 
error_log($t."\n", 3, $argv[1]); 
echo $t; 
?> 

Et en cours d'exécution avec 5.2.6, 5.2.7 et 5.2.11

[email protected] ~ 
$ /cygdrive/c/wamp/bin/php/php5.2.6/php test.php test-526.out 
0.20960200 1292539753 
[email protected] ~ 
$ cat test-526.out 
0.20960200 1292539753 
0.27060200 1292539753 
0.32160200 1292539753 
0.37460200 1292539753 
0.42460200 1292539753 
0.47660200 1292539753 

[email protected] ~ 
$ /cygdrive/c/wamp/bin/php/php5.2.7/php test.php test-527.out 
0.32660200 1292539767 
[email protected] ~ 
$ cat test-527.out 
0.32660200 1292539767 

[email protected] ~ 
$ /cygdrive/c/wamp/bin/php/php5.2.11/php test.php test-5211.out 
0.70760500 1292539776 
[email protected] ~ 
$ cat test-5211.out 
0.70760500 1292539776 

Je suppose qu'à ce stade, je ne peux que conclure que c'est un bogue dans La version php que j'ai pour 5.2.6: PHP 5.2.6 (cli) (built: May 2 2008 18:02:07)

0

Il est en effet vraiment bizarre ... Essayez cette

<?php 
$t = microtime(); 
file_put_contents('test.out', $t); 
echo $t; 
?> 
+0

Il fait essentiellement la même chose, mais seul le temps de la dernière exécution finit dans test.out car par défaut file_put_contents() écrase un fichier qui ne l'ajoute pas. Le script que j'ai fourni essayait seulement d'illustrer le problème. La vraie chose qui cause ce problème est que j'exécute des tests de sélénium via PHP cli, et les tests sont tous exécutés 6 fois chacun. –

+0

Donc, il est probablement lié à Selenium –

+0

Je ne pense pas que ce soit le cas. C'est pourquoi j'ai fourni l'exemple ci-dessus. –