当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《我什么时候使用PHP常量"PHP_EOL"?》经验,为你挑选了8个好方法。

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

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



1> Adam Bellair..:

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

请注意,PHP_EOL表示当前系统的结束字符.例如,在类似unix的系统上执行时,它不会找到Windows端线.


它是否应该在编写命令行脚本时用作结束字符?
@Andre:那些编写应用程序以供其他人安装,使用和部署的人怎么样?您是否建议将这些"受支持的平台"限制为*nix?
不,我不认为你的答案是正确的.您在一个系统上生成代码,但将输出发送到另一个系统.但是,PHP_EOL会告诉您仅使用它的系统的行结束分隔符.它不保证您的其他系统使用相同的分隔符.请参阅下面的答案.
@Thomas:是的.C",)

2> AlexV..:

main/php.hPHP版本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_EOLPHP源支持的可能值,因为它还没有在这里显示...


@ imgx64也许,但老实说你见过生产MAC服务器吗?
哇.PHP开发人员对此非常不对.作为维基百科链接,您提到了Mac OS 9,之前使用的是"\ r",而不是OS X,它使用"\n".有人应该提交错误报告......
@ imgx64它已经修复了你的帖子后33天:)我已经更新了我的答案以反映当前的来源.
我认为将PHP_EOL用于输出(!)的参数无效。PHP_EOL是服务器端的,而输出通常用于客户端(使用不同的行尾定界符)。示例:如果您在Linux系统上使用PHP_EOL创建多行纯文本输出并将其发送到Windows系统,则该行将不是有效的行结束定界符-它取决于将显示输出的客户端软件。浏览器和某些文本编辑器可能会处理它,但是例如,如果您在记事本中查看文本,则所有内容都将在一行中。

3> Zoredache..:

PHP_EOL当你想要一个新的线路时,你可以使用,并且想要跨平台.

这可能是您将文件写入文件系统(日志,导出,其他).

如果您希望生成的HTML可读,则可以使用它.所以,你可以按照你的
一个PHP_EOL.

如果你从cron运行php作为脚本,你会使用它,你需要输出一些东西,并将其格式化为一个屏幕.

如果要构建要发送的电子邮件,则可以使用它,这需要一些格式化.


**`PHP_EOL`不应该用于分隔电子邮件标题.**根据[PHP Mail](http://www.php.net/manual/en/function.mail.php)手册,应该有多个额外的标题用CRLF分隔(\ r \n).
生成HTML时,您不需要使用与平台无关的换行符.
@Zoredache - HTML将使用适合运行PHP的平台的换行符生成,不一定适合您正在访问页面的平台.
@Rob,如果IE的旧版本给了我一个更好的页面源查看器,那么Windows记事本我可能已经同意了你.
+1提及电子邮件建立`$ header ="From:$ from".PHP_EOL; $ header.="回复:$ from".PHP_EOL; $ header.="Return-Path:$ from".PHP_EOL;`
@ Lexib0y TLDR; 不,使用CRLF.你的意思是PHP_EOL,对吗?根据最新的[RFC](http://tools.ietf.org/html/rfc5322#section-2.3),没有.你也应该在那里使用CRLF.但是,即使您使用PHP_EOL(仅在Windows上使用CRLF,在大多数其他服务器上使用LF),各种电子邮件服务器和客户端也可能看起来容忍,但我仍然不会依赖它们.
`你可以使用它,如果你在那里建立一个需要一些格式化的电子邮件.大声笑这是一个可怕的例子,好像收件人一定会使用相同的操作系统.

4> Salman A..:

PHP_EOL(string)此平台的正确"End Of Line"符号.从PHP 4.3.10和PHP 5.0.2开始提供

当您在服务器的文件系统上读取或写入文本文件时,可以使用此常量.

在大多数情况下,行结尾无关紧要,因为大多数软件都能够处理文本文件,无论其来源如何.你应该与你的代码保持一致.

如果行结尾很重要,请明确指定行结尾而不是使用常量.例如:

HTTP标头必须用\n分隔\r\n

CSV文件应该使用\r\n作为行分隔符


"HTTP标题必须是......"的来源:https://www.ietf.org/rfc/rfc2616.txt第4章第1节
[SMTP](/sf/ask/17360801/)消息行_must_由`\ r \ n`终止

5> Iain Collins..:

我想提出一个答案,解决"何时使用它",因为它还没有被覆盖,可以想象它被盲目使用,没有人注意到有问题直到后来的线路.其中一些与某些现有答案相矛盾.

如果输出到HTML中的网页,特别是文本

小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有