【问题标题】:PHP Files Throw Parse Errors (ex: T_STRING) After Migrating迁移后 PHP 文件引发解析错误(例如:T_STRING)
【发布时间】:2019-08-08 20:36:03
【问题描述】:

这是一个奇怪的问题,而且我以前从未遇到过。 我正在从 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

具体的解析错误变化;它并不总是相同的东西,但它总是通过简单地添加?>、刷新等来解决。

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

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

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

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

【问题讨论】:

    标签: php wordpress character-encoding vagrant line-endings


    【解决方案1】:

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

    然后我设置git 以通过回购根目录中的.gitattributes 文件强制Linux 行结尾,其设置基于我阅读in this thread 的内容。

    这是我现在使用的:

    # 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

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

    【讨论】:

    • 两年后,这个修复在同一个项目以及新加入的项目中得到了解决,涵盖了所有环境和存储库。
    猜你喜欢
    • 2017-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-07
    • 2014-08-09
    • 1970-01-01
    • 2019-01-16
    • 2015-02-24
    相关资源
    最近更新 更多