【问题标题】:Printing / Echoing To Console from PHP Script从 PHP 脚本打印/回显到控制台
【发布时间】:2013-12-22 12:55:18
【问题描述】:

我正在调试一个 PHP 脚本,该脚本运行几个 SQL 查询并向一组用户发送电子邮件。我确信这是一个非常基本的事情,但是每次我尝试回显、打印或 print_r 时,它都不会在运行脚本时出现。

所以说我在脚本中有这个:

print("This should print");
echo "on the command line";

当我通过命令行php script.php 运行脚本时,它实际上并没有在运行脚本时向命令行打印任何内容。

有没有办法让 PHP 打印到控制台?我觉得我在这里遗漏了一些非常基本的东西。

【问题讨论】:

  • 假设之前没有执行关闭标准输出或重定向它的代码,该代码应该可以正常工作。到文件或启用输出缓冲区。
  • @ThiefMaster 打印变量的处理方式似乎不像我习惯的那样。打印字符串工作正常,哎呀!
  • 根据答案的建议,flush() 可以解决您的问题,但有一个更简单的解决方案:只需在邮件末尾添加一个换行符 ("\n")。这是自动触发控制台刷新的魔法。

标签: php


【解决方案1】:

这就是这样做的方法。

要检查的是输出缓冲 http://php.net/manual/en/function.ob-flush.php

那段代码真的在运行吗?确保它在到达那里之前没有分支

【讨论】:

  • 似乎打印基本字符串确实有效,这是我正在打印的变量。 :-X
  • 是的,print_r() 似乎做到了。 :P 因为他删除了他的评论:print_r("Printing Variable: " . $varName );
【解决方案2】:

我知道它已经过时了,但我会发布我自己的解决方案,以防万一有人遇到类似情况。我有一个问题,当 DSN 配置不正确并且脚本卡住很长时间(不知道多长时间,从不等待它自行终止)时,遗留命令行 PHP 脚本不会打印或向终端回显任何内容.将 ob_end_flush() 放入脚本的入口行后,输出返回到终端。结果证明所有输出都被缓冲了,由于脚本在某个点卡住了,输出保持缓冲,因此从未进入终端。

【讨论】:

    【解决方案3】:

    一个好的方法可能是:

    function log($message)
    {
        $message = date("H:i:s") . " - $message - ".PHP_EOL;
        print($message);
        flush();
        ob_flush();
    }
    

    它将在您调用的每一行中输出到您的终端。只需使用:

    log("Something");
    log("Another line");
    

    【讨论】:

      【解决方案4】:

      以下代码对我来说很好。

      <?php
          print("This should print");
          echo "on the command line";
      ?>
      

      带有标签。

      【讨论】:

      • 这是我如何打印变量的问题。应该在 SO'ing 之前运行测试代码哈哈。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-04
      • 1970-01-01
      • 2023-03-12
      • 2020-01-22
      • 1970-01-01
      • 1970-01-01
      • 2016-09-21
      相关资源
      最近更新 更多