草庐IT

php - 是否可以更改 PHP 的 print_r 函数的行为

coder 2024-06-11 原文

<分区>

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

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

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

现在,当我在记事本中打开文件 fileArray.txt 时,文件的内容全部显示在一行中,而不是在写字板中打开文件时看到的漂亮、漂亮的结构。这是因为,无论操作系统如何,PHP 的 print_r 函数都使用\n 作为换行符,而不是\r\n。我当然可以通过仅添加一行代码来进行必要的替换来自己执行此类替换,而问题就出在这里。那一行,一行额外的代码在我的岁月中转化为数百个不必要的额外步骤。我是一个懒惰的编码员,这已经变得 Not Acceptable 了。

目前,在我的开发机器上,我有一种不同的解决方法(如下所示),但这有它自己的一系列问题,所以我想找到一种方法来“强制” 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;
    }
  }
?>

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

所以说了这么多之后,我的问题是,有没有办法改变 print_r(或类似的 PHP 函数)的行为以使用 Windows 换行符,而不是 Windows 机器上的 Linux 换行符?

感谢您的宝贵时间。

有关php - 是否可以更改 PHP 的 print_r 函数的行为的更多相关文章

  1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  2. ruby-on-rails - Ruby on Rails 迁移,将表更改为 MyISAM - 2

    如何正确创建Rails迁移,以便将表更改为MySQL中的MyISAM?目前是InnoDB。运行原始执行语句会更改表,但它不会更新db/schema.rb,因此当在测试环境中重新创建表时,它会返回到InnoDB并且我的全文搜索失败。我如何着手更改/添加迁移,以便将现有表修改为MyISAM并更新schema.rb,以便我的数据库和相应的测试数据库得到相应更新? 最佳答案 我没有找到执行此操作的好方法。您可以像有人建议的那样更改您的schema.rb,然后运行:rakedb:schema:load,但是,这将覆盖您的数据。我的做法是(假设

  3. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  4. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  5. ruby - 我可以使用 Ruby 从 CSV 中删除列吗? - 2

    查看Ruby的CSV库的文档,我非常确定这是可能且简单的。我只需要使用Ruby删除CSV文件的前三列,但我没有成功运行它。 最佳答案 csv_table=CSV.read(file_path_in,:headers=>true)csv_table.delete("header_name")csv_table.to_csv#=>ThenewCSVinstringformat检查CSV::Table文档:http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV/Table.html

  6. ruby - 检查数组是否在增加 - 2

    这个问题在这里已经有了答案:Checktoseeifanarrayisalreadysorted?(8个答案)关闭9年前。我只是想知道是否有办法检查数组是否在增加?这是我的解决方案,但我正在寻找更漂亮的方法:n=-1@arr.flatten.each{|e|returnfalseife

  7. ruby - 在没有 sass 引擎的情况下使用 sass 颜色函数 - 2

    我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re

  8. ruby - 我可以使用 aws-sdk-ruby 在 AWS S3 上使用事务性文件删除/上传吗? - 2

    我发现ActiveRecord::Base.transaction在复杂方法中非常有效。我想知道是否可以在如下事务中从AWSS3上传/删除文件:S3Object.transactiondo#writeintofiles#raiseanexceptionend引发异常后,每个操作都应在S3上回滚。S3Object这可能吗?? 最佳答案 虽然S3API具有批量删除功能,但它不支持事务,因为每个删除操作都可以独立于其他操作成功/失败。该API不提供任何批量上传功能(通过PUT或POST),因此每个上传操作都是通过一个独立的API调用完成的

  9. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  10. ruby - Capistrano 3 在任务中更改 ssh_options - 2

    我尝试使用不同的ssh_options在同一阶段运行capistranov.3任务。我的production.rb说:set:stage,:productionset:user,'deploy'set:ssh_options,{user:'deploy'}通过此配置,capistrano与用户deploy连接,这对于其余的任务是正确的。但是我需要将它连接到服务器中配置良好的an_other_user以完成一项特定任务。然后我的食谱说:...taskswithoriginaluser...task:my_task_with_an_other_userdoset:user,'an_othe

随机推荐