【学習メモ】 CentOS6.10とMySQL5.6.40とphp7.2.4でPHPのenable-zipオプションを付けるとconfigureでoff_tのエラー

# はじめに

```--enable-zip ```のオプションを付けるとconfigureでエラーが出ていましたが、以下で解決しました。

```
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
yum --enablerepo=remi install libzip-last-devel
yum install libxslt-devel
```

MySQLはソースインストールしておりconfigure前に```export LD_LIBRARY_PATH=/usr/local/mysql/lib```を実行しています。

環境
CentOS6.10, Apache2.4.34, PHP7.2.10, MySql5.6.41

# エラーの内容
```
 - checking size of short... (cached) 2
 - checking size of int... (cached) 4
 - checking size of long... (cached) 8
 - checking size of long long... (cached) 8
 - checking size of off_t... 0
 - configure: error: off_t undefined; check your library configuration
```

参考資料
[Bug #68302 impossible to compile php with zip support(bugs.php.net)](https://bugs.php.net/bug.php?id=68302)

# やってだめだったこと
### libzipのインストール
```yum remove libzip```でアンインストールしたあと、[libzip](https://github.com/nih-at/libzip/releases)の1.2をインストール。
2018年9月現在最新の1.5は、CentOS6.10でyumインストールできるcmakeのバージョンでは古いと言われてしまう。

```
cd /usr/local/src
wget https://github.com/nih-at/libzip/archive/rel-1-2-0.tar.gz
tar xf rel-1-2-0.tar.gz
cd libzip-rel-1-2-0
mkdir build
cd build
cmake ..
make && make install
```

# うまくいったこと
### libzipのインストール(その2)

libxslt-develも一緒に入れます。

```
yum remove libzip libzip-devel
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
yum --enablerepo=remi install libzip-last-devel libxlst-devel
```

CentOS7のとき

```
yum remove libzip libzip-devel
yum install -y epel-release
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
yum --enablerepo=remi install libzip-last-devel libxslt-devel
```

参考資料
[[メモ]PHP7.2.xインストール(blog.tkouen.mydns.jp)](https://blog.tkouen.mydns.jp/wordpress/567)


### その他コンパイルオプション
with-mysqliとwith-pdo-mysqlの設定でエラーの内容が変わりました。

#### NGパターン1
```
--with-mysqli=/usr/local/mysql/bin/mysql_config \
--with-pdo-mysql=/usr/local/mysql \
```
```
--with-mysqli=/usr/local/mysql/bin/mysql_config \
--with-pdo-mysql=/usr/local/mysql/mysql_config \
```
```
致命的エラー: my_global.h: そのようなファイルやディレクトリはありません
 #include <my_global.h>
                       ^                                                                                                            
コンパイルを停止しました。
make: *** [ext/mysqli/mysqli.lo] エラー 1
```

[mysql8.0.0(dev.mysql.com)のソース](https://dev.mysql.com/doc/dev/mysql-server/8.0.0/my__global_8h_source.html)には、includeの中にmy_global.hがあるようですが、現在のmysql8.0.13のソースを開いてもありません。[phpbugフォーラム(bugs.php.net)](https://bugs.php.net/bug.php?id=76282)にそれっぽいのがありました。libmysqlは使うなと。
PHPの[どのライブラリを選ぶか(php.net)](http://php.net/manual/ja/mysqlinfo.library.choosing.php)にもlibmysqlclientを使ってのコンパイルはおすすめしない方法とあります。

```./configure --help```では、```--with-pdo-mysql=DIR    PDO: MySQL support. DIR is the MySQL base directory```とディレクトリを指定するようありますが、PHPのライブラリ選択のコンパイル例では```--with-pdo-mysql=/path/to/mysql_config```とあるので指定してみましたが結果は一緒でした。

#### NGパターン2
```
--with-mysqli=mysqlnd \
--with-pdo-mysql=/usr/local/mysql/bin/mysql_config \
```
```
 エラー: 不明な型名 ‘my_bool’ です                          
  my_bool     *out_null;
  ^                                                                                                                                 
make: *** [ext/pdo_mysql/pdo_mysql.lo] エラー 1
```

### OKパターン
当然といえば当然ですが…

```
--with-mysqli=/usr/local/mysql/bin/mysql_config \
--with-pdo-mysql=/usr/local/mysql/bin/mysql_config \
--with-mysql=/usr/local/mysql/bin/mysql_config \
```
```
--with-mysqli \
--with-pdo-mysql \
--with-mysql \
```
```
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-mysql=mysqlnd \
```



### 解決していないPHPコンパイル時のWarning
OpenSSL 1.0.2pをソースインストールしています。

```
/usr/bin/ld: warning: libcrypto.so.10, needed by /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../lib64/libnetsnmp.so, may conflict with libcrypto.so.1.0.0
/usr/bin/ld: warning: libcrypto.so.10, needed by /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../lib64/libnetsnmp.so, may conflict with libcrypto.so.1.0.0
/usr/bin/ld: warning: libssl.so.10, needed by /usr/lib64/libssh2.so.1, may conflict with libssl.so.1.0.0
/usr/bin/ld: warning: libcrypto.so.10, needed by /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../lib64/libnetsnmp.so, may conflict with libcrypto.so.1.0.0
/usr/bin/ld: warning: libcrypto.so.10, needed by /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../lib64/libnetsnmp.so, may conflict with libcrypto.so.1.0.0
/usr/bin/ld: warning: libssl.so.10, needed by /usr/lib64/libssh2.so.1, may conflict with libssl.so.1.0.0
Generating phar.php
/usr/bin/ld: warning: libcrypto.so.10, needed by /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../lib64/libnetsnmp.so, may conflict with libcrypto.so.1.0.0
/usr/bin/ld: warning: libcrypto.so.10, needed by /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../lib64/libnetsnmp.so, may conflict with libcrypto.so.1.0.0
/usr/bin/ld: warning: libssl.so.10, needed by /usr/lib64/libssh2.so.1, may conflict with libssl.so.1.0.0
Generating phar.phar
```