0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

timezoneデータベースをPHP on CentOS環境で使えるようになるまで

Last updated at Posted at 2022-01-04

今日、PHPのライブラリ(geo-timezone)を使って、緯度経度からTimezoneを拾えるようにしました。

かなりニッチな内容なので、あまり多くの人に役に立たないかもしれませんが、
自分がまた同じことをやる時に、手順を覚えている自信がゼロだったので記録を残します。

また、ライブラリがDebian系での利用が想定されているようで、そこでも少し躓いたのでポイントをメモします。

まず、composerでrequire

お決まりの作業です。

composer require minube/geo-timezone

次に、vendor配下のライブラリディレクトリ内で複数の作業

vendor/minube/geo-timezone/bin
に行きます。

そこで、 compile-geos.shを実行すれば良い、というので、
実行するも何かがうまくいかなくてしばし悩みました。

ふとshの中身を読んでみると、
apt-get install php7.0-dev && ....
などと書かれていて、Debian系向けとわかり、躓きポイント判明。

apt-getしようとしているphp7.0-devからphp7.0-mbstringまでをyumすると良いかと思いますが、
自分の環境では既に導入済みなのでパスすることに。

curl -s -O http://download.osgeo.org/geos/geos-3.6.1.tar.bz2
の行からを実行すると、無事installが進みました。

その次の
git clone https://git.osgeo.org/gogs/geos/php-geos.git
も実行して、無事install終了(っぽい)。

.soファイルを.iniファイルで読み込ませる?

README.mdには.soファイルを.iniファイルで読み込ませるべし、と書いてあるのですが、
自分の環境では不要でした。
動いたし、ま、いっかということで。

データベース作成コードを走らせてみる

Githubのリポジトリページにある解説文の通り、
UpdaterData()というメソッドを走らせてみましたが、なぜか途中で止まる🤔

ini_set('memory_limit', '-1');
を設定してやると無事進みました。

自分は今、少し懐かしいVagrant環境でこの作業を実行しているのですが、
「メモリがexhausted!」と怒られるので、潔くメモリリミット撤廃。
ローカルなんでキニシナイ。

で、最終的に、以下のようなコードを書き、CLIから直接PHPコマンドで叩きました。

use GeoTimeZone\UpdaterData;

include_once ('../../vendor/autoload.php');

ini_set('memory_limit', '-1');

$updater = new UpdaterData("./data/");
$updater->updateData();

READMEには「終わるまで2~3時間かかるよ」なんて恐ろしいことが書いてあります。
「マジかよ」と呟きながら、シューシュー言うCPUの音を聞きながら、この備忘録を書いています。

終わりに

このライブラリ、元はnode-geo-tzとか、timezone-boundary-builderがベースになっていて、PHP向けにwrapperを作ってくださった様子。 素晴らしい。
これで(きっと)無事、世界のTimezoneを、サマータイムとか歴史的経緯とか国内に複数Zoneを持つ状況とか気にせず、しっかり取得できそうです。
数々のcontributorの皆様、ありがとう!

あとは、DBの完成を待つばかり...

(最新版のDBを時々作り替える必要があるよ、とか恐ろしいことが書いてあるけど、見なかったことにしたい)

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?