0
0

Zabbix Server 6.2.9のWebコンソールセットアップ時に、PHPのエラー(AH01071)「Trying to access array offset on value of type null in ~~/CCookieSession.php」が発生

Last updated at Posted at 2024-07-13

はじめに

自宅PCのVirtual BoxにOracle Linux 8.10を構築したのち、
下記のサイトを参考にZabbix Server 6.2.9をインストールしました。

そして、ブラウザからWebコンソールをセットアップしようとしたのですが、
表題のエラーが発生し解決まで結構時間がかかりました。

本記事では、私がとった対応策を書き残します。

環境

  • OSバージョン:Oracle Linux 8.10
  • DBバージョン:MySQL 8.0.36
  • ミドルウェアバージョン:PHP 7.4.33、Apache 2.4.37
  • Zabbixバージョン:zabbix server 6.2.9、zabbix agent 6.2.9

発生した事象および対応策

発生した事象

上記の記事に従い、無事にZabbix Serverおよび、Zabbix Agentのインストールまで
完了したので、ブラウザからhttp://[ZabbixサーバのIP]/zabbixにアクセスしました。

上記紹介した2つ目の記事にあるように、「言語を選択」→「前提条件のチェック」→
「データベースの接続設定」、といった流れでセットアップを進めましたが、
「次のステップ」ボタンを押した後にタイムアウトが発生しました。
少し時間をおいても解決しませんでした。

ちなみに、Zabbix Serverの80番、162番ポートはfirewall-cmdで開けており、
クライアント⇔Zabbix Server間のネットワーク疎通に問題はなかったです。

少し悩んだのち、/var/log/httpd/error_logを確認しました。

error_log(抜粋)
[Thu Jul 11 21:13:16.150358 2024] [proxy_fcgi:error] [pid 1667:tid 140094543472384] [cl
ient 192.168.56.1:58728] AH01071: Got error 'PHP message: PHP Notice:  Trying to access
 array offset on value of type null in /usr/share/zabbix/include/classes/core/CCookieSe
ssion.php on line 194', referer: http://192.168.56.2/zabbix/setup.php

私はPHPの知識はないに等しいので、下記の記事を読んで何となくレベルでしか
理解できませんでしたが、PHP7.4からは中身が空の変数にアクセスする際の
チェックが厳しくなり、本事象が発生しているようです。

詳しい方がいたら教えてくださいm(__)m

対応策

長いこと調査した結果、下記のサイトにたどり着き、CCookieSession.php、
ZBase.php、CWebUser.phpの中身を直接修正しました。

Priority:Majorとあるので、どうやら本事象はバージョン6での結構大きなバグみたいですね。
Fixedとあるので既に解決済みのようですが、phpファイルを直接修正するというのは
本当にあっているんでしょうか・・・

CCookieSession.phpの修正
[root@localhost ~]# diff /usr/share/zabbix/include/classes/core/CCookieSession.php /usr/share/zabbix/include/classes/core/CCookieSession.php_20240713 
33,37d32
<          * Cookie lifetime.
< 	 */
< 	public $lifetime = 0;
< 
<         /**
131,135c126,128
< #		return CCookieHelper::set(self::COOKIE_NAME, $data,
< #			$this->isAutologinEnabled() ? time() + SEC_PER_MONTH : 0
< #		);
< 	
< 		return CCookieHelper::set(self::COOKIE_NAME, $data, $this->lifetime);
---
> 		return CCookieHelper::set(self::COOKIE_NAME, $data,
> 			$this->isAutologinEnabled() ? time() + SEC_PER_MONTH : 0
> 		);
199,202c192,195
< #
< #	protected function isAutologinEnabled(): bool {
< #		return (CWebUser::$data['autologin'] === '1');
< #	}
---
> 
> 	protected function isAutologinEnabled(): bool {
> 		return (CWebUser::$data['autologin'] === '1');
> 	}
[root@localhost ~]# 
ZBase.phpの修正
[root@localhost ~]# diff /usr/share/zabbix/include/classes/core/ZBase.php /usr/share/zabbix/include/classes/core/ZBase.php_20240713 
560,563d559
< 		if (CWebUser::isAutologinEnabled()){
< 			$session->lifetime = time() + SEC_PER_MONTH;
< 		}
< 
[root@localhost ~]# 
CWebUser.phpの修正
[root@localhost ~]# diff /usr/share/zabbix/include/classes/user/CWebUser.php /usr/share/zabbix/include/classes/user/CWebUser.php_20240713 
244,252d243
< 
< 	/**
< 	 * Check whether user has enabled autologin.
< 	 *
< 	 * @return bool
< 	 */
< 	public static function isAutologinEnabled():bool {
< 		return (CWebUser::$data['autologin'] === '1');
< 	}
[root@localhost ~]# 

この修正で合っているのか自信はありませんでしたが、
修正後、OSごと再起動してブラウザからhttp://[ZabbixサーバのIP]/zabbixに
アクセスし、コンソールを設定、Adminでログインすると・・・

image.png

正常にコンソールを起動できました!!

参考資料

再度お世話になったサイトを掲載しておきます

おわりに

PHPを全く知らない状態から、分からないなりに推測してZabbix Serverの
コンソールを起動するところまで何とかたどり着けました。。
この記事で私がやっている内容に詳しい方、一言ある方がいたら
ご教示いただきたいくらいです。

よくわからない事象でも、持っている知識を総動員して調査することの
大切さを学んだ気がします。今回でいうと、ネットワークに問題がなさそうなのに
ブラウザからアクセスできない→Apacheのエラーログを確認してみよう、
という定石を実行できた点はよかったと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0