【问题标题】:How to stop a ERR_CONNECTION_RESET issue with Laravel barryvdh/laravel-dompdf如何使用 Laravel barryvdh/laravel-dompdf 停止 ERR_CONNECTION_RESET 问题
【发布时间】:2019-12-20 15:41:48
【问题描述】:

我在 Laravel 中使用 barryvdh/laravel-dompdf 包来生成 PDF 用于打印。

当我下载 PDF 时出现此错误..(加载大约 10 秒然后出错)

无法访问此站点连接已重置。

尝试:检查连接检查代理和防火墙正在运行 Windows 网络诊断 ERR_CONNECTION_RESET

该 URL 是一个有效的链接,因为我使用相同的链接/视图来构建 PDF。

这是我的控制器代码

use PDF;
...
    public function haitiKidPdf($childId){
        $haitiKid = Kid::findOrFail($childId);
        $pdf = PDF::loadView('admin.cdp.haiti-kid-pdf', compact('haitiKid'));
        return $pdf->download('haiti-kids.pdf');
}

这是我用来创建页面和提取数据的。 (这就是我知道 URL 正确的方式。)

    public function haitiKidPdf($childId){
        $haitiKid = Kid::findOrFail($childId);
        return view('admin.cdp.haiti-kid-pdf',compact('haitiKid'));
}

在我看来 (haiti-kid-pdf.blade.php) 我正在使用大量 PHP 来动态填充所有必要的数据。

<!DOCTYPE html>
<html lang="{{ app()->getLocale() }}">

<head>
    <title>PDF</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <link href="{{ asset('/css/app.css') }}" rel="stylesheet">
    <style>
    body {
        font-family: 'Muli', sans-serif;
        background-color: #1E1F26 !important;
    }

    .cutline {
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate3d(-50%, -50%, 0);
        border-right: 1px dotted rgba(21, 87, 36, 0.25);
        z-index: 99999;
        width: 5.5;
        height: 8.5in;
....

    @media print {


        * {
            -webkit-print-color-adjust: exact;
        }

        html {
            background: none;
            padding: 0;
        }

        body {
            box-shadow: none;
            margin: 0;
        }
...
    </style>
</head>
...
<img alt="Name Here" src="{{asset("storage/images/cdp/$haitiKid->cin/profile-img/$haitiKid->child_img")}}">
                                </div>
                            </div>
                        </div>
                        <!-- END KID IMAGE -->
                        <div class="kid-name-box relative">
                            <div class="kid-name absolute pin-c-y ml-2 font-black leading-none text-navy-500">
                                <span class="first-name">{{ $haitiKid->first_name }}</span>
                                <span class="last-name">{{ $haitiKid->last_name }}</span>
                            </div>
                        </div>
                        <div class="slot-box absolute bg-red-500">
                            <div class="slot-box-name absolute pin-c-y ml-2">
                                @php
                                $numReceived = $haitiKid->sponsors_received;
                                $numNeeded = $haitiKid->sponsors_needed - $numReceived;
                                @endphp
                                @for($i = 0; $i < $haitiKid->sponsors_needed; $i++ )
                                    @if($numReceived-- > 0)
                                    <span class="slot-circ relative"></span>
                                    @else
                                    <span class="slot-circ-outline relative"></span>
                                    @endif
                                    @endfor
                                    <span class="font-black leading-none text-white uppercase">{{ $numNeeded }} {{ str_plural('Slot', $numNeeded) }} Available</span>
                            </div>
                        </div>
etc...

    }

基本上生成这个以在 11 英寸 x 8.5 英寸的纸上打印出来。

https://codepen.io/daugaard47/full/pozgdeM

我的代码不正确还是需要在我的 php.ini 文件中安装其他内容?

  • 我使用的是 PHP 7.2.2
  • 目前在本地主机上
  • 我已将 Enable inline PHP 设置为 true "enable_php" =&gt; true, dompdf.php 配置文件
  • 如果我加载视图然后选择“打印”>“打印到 PDF”,结果会很好,但这违背了我想要完成的目的。

在这几天。任何帮助将不胜感激。

【问题讨论】:

  • 好的,问题是我引入了我所有的 css 样式&lt;link href="{{ asset('/css/app.css') }}" rel="stylesheet"&gt; 这导致了超时问题。我删除了 app.css,然后开始使用内联样式设置每个组件的样式。仍在寻找更好的方法。

标签: php laravel pdf dompdf


【解决方案1】:

由于我无法评论(尚未),我将在这里留下答案。

您正在使用的包 (barryvdh/laravel-dompdf) 需要一段时间来呈现视图。从外观上看,您正在尝试渲染视图。发生连接重置是因为默认情况下,php 的最大执行时间设置为 10 秒。因此发生超时。您可以尝试一些步骤。

编辑:更新php.ini文件后,一定要重启你的开发服务器(Apache,Nginx等在WAMP,XAMPP等)

第 1 步: 尝试将 PHP Max 执行时间更改为 10 秒以上。 您需要为此编辑php.ini 文件。查找max_execution_time= 行。该文件通常位于/php/php.ini 下。我已将其设置为 160,这意味着它需要 160 秒才能超时(这仅用于测试)。

第 2 步: 这是一个调试步骤。尝试限制您的输出数据。提供给渲染的数据越多,执行所需的时间就越多。要查看是否确实超时,您可以尝试此方法。将您获得的数据限制在 10 个左右,并测试您是否仍然遇到错误。完成第一步后,您也可以按照此步骤操作。

您也可以尝试 THIS PACKAGEE 看看是否有帮助。它是由同一开发人员制作的包装器。我没有亲自测试过,但欢迎您尝试一下。

注意:如果您的应用需要一段时间才能加载,则意味着用户体验和应用加载不佳。我建议使用另一种方法来减轻一些负担并缩短加载时间

如果这有帮助,请告诉我。快乐编码:)

【讨论】:

    【解决方案2】:

    最终解决方案

    1. /tmp 目录的权限
    2. 确保安装 php BCMath 模块

    它对我有用:)

        chmod -R 777 /tmp
        sudo apt install php7.2-bcmath
        
        systemctl restart php7.2-fpm
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 2019-11-12
      • 1970-01-01
      • 2014-12-24
      • 2019-09-08
      相关资源
      最近更新 更多