是否可以改变PHP的print_r函数

时间:2016-02-29 06:12:13

标签: php windows

我已经在PHP中编写了很长时间(15年以上),我通常在Windows操作系统上进行编码,但大部分时间都是在Linux服务器上执行。多年来,我遇到了一个烦恼,虽然不重要,但事实证明有点令人恼火,而且我已经达到了我想看看能否以某种方式解决它的问题。这就是问题所在:

编码时,我经常发现将数组内容输出到文本文件很有用,这样我就可以查看它的内容。例如:

$fileArray = file('path/to/file');
$faString = print_r($fileArray, true);
$save = file_put_contents('fileArray.txt', $faString);

现在,当我在记事本中打开文件fileArray.txt时,文件的内容全部显示在一行上,而不是在Wordpad中打开文件时看到的漂亮,漂亮的结构。这是因为,无论操作系统如何,PHP的print_r函数都使用\ n表示换行符,而不是\ r \ n。我当然可以通过简单地添加一行代码来进行必要的替换来完成这样的替换,其中就是问题所在。这一行,额外代码的单行转换回我的年份,实际上是数百个额外的步骤,这些步骤是不必要的。我是一个懒惰的程序员,这已经变得不可接受了。

目前,在我的开发机器上,我已经有了不同的解决方法(如下所示),但这有其自身的一系列问题,所以我不喜欢找到一种方法来强迫" PHP加入"适当的"没有所有额外代码的换行符。我怀疑这可能是可能的,但我永远不会发现我是否从未问过,所以...

无论如何,我目前的解决方法是这样的。在我的PHP包含路径中,我有一个文件(print_w.php),其中包含以下代码:

<?php

  function print_w($in, $saveToString = false) {
    $out = print_r($in, true);
    $out = str_replace("\n", "\r\n", $out);
    switch ($saveToString) {
      case true: return $out;
      default: echo $out;
    }
  }
?>

我也将auto_prepend_file设置为php.ini中的同一个文件,这样每次PHP在我的开发机器上执行脚本时它都会自动包含它。然后我在测试脚本时使用print_w函数而不是print_r。这很有效,只要我将脚本上传到远程服务器,我就确保删除或注释掉对函数print_w的所有引用。如果我错过了一个,我(当然)会得到一个致命的错误,这可能比原始问题更令人沮丧,但我在上传之前仔细校对我的代码,所以它通常不是问题

所以在漫无目的之后,我的问题是,有没有办法改变print_r(或类似的PHP函数)的行为来使用Windows换行符,而不是Windows机器上的Linux换行符?

感谢您的时间。

1 个答案:

答案 0 :(得分:2)

好的,经过进一步的研究,我找到了一个更好的解决方案,满足了我的需求,并且无需调用自定义函数而不是print_r。这个新的解决方法是这样的:

我仍然必须有一个包含文件(我保持相同的名称,以免弄乱php.ini),并且php.ini仍然具有auto_prepend_file设置,但print_w中的代码。 php有点变化:

<?php

  rename_function('print_r', 'print_rw');

  function print_r($in, $saveToString = false) {
    $out = print_rw($in, true);
    $out = str_replace("\n", "\r\n", $out);
    switch ($saveToString) {
      case true: return $out;
      default: echo $out;
    }
  }

?>

这有效地改变了我本地机器上print_r函数的行为,而不必调用自定义函数,并且必须确保对该自定义函数的所有引用都被中和。通过使用PHP的rename_function,我能够有效地重写print_r的行为,从而可以解决我的问题。