【问题标题】:php breaks with cr and lf mismatchesphp 因 cr 和 lf 不匹配而中断
【发布时间】:2025-11-26 21:30:02
【问题描述】:

当我上传一些 PHP 文件时,我遇到了一些奇怪的问题,即一些 php 文件有 cr+lf EOL 字符,一些有 CR,一些有 LF。
我正在使用 Win8、Filezilla、Notepad++ 和 PHPRunner 进行一些模板化工作(全部存储在保管箱同步文件夹中)。当我处理手工制作的 php 文件时,我有时使用 PHPRunner 来 ftp 文件,有时使用 Filezilla。

当我在 notepad++ 中打开文件时,有时这些行尾似乎会自行更改,我需要进行 notepad++->edit-EOL 转换以将它们仅更改回 unix 样式。

所以这通常不会打扰我(除了它们随机变化的方式有点奇怪),但在 PHP 中,如果您 REQUIRE_ONCE 一个具有不同行尾的文件,它似乎会默默地失败并且没有任何效果。 所以我的问题是

1) 这是 PHP 的预期行为,如果是,有什么方法可以在同一个源文件中接受不同的 EOL 编码?

2) 任何想法为什么我的 EOL 字符可能会被更改?是 Filezilla、notepad++ 还是 dropbox 或 PHPRunner 正在修补? (当我打开文件时,我从来没有看到它们更改的通知,只会在重新启动计算机时发生)

这有点谜,所以想问问有没有其他人遇到过这个

【问题讨论】:

  • 你应该展示你尝试过的东西吗?
  • 所以看起来 PHP 不喜欢仅 CR 的 EOL。将此更改为 CR+LF 或仅 LF 修复它并且 PHP 可以正常运行。我一生都无法弄清楚为什么我的行尾一直只换成 CR。我的猜测是notepad++在打开文件时会这样做,但检查我设置了unix的选项,实际上无法捕捉到正在发生的这种变化。

标签: php windows notepad++


【解决方案1】:

任何数量的应用程序都喜欢更改行尾;在许多情况下,它被认为是有用的行为。 Ftp 程序(等)具有在跨系统传输时转换文本文件的选项。 FTP 的“ascii”模式,通常是文本文件的默认模式,可以实现自动转换。如果您最终上传了一些带有转换的文件,而另一些则没有,那么您最终会得到一个不一致的集合。

Notepad++ 也可能会这样做;我没用过所以不能说。最糟糕的是程序会只为你触摸的行插入他们喜欢的行结束符,给你留下一个行结束符不一致的文件。听起来你至少可以幸免于难。

简而言之:检查每个涉及文件的工具的设置,从 Notepad++ 开始。

【讨论】:

    最近更新 更多