PHP8.0においてphpquery-onefileより出るエラーの解決

2021年8月19日未分類

Webスクレイピング等で使用する「phpquery-onefile.php」ですが、当方環境(PHP8.0)にてエラーが出ました。
表示されたエラーは

原文
Fatal error: Array and string offset access syntax with curly braces is no longer supported in /home/xs599576/playguide2.net/public_html/ff14/wp-content/themes/luxech/phpQuery-onefile.php on line 2171
日本語訳
致命的なエラー:中括弧を使用した配列および文字列オフセットアクセス構文は、2171 行の/home/xs599576/playguide2.net/public_html/ff14/wp-content/themes/luxech/phpQuery-onefile.phpでは サポートされなくなりました。

色々調べたのですがネット上に解決策が無く、WebエンジニアやPHPを長年やっている、上級者や中級者ならこの程度のエラーは簡単に解決可能でしょうが。コピペメインの私のような初心者は解決が難しいと思われますので記載しておきます。

下記のようにやってみてください。

素早い修正方法

  • PHPを7.4など前のバージョンに戻す。

PHP8.0以上のバージョンで動かす修正方法

  1. サーバーに保存してある「phpquery-onefile.php」をダウンロードなどして、バックアップ(安全のため、書き換えなどを行わないよう大事に保管しておいてください)。
  2. サーバーに保存してある「phpquery-onefile.php」を開いて、中身をコピー。
  3. 行番号が表示できるエディターなどに貼り付け。
  4. 下記のように書き換え。
  5. 編集した内容をサーバーに保存してある「phpquery-onefile.php」に上書き。保存。
  6. 実行してみて、問題なければOK。直らなければ、ダウンロードしたファイルをアップロードして元に戻す。

書き換え内容

2018行目

$a = $param{0};
 ↓
$a = $param[0];

2171行目

else if (mb_strlen($param) > 1 && $param{1} == 'n’)
 ↓
else if (mb_strlen($param) > 1 && $param[1] == 'n’)

2178行目

? $param{3}
 ↓
? $param[3]

2181行目

if ($b && $param{2} == “-“)
 ↓
if ($b && $param[2] == “-“)

なぜ書き換えが必要?

  • $param{1}
  • $param[1]

は、同じ意味になります。しかし、「$param{1}」は以前より非推奨の書き方でした。それが、PHP8.0より禁止となり、エラーが発生しています。
PHPはバージョンが上がる毎に、新機能を追加しながら、高速化も実現しています。
その過程で、断捨離が必要になり今回のようになったのでしょう。

また、「phpquery-onefile.php」は最新の物でも最終更新が2009年となっており、最近の流れを反映していません。そろそろ、私達も新しいライブラリに移動を検討したほうがいいかもしれませんね。