【问题标题】:PHP script is executing multiple times when only invoked once on the command line. Only output of first run is sent to stdout仅在命令行上调用一次时,PHP 脚本会执行多次。只有第一次运行的输出被发送到标准输出
【发布时间】:2011-05-26 08:31:28
【问题描述】:

每次我通过 Windows 中的命令行(在 cygwin 或 cmd 中)调用 PHP 脚本时,脚本似乎运行了多次 (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 shell 运行脚本都没有关系。 我试过使用 php5.2.6 和 php5.2.7 和 php5.2.11 - 全部通过 WAMP 安装。 我尝试使用 strace,但它的输出是空白的 - 我以前从未在 Windows 上使用过它,也许我的 cygwin 安装不正确。我正在使用 Windows 7,当我开始使用 Windows 7 时问题就开始了。我有一个同事在运行 Windows 7,他遇到了完全相同的问题,但是运行 Windows XP 的每个人(包括我以前的自己)都没有问题php CLI。

我希望我在这里没有遗漏任何明显的东西!让我知道我可以提供的任何其他内容,如果有人有任何想法或建议,我将不胜感激!

【问题讨论】:

    标签: php windows-7 cygwin command-line-interface


    【解决方案1】:

    真的很奇怪…… 试试这个

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

    【讨论】:

    • 它本质上是一样的,但只有最后一次运行的时间会在 test.out 中结束,因为默认情况下 file_put_contents() 会覆盖文件而不是附加它。我提供的脚本实际上只是试图说明问题。导致此问题的实际原因是我正在通过 php cli 运行 selenium 测试,并且每个测试都运行 6 次。
    • 所以很可能和Selenium有关
    • 我不这么认为。这就是我提供上述示例的原因。
    • 看来我在之前的测试中犯了一个错误,因此在上面的帖子中。我肯定只尝试过使用php v5.2.6,只安装了其他版本。
    【解决方案2】:

    所以它现在看起来像是我正在使用的 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
    

    所以我想在这个阶段我只能断定这是我为 5.2.6 获得的 php 构建中的一个错误:PHP 5.2.6 (cli) (built: May 2 2008 18:02:07)

    【讨论】:

      猜你喜欢
      • 2012-09-16
      • 1970-01-01
      • 2021-03-04
      • 1970-01-01
      • 2015-10-03
      • 2018-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多