什么时候使用是个好主意PHP_EOL
?
我有时会在PHP的代码示例中看到这一点.这会处理DOS/Mac/Unix终结问题吗?
是的,PHP_EOL
表面上用于以跨平台兼容的方式查找换行符,因此它处理DOS/Unix问题.
请注意,PHP_EOL表示当前系统的结束字符.例如,在类似unix的系统上执行时,它不会找到Windows端线.
从main/php.h
PHP版本7.1.1和版本5.6.30:
#ifdef PHP_WIN32 # include "tsrm_win32.h" # include "win95nt.h" # ifdef PHP_EXPORTS # define PHPAPI __declspec(dllexport) # else # define PHPAPI __declspec(dllimport) # endif # define PHP_DIR_SEPARATOR '\\' # define PHP_EOL "\r\n" #else # if defined(__GNUC__) && __GNUC__ >= 4 # define PHPAPI __attribute__ ((visibility("default"))) # else # define PHPAPI # endif # define THREAD_LS # define PHP_DIR_SEPARATOR '/' # define PHP_EOL "\n" #endif
正如你可以看到PHP_EOL
可以"\r\n"
(在Windows服务器上)或"\n"
(在其他东西).在5.4.0RC8 之前的 PHP版本上,可能有以下第三个值PHP_EOL
:( "\r"
在MacOSX服务器上).这是错误的,已在2012-03-01 修复,错误61193.
正如其他人已经告诉过你的那样,你可以使用PHP_EOL
任何类型的输出(其中任何一个值都是有效的 - 比如:HTML,XML,日志...),你需要统一的换行符.请记住,它是确定价值的服务器,而不是客户端.您的Windows访问者将从您的Unix服务器获得价值,这有时对他们来说是不方便的.
我只是想显示PHP_EOL
PHP源支持的可能值,因为它还没有在这里显示...
PHP_EOL
当你想要一个新的线路时,你可以使用,并且想要跨平台.
这可能是您将文件写入文件系统(日志,导出,其他).
如果您希望生成的HTML可读,则可以使用它.所以,你可以按照你的
一个PHP_EOL
.
如果你从cron运行php作为脚本,你会使用它,你需要输出一些东西,并将其格式化为一个屏幕.
如果要构建要发送的电子邮件,则可以使用它,这需要一些格式化.
PHP_EOL(string)此平台的正确"End Of Line"符号.从PHP 4.3.10和PHP 5.0.2开始提供
当您在服务器的文件系统上读取或写入文本文件时,可以使用此常量.
在大多数情况下,行结尾无关紧要,因为大多数软件都能够处理文本文件,无论其来源如何.你应该与你的代码保持一致.
如果行结尾很重要,请明确指定行结尾而不是使用常量.例如:
HTTP标头必须用\n分隔\r\n
CSV文件应该使用\r\n
作为行分隔符
我想提出一个答案,解决"何时不使用它",因为它还没有被覆盖,可以想象它被盲目使用,没有人注意到有问题直到后来的线路.其中一些与某些现有答案相矛盾.
如果输出到HTML中的网页,特别是文本,
或者
您可能总是想要使用
\n
而不是PHP_EOL
.
这样做的原因是,虽然代码可能在一个服务器上运行良好 - 这恰好是一个类Unix的平台 - 如果部署在Windows主机(如Windows Azure平台)上,那么它可能会改变某些浏览器中页面的显示方式(特别是Internet Explorer - 其中一些版本将同时看到\n和\ r).
我不确定自IE6以来这是否仍然是一个问题,所以它可能是没有实际意义但似乎值得一提,如果它有助于人们提示考虑上下文.可能还有其他情况(例如严格的XHTML)\r
在某些平台上突然输出可能会导致输出问题,我确信还有其他类似的边缘情况.
正如有人已经指出的那样,在返回HTTP标头时你不想使用它 - 因为它们应该始终遵循任何平台上的RFC.
我不会将它用于CSV文件上的分隔符(正如有人建议的那样).服务器运行的平台不应确定生成或使用的文件中的行结尾.
不,PHP_EOL不处理最终问题,因为您使用该常量的系统与您将输出发送到的系统不同.
我不建议使用PHP_EOL.Unix/Linux使用\n,MacOS/OS X也从\ r更改为\n,在Windows上,许多应用程序(尤其是浏览器)也可以正确显示它.在Windows上,它也很容易改变现有的客户端代码只使用\n并仍然保持向后兼容性:只需将行修剪的分隔符从\ r \n更改为\n并将其包装在trim()函数中.
我发现PHP_EOL对于文件处理非常有用,特别是如果您要将多行内容写入文件中.
例如,您有一个长字符串,您希望在写入普通文件时分成多行.使用\ r \n可能无法正常工作,所以只需将PHP_EOL放入脚本中,结果就很棒了.
看看下面这个简单的例子:
PHP_EOL的定义是它为您提供了您正在使用的操作系统的换行符.
在实践中,你几乎从不需要这个.考虑一些情况:
当您输出到Web时,除了您应该保持一致之外,确实没有任何约定.由于大多数服务器都是Unixy,因此无论如何都要使用"\n".
如果您输出到文件,PHP_EOL似乎是个好主意.但是,您可以通过在文件中包含文字换行来获得类似的效果,如果您尝试在Unix上运行某些CRLF格式的文件而不破坏现有的换行符(如同具有双启动系统的人),这将帮助您,我可以说我更喜欢后者的行为)
PHP_EOL是如此荒谬,以至于它真的不值得使用它.