【问题标题】:Store PHP Output To File?将 PHP 输出存储到文件?
【发布时间】:2014-04-01 13:19:15
【问题描述】:

我正在编写一个每天运行一次的 cron php 脚本。因为它是这样运行的,所以看不到文件的输出。

我可以将我想要的所有消息写入一个变量,不断地将我想要写入的信息附加到文件中,但这会非常乏味,而且我有预感没有必要。

是否有一个 PHP 命令告诉写缓冲区写入某个地方的日志文件?有没有办法访问已经发送到缓冲区的内容,以便我可以看到我的脚本发出的消息。

例如让脚本说

PHP:

<?
  echo 'hello there';
  echo 'hello world';
?>

它应该输出到一个文件中说:'hello therehello world';

有什么想法吗?这可能吗?

我已经知道了

file_put_contents('log.txt', 'some data', FILE_APPEND);

这取决于“一些数据”,当我不知道“一些数据”是什么时,除非我把它放在一个变量中。我正在尝试捕捉 PHP 输出的结果。

【问题讨论】:

    标签: php cron output


    【解决方案1】:

    您可能希望将您的输出重定向到crontab:

    php /path/to/php/file.php >> log.txt
    

    或者使用 PHP,例如,file_put_contents():

    file_put_contents('log.txt', 'some data', FILE_APPEND);
    

    如果要捕获所有 PHP 输出,则使用ob_ 函数,例如:

    ob_start();
    /*
    We're doing stuff..
    stuff
    ...
    and again
    */
    $content = ob_get_contents();
    ob_end_clean(); //here, output is cleaned. You may want to flush it with ob_end_flush()
    file_put_contents('log.txt', $content, FILE_APPEND);
    

    【讨论】:

    • 事情是这样的,你的例子中的“一些数据”必须是所有输出的集合,有没有办法访问 PHP 当前“回显”的任何内容?
    • crontab 的想法很好,但由于我在共享服务器上,我无权告诉 crontab 将其结果写入文件。我为什么要寻找这个解决方案。
    • @JosephAstrahan 明白了,已修复
    • 太棒了,这就是我想要的,谢谢。很快就会接受答复,这迫使我等待 7 分钟。
    【解决方案2】:

    您可以使用 ob_start() 将脚本输出存储到缓冲区中。见php documentation ob_get_clean

      <?php
    
      ob_start();
    
      echo "Hello World";
    
      $out = ob_get_clean();
      $out = strtolower($out);
    
      var_dump($out);
      ?>
    

    【讨论】:

    • ob_get_clean 如果我需要在不同时间打印出 PHP 的状态很有用,因为它会为您清除缓冲区,很高兴知道 +1
    【解决方案3】:

    如果您使用的是 cron,我想您是在 Unix 机器上运行它的:

    其中一种方法是将您想要的所有内容写入stdout 流,因此在 Unix 中您可以将此输出抓取到文件中:

    在 php 脚本中:

    $handle = fopen("php://stdout","w");
    
    fwrite($handle,"Hello world"); // Hello world will be written to console
    

    在 cron 作业中将此输出抓取到文件中:

    @hourly php /var/www/phpscript.php >> /path/to/your/outputfile.txt
    

    注意: &gt;&gt; 运算符将追加到文件,&gt; 运算符将用新数据覆盖文件。第一次写入会自动创建文件

    所以你把 fwrite 调用作为第二个参数的所有东西都将放在/path/to/your/outputfile.txt

    您可以根据需要多次调用 fwrite。不要忘记通过fclose($handle);关闭处理程序

    【讨论】:

      猜你喜欢
      • 2016-01-12
      • 2021-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-14
      • 1970-01-01
      相关资源
      最近更新 更多