通过 SFTP 上传 PHP 文件后出现 PHP ParseError

通过 SFTP 上传 PHP 文件后出现 PHP ParseError

我们在将 PHP 文件上传到生产 NFS 服务器时遇到了一个问题,上传后我们开始收到 PHP 解析错误。“修复”它们的唯一方法是使用 vim 打开它们并通过 SSH 保存而不进行任何更改。这让我认为它可能与文件编码有关。我似乎找不到任何关于如何修复此问题的信息。

我们使用 FileZilla 通过 SFTP 上传文件。

到目前为止我们已经尝试过的事情:

  • 检查每个人都使用无 BOM 的 UTF-8 编码编辑文件。
  • 将 FileZilla 的文件传输类型更改为二进制(如果使用 SFTP,传输类型始终为二进制)。

错误示例:

ParseError: Uncaught exception 'ParseError' with message 'syntax error, unexpected '} '' in XXXXXX.php:XXXX

Uncaught exception 'ParseError' with message 'syntax error, unexpected ''] = '' (T_CONSTANT_ENCAPSED_STRING)' in XXXXX.php:XXXX

服务器信息:运行 NFS 的 AWS EC2 实例。NFS 由运行启用了 OPCache 的 Apache 和 PHP7 的多个自动扩展实例使用。

答案1

这是对可能原因的猜测。我对 NFS 内部操作了解不够多,无法准确描述问题,但我给出了有根据的猜测。

这可能是文件锁定/同步问题。PHP 进程可能会在上传期间从 NFS 服务器读取不完整的 PHP 文件,从而触发错误。NFS 客户端在上传完成时没有意识到文件已更改,因此它仍然使用客户端系统缓存中的不完整文件。

当你编辑文件并保存时,编辑器会在一个原子操作中读取和写入它。NFS 客户端现在看到文件状态已更改并从服务器读取它。

您可以尝试使用noacNFS 客户端 mount 命令中的选项来禁用文件属性缓存。另一种方法是将actimeo=3缓存时间设置为 3 秒。

相关内容