【问题标题】:PHP: How to determine if var_Dump() will exceed the terminal window display?PHP:如何确定 var_Dump() 是否会超出终端窗口显示?
【发布时间】:2015-09-29 16:26:11
【问题描述】:

我有一个 PHP 脚本,它对大型 XML 文件进行排序,然后使用 var_dump() 将 XML 内容返回到命令行。有时 XML 文件非常大,您无法向上滚动查看所有内容。

在将内容打印到终端之前,我想知道在我的 XML 数组上调用 var_dump() 是否会超出终端窗口显示。

1) 有没有办法从var_dump($my_xml_array) 获取显示的行数?

2) 你有什么建议吗?

【问题讨论】:

  • var_dump 用于调试输出。它不应该用于日常“常规”输出。
  • 为什么不使用 print_r();
  • 你可以使用输出缓冲:php.net/manual/en/book.outcontrol.php ob_start ob_get_contents ob_clean
  • php somescript.php |少
  • 如果整个输出都很重要,那么为什么不将其保存到文件中?

标签: php xml shell terminal


【解决方案1】:

您应该使用var_export 而不是var_dump,这样您就可以将其输出存储在一个变量中而不是使用以下方法打印它:

$var_out = var_export($some_var, true);

// now check & compare size of $var_out with terminal size

【讨论】:

  • 如何查看$var_out的大小?
  • 只要strlen($var_out) 就可以了
【解决方案2】:

两步:

  1. 使用 exec() 调用获取终端中的行数 tput lines

  2. 通过使用 var_export() 来获取 var_dump 的大小,就像 anubhava 提到的那样。

将这两个放在一起并继续。

<?php

/** 
 * get lines of terminal
 */
exec("tput lines", $exec_return);
$number_of_terminal_lines = $exec_return[0];

/** 
 * get lines of var dump
 */

$test_array = array("foo"=>"bar", "baz"=>"quux");

$test_array_var_dump_string = var_export($test_array,true);

$test_array_var_dump_string_lines = substr_count( $test_array_var_dump_string, "\n" );

print "number of lines in terminal $number_of_terminal_lines\n";
print "number of lines in var dump $test_array_var_dump_string_lines\n";

希望这能解决问题!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-16
    • 1970-01-01
    • 2014-11-16
    • 2021-02-27
    • 2018-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多