MENU

JINのサイトで「user_agent = isset(_SERVER[“HTTP_USER_AGENT”]) 」的なエラーが出る問題。

「テーマJIN、一世を風靡したもののぶっちゃけその後のサポート(アップデート)とかがわりとダメ。JIN-Rが出たあとはもっとダメ。できることならSWELLにすべし。」

と言いつつかくいう自分もJINを愛用しているサイトがあり、表題のエラーが出てました。

調べたところ、PHP8.xx台に対応していないのが原因っぽいので、暫定対処はPHPのVerを7.xx台に直すことです。

→本格対処しました。(function.phpを一文変えた)

以下でもう少しだけ詳しく解説します。

できることならSWELLにかえよう。↓

>>WordPressテーマ「SWELL」

目次

トップページのグローバルメニューやサイドバーに「$user_agent = isset($_SERVER[“HTTP_USER_AGENT”]) ? $_SERVER[“HTTP_USER_AGENT”]」が出る

久々に運営サイトにアクセスすると、トップページのグローバルメニューとサイドバーに以下のエラーが出ている。

全文だと以下の通り。

Warning: Undefined array key “HTTP_USER_AGENT” in /home/ドメイン名/wp-content/themes/jin/functions.php on line 4

Warning : Undefined array key “HTTP_USER_AGENT” in /home/ドメイン名/wp-content/themes/jin/functions.php on line 4

Xサーバーだと、ドメイン名のあとにpublic〜などが入るかもですが、要はJINのfunctions.phpの四行目でエラーが出てるということです。

ただ自分の場合は子テーマを使っていてJIN本体には手を入れていなかったので、なぜに??という感じでした。

そこでChatGPTに見解を尋ねます。

結果↓

このエラーは、$_SERVER["HTTP_USER_AGENT"] にアクセスしようとした際に、"HTTP_USER_AGENT" キーが存在しないため発生しています。

エラーの原因

PHP 8以降では、存在しない配列キーにアクセスすると “Undefined array key” の警告が出るようになりました。
このエラーは、$_SERVER["HTTP_USER_AGENT"] が存在しない場合に発生する ことを意味します。

$_SERVER["HTTP_USER_AGENT"] は通常、ユーザーのブラウザ情報を含んでいますが、以下の理由で存在しない場合があります:

  1. サーバー環境の設定
    • HTTP_USER_AGENT がリクエストヘッダーに含まれていない
    • 特定のサーバー設定やセキュリティ対策で削除されている
  2. ボットやクローラーのアクセス
    • 一部のボットやクローラーは User-Agent を送信しない
  3. PHPの設定変更
    • $_SERVER の変数に HTTP_USER_AGENT が含まれない場合

この回答からわかることとして、エラーの内容の通り、「$_SERVER["HTTP_USER_AGENT"] にアクセスしようとした際に、"HTTP_USER_AGENT" キーが存在しないため発生しています。」というのが直接的な原因。

で、それが起きてるのはなんでかって話で、3つの可能性が挙げられました。

まあ3ですね。

「$_SERVER[“HTTP_USER_AGENT”] 〜」エラーの暫定対処

解決策としてシンプルなのは、PHPのバージョンを下げることです。

レンタルサーバの管理画面からPHPの選択画面があると思うのでそこで変えましょう。

なんかPHP7台と8台はけっこう違うらしく、こういうことはよくあるそうです。

やがて7は古すぎ!となりますが、今はそれでも可。(応答スピードは少し遅くなる)

あとは、GPTがいうにはエラーが出てる箇所をスルーしてしまうのもありとのこと。

ただこれは何が起こるかわからない(何に使ってるのかわからない民には)ので、リスクがあります。

修正例

functions.php の4行目にある $_SERVER["HTTP_USER_AGENT"] を修正します。

修正前
phpコピーする編集する$user_agent = $_SERVER["HTTP_USER_AGENT"];
修正後
phpコピーする編集する$user_agent = isset($_SERVER["HTTP_USER_AGENT"]) ? $_SERVER["HTTP_USER_AGENT"] : "";

または

phpコピーする編集する$user_agent = $_SERVER["HTTP_USER_AGENT"] ?? "";

(PHP 7.0 以降の「Null合体演算子(??)」を利用)

わかってる人はこれをしてみるのもあり。

「$_SERVER[“HTTP_USER_AGENT”] 〜」エラーの本格対処(完全解決策)

なんかその後PHP7でもまた出てたりしたので本格対処しました。

本格対処1

といってもまあたいしたことはしてなくてfunction.phpで1文変えただけ。

該当部分を以下に変える↓

$ua = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '';

処置としては、見つからないでエラーになってる部分を、見つからないなら何も入れず返せとしただけ。

元々↓

$ua = $_SERVER['HTTP_USER_AGENT'];

この部分は、ユーザーエージェント情報をもとに、スマホかどうかを判定するためのコードらしいんですが、一部のアクセスでは、$_SERVER[‘HTTP_USER_AGENT’] が存在しない場合があり、そのとき「未定義インデックス」エラーが発生してるみたい。

なんか影響度は低そうなので上のようにしました。

・・多分これPCでしか出ないやつですね。(なのでなかなか気づけなかったのかも)

本格たいしょ2

1を入れた後でテーマのアップデートかなんかで(?)また出たので子テーマに入れ直しました。

<?php
// UA が無い実行環境(WP-CLI / cron / 監視)で JIN の is_mobile() が警告を出さないように保護
if ( ! isset($_SERVER['HTTP_USER_AGENT']) ) {
$_SERVER['HTTP_USER_AGENT'] = '';
}

これを子テーマのfunction.phpに入れた。他にもコード入ってたので冒頭にこれを入れた感じ。そしてキャッシュを削除したら消えた!

子テーマなので今度は大丈夫なはず。(前のどっちに入れたか覚えてないんだけど)

よくある質問

これについてのよくある質問。

PHP7台にしたが効かない

なんかPHP7.4にしたのにトップページだけ直んねえんだわ・・って者、貴様はキャッシュを確認しろ。

  • キャッシュプラグイン入れてたらそこでclear chche的なのを
  • Xサーバーならサーバキャッシュを消せ

以上。

ユーザー側だが、このエラーが出ているサイトは信用できる?

ウイルスとかそういうのではないから危険性はない。

しかし、自分のサイトを定期的に確認していないため、情報が最新でなく、力を入れていない可能性が高い。

追記:一度PHP8にしてから7に戻して再度8.2にしたらエラー消えた

やっぱりPHPを非推奨の状態にしておくのはよくないかーと思って、再度PHP8.2にしてみたらエラー出ませんでした。

そういえば別のJINのサイトでもエラー出てないなとも思い、理由違ったかも。

謎ですがとりあえずN=1ではPHP上げ下げしたら直りました。

(サーバキャッシュも消したから多分大丈夫なはず・・)

終わりに

JINなんとかしてくれ。1000記事ある俺のサイトはJINとともに死ぬしかないのか・・。

SWELLしかかたん(アフィリンク)↓

>>WordPressテーマ「SWELL」

・・俺のサイトはもう手遅れだからここに残る(JINと心中する)ぜ!だが初心者ブロガー、お前はまだ助かる。いけ!(SWELLへ)

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次