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

## はじめに

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

- [【ZABBIX】Oracle Linux 8 へ ZABBIX6.2 をインストールする](https://www.startpassion.life/entry/2022/09/04/231501)
- [監視ツール「zabbix-6-4」を構築してみました！](https://ひとりでできるもん.com/2023/12/26/%E7%9B%A3%E8%A6%96%E3%83%84%E3%83%BC%E3%83%AB%E3%80%8Czabbix-6-4%E3%80%8D%E3%82%92%E6%A7%8B%E7%AF%89%E3%81%97%E3%81%A6%E3%81%BF%E3%81%BE%E3%81%97%E3%81%9F%EF%BC%81/?cn-reloaded=1)

そして、ブラウザから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を確認しました。

```Bash: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からは中身が空の変数にアクセスする際の
チェックが厳しくなり、本事象が発生しているようです。

- [「Acquia Lightning」のインストール時にエラーメッセージ「Notice: Trying to access array offset on value of type null」が出力された。（Drupal 8）](https://websas.jp/column/415)
- [phpでTrying to access array offset on value of type null エラーと軽めの対処法](https://qiita.com/naokikobashi/items/759a4e9bebc72cd9b062)

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


### 対応策

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

- [v6.0.22 install fails DB connect @ install, error: "Trying to access array offset on value of type null in .../CCookieSession.php"](https://support.zabbix.com/browse/ZBX-23567)
- [d63da1229a3](https://git.zabbix.com/projects/ZBX/repos/zabbix/commits/d63da1229a308906123f9daf8ab79428fff73dfd)　←phpファイルの具体的な修正内容が載っています

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

```Bash: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 ~]# 
```


```Bash: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 ~]# 
```

```Bash: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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3837246/4841ab06-8711-cb13-4884-915aea067276.png)

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

## 参考資料

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

- [【ZABBIX】Oracle Linux 8 へ ZABBIX6.2 をインストールする](https://www.startpassion.life/entry/2022/09/04/231501)
- [監視ツール「zabbix-6-4」を構築してみました！](https://ひとりでできるもん.com/2023/12/26/%E7%9B%A3%E8%A6%96%E3%83%84%E3%83%BC%E3%83%AB%E3%80%8Czabbix-6-4%E3%80%8D%E3%82%92%E6%A7%8B%E7%AF%89%E3%81%97%E3%81%A6%E3%81%BF%E3%81%BE%E3%81%97%E3%81%9F%EF%BC%81/?cn-reloaded=1)
-  [v6.0.22 install fails DB connect @ install, error: "Trying to access array offset on value of type null in .../CCookieSession.php"](https://support.zabbix.com/browse/ZBX-23567)
- [d63da1229a3](https://git.zabbix.com/projects/ZBX/repos/zabbix/commits/d63da1229a308906123f9daf8ab79428fff73dfd)

## おわりに

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

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