不能 require_once fdpf/fpdf.php

Can't require_once fdpf/fpdf.php

我正在使用 JanSlabon 的 FPDI 库来保护从我的 laravel 应用程序上传的 PDF 文件。但是即使我导航到文件本身,我也无法执行代码 require_once。我收到错误:

Failed opening required '../../vendor/setasign/fpdf/fpdf.php' (include_path='.:/usr/local/Cellar/php/7.3.4/share/php/pear')

我需要的代码是:

require_once('../../vendor/setasign/fpdf/fpdf.php');
require_once('../../vendor/setasign/fpdi/src/autoload.php');

您到 vendor 的相对路径 ../../ 可能是错误的。为避免此问题,请使用 Laravel base_path() 助手,它将提供绝对路径。

require_once(base_path('vendor/setasign/fpdf/fpdf.php'));
require_once(base_path('vendor/setasign/fpdi/src/autoload.php'));

您可以使用 composer.json 自动加载。首先,在app目录下新建一个名为Custom的目录,将fpdi目录复制到app/Custom.

现在,在 composer.json 文件的 autoload 部分,需要该文件。在需要该文件后,如果它是一个新的 Laravel 应用程序,您的 composer.json 文件的自动加载块应该如下所示:

"autoload": {
    "psr-4": {
        "App\": "app/"
    },
    "classmap": [
        "database/seeds",
        "database/factories"
    ],
    "files": [
        "app/Custom/fpdi/FPDI_Protection.php"
    ]
},

更新您的 composer.json 文件后,运行 composer dumpautoload。现在,您可以在 Laravel 控制器或模型中使用 类,无需手动输入文件。

在做测试时,我看到这个库使用了一些不推荐使用的方法等等。您将不得不处理它,即更新代码以满足您的需要。但我希望这个答案能以某种方式帮助您,使您也能够使用任何其他库。如果此库的修复过于广泛,请进行 Google 搜索并找到更现代的库。

当库已经位于您的 vendor 文件夹中时,您应该简单地使用 composer 的 autoload.php 文件(默认情况下 laravel 不使用它吗?)。

所以只需将依赖项添加到您的 composer.json(如果尚未完成):

"require": {
    "setasign/fpdf": "^1.8",
    "setasign/fpdi": "^2.2",
    "setasign/fpdi-protection": "^2.0"
}

更新通过composer update和:

<?php
use setasign\FpdiProtection\FpdiProtection;

require_once('vendor/autoload.php');

$pdf = new FpdiProtection();
...