PHP-скрипт выполняется несколько раз, когда вызывается только один раз в командной строке.Только вывод первого запуска отправляется на стандартный вывод - PullRequest
1 голос
/ 16 декабря 2010

Каждый раз, когда я запускаю PHP-скрипт через командную строку в Windows (либо в cygwin, либо в cmd), скрипт, кажется, выполняется несколько (6) раз, однако только выходные данные первого запуска отправляются на экран. Это очень странная проблема, которую сложно описать.

test.php:

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

Я запускаю скрипт один раз , и вот результат

$ 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

В разных тестовых файлах и в разных версиях PHP он работает 6 раз. Не имеет значения, запускаю ли я скрипт через cygwin или оболочку Windows. Я пробовал использовать php5.2.6 и php5.2.7 и php5.2.11 - все установлено через WAMP. Я попытался использовать strace, но его вывод был пустым - я никогда не использовал его в Windows раньше, возможно, моя установка cygwin не правильная. Я использую Windows 7, и проблема началась, когда я начал использовать Windows 7. У меня есть коллега, работающий с Windows 7, и у него точно такая же проблема, однако у всех (включая моего бывшего себя), работающего с Windows XP, вообще нет проблем с php CLI.

Надеюсь, я не пропустил ничего очевидного! Дайте мне знать что-нибудь еще, что я могу предоставить, и если у кого-то есть какие-либо идеи или советы, я был бы очень признателен!

Ответы [ 2 ]

0 голосов
/ 17 декабря 2010

Так что теперь это выглядит как ошибка в версиях / сборках PHP, которые я использую, так как тестирование с разными версиями PHP не приведет к одной и той же ошибке. Я ясно допустил ошибку в своем предыдущем посте (и вчера тестировал) и не правильно тестировал разные версии.

Обновлен test.php

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

И работает с 5.2.6, 5.2.7 и 5.2.11

Paul@Paul-Macbook-W7 ~
$ /cygdrive/c/wamp/bin/php/php5.2.6/php test.php test-526.out
0.20960200 1292539753
Paul@Paul-Macbook-W7 ~
$ cat test-526.out
0.20960200 1292539753
0.27060200 1292539753
0.32160200 1292539753
0.37460200 1292539753
0.42460200 1292539753
0.47660200 1292539753

Paul@Paul-Macbook-W7 ~
$ /cygdrive/c/wamp/bin/php/php5.2.7/php test.php test-527.out
0.32660200 1292539767
Paul@Paul-Macbook-W7 ~
$ cat test-527.out
0.32660200 1292539767

Paul@Paul-Macbook-W7 ~
$ /cygdrive/c/wamp/bin/php/php5.2.11/php test.php test-5211.out
0.70760500 1292539776
Paul@Paul-Macbook-W7 ~
$ cat test-5211.out
0.70760500 1292539776

Итак, я думаю, что на этом этапе я могу только заключить, что это ошибка в сборке php, которую я получил для 5.2.6: PHP 5.2.6 (cli) (built: May 2 2008 18:02:07)

0 голосов
/ 16 декабря 2010

Это действительно очень странно ... Попробуйте это

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