「テーマJIN、一世を風靡したもののぶっちゃけその後のサポート(アップデート)とかがわりとダメ。JIN-Rが出たあとはもっとダメ。できることならSWELLにすべし。」
と言いつつかくいう自分もJINを愛用しているサイトがあり、表題のエラーが出てました。
調べたところ、PHP8.xx台に対応していないのが原因っぽいので、暫定対処はPHPのVerを7.xx台に直すことです。
→本格対処しました。(function.phpを一文変えた)
以下でもう少しだけ詳しく解説します。
できることなら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"]は通常、ユーザーのブラウザ情報を含んでいますが、以下の理由で存在しない場合があります:
- サーバー環境の設定
HTTP_USER_AGENTがリクエストヘッダーに含まれていない- 特定のサーバー設定やセキュリティ対策で削除されている
- ボットやクローラーのアクセス
- 一部のボットやクローラーは
User-Agentを送信しない- 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しかかたん(アフィリンク)↓
・・俺のサイトはもう手遅れだからここに残る(JINと心中する)ぜ!だが初心者ブロガー、お前はまだ助かる。いけ!(SWELLへ)
コメント