什么时候使用PHP常量" PHP_EOL"?
什么时候使用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"; } ?>