PHPのバージョンを8に上げたらPDFファイルを生成するライブラリでエラーが出たので修正した話し
- 2023.07.25
- PHP
以前、PHP7にバージョンアップした時の話を書いたんですけど、下の記事です。
今度は、PHP8にバージョンアップして、動かなくなったので修正した話です。
後、PHPのバージョンに関係ないですけど、PDFに配置する画像がJPEGでなくてPNGになると、「FPDF エラー:アルファ チャネルがサポートされていません:」とエラーがでるので、これも修復しないといけません。
それで、現在使っているライブラリーのバージョンが
FPDF – Varsion1.6 Date: 2008-08-03
FPDI – Version 1.3 Copyright 2004-2009 Setasign – Jan Slabon
FPDF_TPL – Version 1.1.3 Copyright 2004-2009 Setasign – Jan Slabon
で、随分古いので、まずはアップデートされたバージョンがないかWebで検索しました。
すると
FPDFはこちらの公式サイト http://www.fpdf.org/ で最新版(1.85)が入手できました。
FPDI こちら https://www.setasign.com/products/fpdi/downloads/ で入手できました。
そして、ライブラリを格納していたディレクトリのファイルを置き換えていきます。
日本語対応をするために、japanese.phpを使用していまして、そのjapanese.phpのrequire文を新しいバージョンのファイル名に変更します。
require(DIR . '/fpdi.php');
↓
require( __DIR__ . '/Fpdi.php');
FPDIのライブラリのファイルは、comporserってので、インストールできるみたいだけど、よくわからないので、PHPが出す「Classがない」のエラーを見ながら、require_onceでファイルを読み込んで対応していく。
Fatal error: Uncaught Error: Class ‘Fpdi’ not found ファイルを読み込んでいるのに類のエラーが出る。
最初は、よくわからなかったが、namespace setasign\Fpdi; のようにネームスペースを定義(設定?)しているからだった。
なので、
class PDF_Japanese extends \setasign\Fpdi\Fpdi
のようにクラスにアクセスすればよい。
このように、少しずつエラーを解消していったが、最後に(この時は最後かどうかわからなかったのだが)残ったエラーがこれ。
Fatal error: Uncaught Exception: FPDF error:
fpdf.php on line 273 で出てる
Fatal error: Uncaught Exceptionで検索をしても、有効な情報は見つからない。
それで、japanese.phpが古いままなので、アップデートされたバージョンがないかと「japanese.php」検索をしてみると、こちらのページが見つかった
こちらのページに書いてある「tFPDF」のファイルをダウンロードして、適用する。
http://www.fpdf.org/en/script/dl.php?id=92&f=zip
fpdf.phpを読み込んでいたのは、FpdfTpl.phpだったので、そのコードを下記のように変更
<?php
/**
* This file is part of FPDI
*
* @package setasign\Fpdi
* @copyright Copyright (c) 2020 Setasign GmbH & Co. KG (https://www.setasign.com)
* @license http://opensource.org/licenses/mit-license The MIT License
*/
namespace setasign\Fpdi;
require(__DIR__ . '/FpdfTplTrait.php');
//require(__DIR__ . '/fpdf.php'); を↓に変更
require( __DIR__ . '/tfpdf/tfpdf.php');
/**
* Class FpdfTpl
*
* This class adds a templating feature to FPDF.
*/
//class FpdfTpl extends \FPDF を↓に変更
class FpdfTpl extends \tFPDF
{
use FpdfTplTrait;
}
これで、エラーがなくなり解決
-
前の記事
Microsoft Office Access ユーザー別に閲覧権限を設定する 2023.04.18
-
次の記事
WordPressの固定ページや投稿など、post毎にwpautopを無効にする。 2023.10.24