什么时候使用PHP常量" PHP_EOL"?

时间:2020-03-06 14:40:37  来源:igfitidea点击:

什么时候使用PHP_EOL是一个好主意?

我有时会在PHP的代码示例中看到这一点。这样可以处理DOS / Mac / Unix终端问题吗?

解决方案

是的,表面上使用PHP_EOL可以跨平台兼容的方式查找换行符,因此它可以处理DOS / Unix问题。

请注意,PHP_EOL表示当前系统的结束符。例如,在类似Unix的系统上执行时,它将找不到Windows终端行。

当我们需要换行并希望跨平台时,可以使用PHP_EOL。

这可能是在我们将文件写入文件系统时(日志,导出,其他)。

如果希望生成的HTML可读,则可以使用它。因此,我们可以在<br />之后加上PHP_EOL

如果我们将cron作为脚本从cron运行,并且需要输出某些内容并将其格式化为屏幕,则可以使用它。

如果我们要建立一封电子邮件以发送需要某种格式的邮件,则可以使用它。

PHP_EOL的定义是,它为我们提供了正在使用的操作系统的换行符。

实际上,我们几乎永远不需要它。考虑以下几种情况:

  • 当我们输出到Web时,实际上没有任何约定,只是我们应该保持一致。由于大多数服务器都是Unixy,因此无论如何我们都希望使用" \ n"。
  • 如果要输出到文件,则PHP_EOL似乎是个好主意。但是,通过在文件中包含文字换行符,可以得到类似的效果,如果我们尝试在Unix上运行某些CRLF格式的文件而又不破坏现有的换行符,那么这将为我们提供帮助(例如,使用双启动系统的人,可以说我更喜欢后者的行为)

PHP_EOL太长了,以至于真的不值得使用它。

如果要输出多行,可以使用error_log()。

我发现许多调试语句在Windows安装上看起来都很奇怪,因为开发人员在分解字符串时假设使用unix结尾。

我在必须编写的某些命令行脚本中使用了PHP_EOL常量。我在本地Windows计算机上进行开发,然后在Linux服务器盒上进行测试。使用常量意味着我不必担心为每个不同的平台使用正确的行尾。

我正在使用WebCalendar,并且发现Mac iCal在导入生成的ics文件时使用barfs,因为行尾在xcal.php中硬编码为" \ r \ n"。我进去并用PHP_EOL替换了所有出现的内容,现在iCal很高兴!
我还在Vista上进行了测试,即使行尾字符为" \ n",Outlook也能够导入文件。

我更喜欢使用\ n \ r。另外,我使用的是Windows系统,根据我的经验,\ n可以正常工作。

由于PHP_EOL不适用于正则表达式,而这些是处理文本的最有用方法,因此我真的从未使用过它,也不需要使用它。

当jumi(PHP的joomla插件)​​出于某种原因编译代码时,它将删除代码中的所有反斜杠。这样,类似$ csv_output。=" \ n";就变成$ csv_output。=" n";

非常烦人的错误!

改用PHP_EOL获得我们想要的结果。

我发现PHP_EOL对于文件处理非常有用,尤其是当我们将多行内容写入文件时。

例如,我们有一个长字符串,想在写入普通文件时将其分成多行。使用\ r \ n可能不起作用,因此只需将PHP_EOL放入脚本中,结果就很棒。

看看下面这个简单的例子:

<?php

$output = 'This is line 1' . PHP_EOL .
          'This is line 2' . PHP_EOL .
          'This is line 3';

$file = "filename.txt";

if (is_writable($file)) {
    // In our example we're opening $file in append mode.
    // The file pointer is at the bottom of the file hence
    // that's where $output will go when we fwrite() it.
    if (!$handle = fopen($file, 'a')) {
         echo "Cannot open file ($file)";
         exit;
    }
    // Write $output to our opened file.
    if (fwrite($handle, $output) === FALSE) {
        echo "Cannot write to file ($file)";
        exit;
    }
    echo "Success, content ($output) wrote to file ($file)";
    fclose($handle);
} else {
    echo "The file $file is not writable";
}
?>