このエラーは、数年前から使用しているスクリプト(invoiceplane)で何度も発生しますが、残念ながら作成者はこれを維持していません。
Message: Trying to access array offset on value of type null
私のサーバーはPHP 7.4にアップグレードされています。問題を修正し、スクリプトを自分で維持する方法を探しています。私はそれに非常に満足しています。
これはエラーを与える行にあるものです:
$len = $cOTLdata['char_data'] === null ? 0 : count($cOTLdata['char_data']);
$ cOTLdataが関数に渡されます。
public function trimOTLdata(&$cOTLdata, $Left = true, $Right = true)
{
$len = $cOTLdata['char_data'] === null ? 0 : count($cOTLdata['char_data']);
$nLeft = 0;
$nRight = 0;
//etc
mpdf btwに含まれていますが、githubリポジトリからファイルを上書きしただけではエラーは修正されませんでした。
これは、$cOTLdata
はnullではありませんが、インデックス'char_data'
存在しません。 PHPの以前のバージョンは、そのような間違いに対してそれほど厳密ではなく、7.4がこれを行わない間、静かにエラー/通知を飲み込んでいた可能性があります。
インデックスが存在するかどうかを確認するには、 isset() を使用できます。
isset($cOTLdata['char_data'])
つまり、行は次のようになります。
$len = isset($cOTLdata['char_data']) ? count($cOTLdata['char_data']) : 0;
=== nullは本質的にはissetが既に行っているものです(ただし、正の場合)ので、三項演算子のthenとelseのケースを切り替えました。