Apache＋PHP＋PHPExcel1.8.0＋Sybaseの環境設定のメモ(Redhat8.5)

#概要
今回は以下の環境構築にてあってたことをメモします。

■環境構築
OS : Redhat8.5
言語 : PHP7.4.X
WEBサーバ：Apache2.4.X
Excel LIB : PHPExcel1.8.0
テンプレートエンジン : Smarty4.0.0

# Apacheの設定ディレクトリについて
Linuxサーバで権限がないと編集ができないので、以下のディレクト及び設定ファイルについて
権限を付与していただきました。

■ApacheのFireWall設定
Apacheのインストールした後、一度実行が必要なコマンドです。

~~~bash
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --reload
~~~

■sudoコマンドを別途で申請が必要
superユーザから実行できるコマンドを制限して定義します。
※定義方法は分からないです。＞。＜後で追記します。

~~~bash
sudo /usr/sbin/apachectl restart
sudo /usr/sbin/httpd -t
sudo /usr/sbin/httpd -S
sudo /usr/sbin/httpd -M
sudo /usr/sbin/httpd -L
sudo /usr/sbin/httpd -v
sudo /usr/bin/systemctl start httpd
sudo /usr/bin/systemctl stop httpd
sudo /usr/bin/systemctl restart httpd
~~~

★phpfpmがインストールされている場合、一緒に再起動する必要がありましたので、追記しました。★

~~~bash
sudo /usr/bin/systemctl start php-fpm.service
sudo /usr/bin/systemctl stop php-fpm.service
sudo /usr/bin/systemctl restart php-fpm.service
~~~

■ディレクトリ権限付与
以下のディレクトリをシステムユーザID（supser）に権限を付与します。

/etc/httpd/conf
/etc/httpd/conf.d
/etc/httpd/conf.modules.d
→　下記のコマンドでディレクトリの所有者・グループを変更します。
sudo chgrp super /etc/httpd/conf
sudo chown super /etc/httpd/conf
sudo chgrp -R super /etc/httpd/conf.d
sudo chown -R super /etc/httpd/conf.d
sudo chgrp -R super /etc/httpd/conf.modules.d
sudo chown -R super /etc/httpd/conf.modules.d

■設定ファイル修正
・httpd.conf
Apacheを起動する際にapacheユーザではなく違うsupuerユーザで起動したい場合は、次の設定を変更します。
他の設定については各環境の設定に応じて変更します。

~~~bash
User apache
Group apache
↓
User super
Group super
~~~

・userdir.conf
superユーザディレクトリに配置したWEBページがアクセスできるようにするため、次の設定を変更します。

~~~bash
UserDir disabled
#UserDir public_html
↓
#UserDir disabled
UserDir public_html
~~~~

・00-mpm.conf
Apacheの起動ユーザを変更する場合は、次の設定を変更します。

~~~bash
LoadModule mpm_prefork_module modules/mod_prefork.so
#LoadModule mpm_event_module modules/mod_mpm_event.so
↓
LoadModule mpm_prefork_module modules/mod_prefork.so
#LoadModule mpm_event_module modules/mod_mpm_event.so
~~~

・phpfpmのwww.conf
Apacheの起動ユーザを変更する場合は、次の設定を変更します。

~~~bash
listen.acl_users = apache,nginx
php_admin_value[error_log] = /var/log/phpfpm/www-error.log
↓
listen.acl_users = apache,nginx,super
php_admin_value[error_log] = /home/super/log/phpfpm/www-error.log
~~~

・mod_security.conf
このパッケージがインストールされていることでAJAXがセキュリティ制限で正しく動作しない場合がありましたので、次の設定を変更します。

~~~bash
SecRuleEngine On
↓
SecRuleEngine off
~~~

・ログディレクトリのアクセス権限を付与
superユーザがアクセスできるようにディレクトリの所有者変更が必要

~~~bash
sudo chown super /var/log
~~~

# PHP7.4 + PHPExcel1.8.0にてExcelダウンロードエラーが発生した場合
実はこのPHPExcel1.8.0は維持保守が中断されて新しいLIBに変更する必要がありましたが、
スケージュールも厳しかったので、これをこのまま利用することになりました。
環境構築後、Excelダウンロード機能でエラーが発生して以下のソースを変更で解決しました。

・DefaultValueBinder.php
下記のVI編集を利用して82行の条件を変更します。

vi PHPExcel-1.8/Classes/PHPExcel/Cell/DefaultValueBinder.php

~~~bash
} elseif *$pValue{0} === '=') && strlen($pValue) > 1) {
↓
} elseif (0 === strpos($pValue, '=') && strlen($pValue) > 1) {
~~~


# Sybaseの文字化けについて
既存のPHP5.5.XではCTS？ライブラリ関数ではDB接続する際に文字コードを指定することができましたが、
PHP7.Xからはその関数が使えなくなりましたので、新しい環境は次の設定が必要でした。
※Sybaseの文字コードは「eucjis」であること。

・odbc.ini
文字コードの設定のため、次の設定を追記します。
下記の設定がないと日本語の文字が文字化けになりましたので、追加が必要です。

~~~bash
vi /etc/odbc.ini

[XXX_XXX_XXX]  #PHPで接続するODBC名を定義
Description = Sybase ODBC Data Source
Driver = Adaptive Server Enterprise #odbcinst.iniに定義されているDriver名を指定
Server = XXXX.XXXX.XXXX #Sybaseの接続ホース名
Port = 4100 #Sybaseのポート番号
Database = XXXXX #ディフォルトで接続するDB名を指定
Charset = NoConversions #★この設定が必要★
UseCursor = 1
~~~

# 終わりに
色々メモとして記載しましたが、やっぱり新しい環境にバージョンアップによる構築は辛いですね。
はじめてSybaseも使うことになっていますが、まだ慣れてないです。
CSEツールを利用する手間もありますが、これも使い方が忘れました。WW
次回はこのツールを利用してDB接続する手順及び使い方を調べようかと思っています。
今日はここまです。ありがとうございました。