PHP 文件在迁移后抛出解析错误(例如:T_STRING)

PHP Files Throw Parse Errors (ex: T_STRING) After Migrating

这很奇怪,我以前从未 运行 接触过。 我正在从 PHPStorm 部署到一个 vvv(Varying Vagrant Vagrants)盒子,该项目是一个 wordpress 站点。

经常,在移动文件时,重新加载网站后,我会收到 PHP 解析错误,总是在文件的最后一行。该文件不一定是我打开和编辑的文件,在末尾添加 ?> 即可修复它。然后我可以立即 删除 文件末尾的 ?> ,一切都很好。 这种情况间歇性发生,因此很难隔离和修复。

一个示例解析错误类似于:

Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting end of file in /srv/www/cpr/public_html/wp-content/plugins/jetpack/3rd-party/class.jetpack-amp-support.php on line 359

具体解析错误变化;它并不总是一回事,但它总是通过简单地添加一个?>、刷新等来修复

我一直认为这必须与行尾或编码有关,但 似乎 都可以。 (PHP风暴使用 LFUTF-8

这个工作流程中唯一对我来说是新的部分是 vvv 框,因为我以前使用过其他供应商的 vagrant 框,但我不确定这会如何导致这种情况。

当 PHP 去解析这些文件时,是否有附加到这些文件的东西被破坏了? git 或 vagrant 或 PHPStorm 的部署是否覆盖行结束规则并更改它们? 我完全不知所措。

非常感谢任何帮助。当我推出更大的插件更改时,如果不手动打开所有受影响的文件并添加 PHP 结束标记,然后删除它们,我将无法使用 WP api 或执行任何其他操作。

通过隔离各种组件,我终于找到了原因。 我排除了 phpStorm 和 git 通过手动迁移一些文件并在 vagrant box 上的应用程序根目录之上发生相同的错误。这将问题隔离到 vvv 框本身,而不是项目、PHPStorm 或部署设置。

然后我设置 git 以通过存储库根目录中的 .gitattributes 文件强制 linux 行结尾,设置基于我阅读的内容

这是我现在使用的:

# Force provisioning script to use LF, even on Windows
* text eol=lf

# Avoid binary files to be corrupted by CRLF conversion
*.png binary
*.gif binary
*.jpg binary
*.jpeg binary

然后我使用 dos2unixfind 递归修复项目中的所有行结尾,如下所示:

find . -name '*.php' |xargs dos2unix

到目前为止-一切都很好,而且还在坚持。如果弹出并需要进一步修改,我会更新。