如何从 Laravel Nova 的文件下载中删除不需要的换行符?

问题描述

在 Laravel Nova 应用程序中,我遇到了一个奇怪的问题:每当我尝试下载文件时,第一行(0A,空行)都有一个换行符。这会损坏图像、zip 文件等。但这是什么原因造成的?

我试过/检查过:

  1. 检查关闭标签上的所有 PHP 文件(没有)
  2. 硬盘上的原始文件没有在创建时有这个额外的换行符
  3. 检查自上次发布以来的每个 PHP 文件获取正确的 UTF-8 编码
  4. 从实时服务器复制 composer.lock 并重新安装所有内容
  5. Ran composer dump,PHP artisan cache:clear,PHP artisan clear-compiled
  6. 检查自上次发布以来的所有代码更改(没有问题)
  7. 尝试过 Chrome 和 Firefox

以下是导致此错误的一些 Laravel Nova 代码

return Fields\Image::make(__('Image')),'imageStorage')
        ->rules('image',"dimensions:max_width={$image_max_width},max_height={$image_max_height}")
        ->squared()
        ->disk(Enums\Storagedisk::APP_PUBLIC_disTRIBUTORS)
        ->path(distributorPath::products($distributorId))
        ->deletable(false)
        ->prunable()
        ->onlyOnForms(); 

一个字符始终为 0A。

那么,我如何找到原因?有什么提示或策略吗?

解决方法

简短回答:换行符隐藏在路由文件中。

这个错误是大约一年前犯的,直到现在才出现,因为应用程序创建的任何输出(html / xml)都没有问题。当我尝试输出二进制文件(zip/图像)时开始出现问题。

那我是怎么发现这个bug的? die('find bug!');

对于未来的任何人:

  • 从 index.php 开始
  • die('find bug!'); 放在一处并进行测试。
  • 不要害怕将其放入供应商或库代码中。
  • 没有换行符?删除 die('find bug!'); 并将其放在下一个调用中。
  • 找到换行符了吗?所以现在你现在换行符介于两者之间。
  • 放大并找到它!