PHPのバージョンを7に上げたらPDFファイルを生成するライブラリでエラーが出たので修正した話し

  • 2020.02.06
  • PHP

使っているライブラリは、PHPファイルを見ると、
FPDF – Varsion1.6
FPDI – Version 1.3
FPDF_TPL – Version 1.1.3
と書いているので、これだと思います。

まずは、最初は、バージョンアップした時によく出るお決まりのこのエラー

Parse error: syntax error, unexpected ‘new’ (T_NEW) 

これは

=& new WP_Query();

となっているのを、&を取って

= new WP_Query();

にすれば、解消できる。

なので、=& new  で検索して、該当するコードを探して修正。

該当する箇所は以下の4か所

pdf\fpdi.php 
90行目 $this->parsers[$fn] = & new fpdi_pdf_parser($fn, $this);

pdf\fpdi_pdf_parser.php
244行目 $decoder = & new $filterName($this->fpdi);

pdf\pdf_parser.php
102行目 $this->c = & new pdf_context($this->f);
437行目 $tmp_c = & new pdf_context($this->f);

次に、

Fatal error: Uncaught Error: Call to undefined function set_magic_quotes_runtime()

てなエラーがでるので、「set_magic_quotes_runtime」でWebで検索すると、こちらの情報が見つかります。 https://www.php.net/manual/ja/function.set-magic-quotes-runtime.php

この関数は PHP 5.3.0 で 非推奨 となり、 PHP 7.0.0 で 削除 されました。

とのことなので、該当する箇所のコードを

if(version_compare(PHP_VERSION, '5.3.0', '<')){
    	set_magic_quotes_runtime(0);
}

のように変更します。該当するコードは、pdf\japanese.phpに 344行目あたりと、370行目あたりの2ヵ所ありました。

それを修正すると

Warning: Declaration of FPDF_TPL::Image($file, $x, $y, $w = 0, $h = 0, $type = ”, $link = ”, $align = ”, $resize = false, $dpi = 300, $palign = ”, $ismask = false, $imgmask = false, $border = 0) should be compatible with FPDF::Image($file, $x = NULL, $y = NULL, $w = 0, $h = 0, $type = ”, $link = ”) in /usr/home/ ********** /html/wp-content/plugins/products-editor/lib/pdf/fpdf_tpl.php on line 409

Warning: Cannot modify header information – headers already sent by (output started at /usr/home/**********/html/wp-content/plugins/products-editor/lib/pdf/fpdf_tpl.php:409) in /usr/home/ ********** /html/wp-content/plugins/products-editor/lib/pdf/fpdf.php on line 1017

の2つの「Warning」が残ります。2つ目の「Warning」は、PHPコードに空行とかがると出てたんだけど、今回は1つ目の「Warning」の文字列が原因です。

「Warning」は 「Error」 とはことなり、警告なので出てもプログラムは動くので、とりあえず非表示にします。

なので、pdf/fpdf.php の頭に

error_reporting(E_ERROR | E_PARSE);

と書いて、Warningは表示しないようにしました。

これで、出来上がりです。