記念すべき初投稿、
いろいろググっても見つからなくて、
だいぶ自力でやってインストール自体は成功したものの、
肝心な使い方がよくわからんというか
これ以上無理しなくていいか、と諦めたので、
腹いせがてら作業メモとして残しておくことに。
PHP-Git2 とは
なんと php からダイレクトに( exec や system ではなく)、
Git コマンドが実行できるらしいPECL拡張モジュール。
その中身は libgit2 というライブラリらしい。
諸事情あって必要になったので入れようと思ったのだが、
参考にした以下の情報の通りに作業してもなんかエラーで止まったり、
無事に入ったはずなのに phpinfo() で見てもロードしてない?!てなったり。
PHP で git を使うライブラリ "PHP-Git2" を CentOS 環境にインストールしてみた
PHP bindings for libgit2
はて、なんでやと思ったら、入れようとしてる環境が php7 だからだったんじゃないかと。
んで試行錯誤してるうちにようやく「インストールは」無事にできた。
php7 で使える(っぽい?) PHP-Git2 を入れる
順番に作業をメモ。
上記のGitHubリポジトリではなく、別の人がつくったphp7用のソースをダウンロードする。
New libgit2 bindings for PHP
[root@host ~] git clone https://github.com/MagicalTux/php-git2
[root@host ~] cd php-git2
[root@host php-git2] ./libgit2_build.h
[root@host php-git2] phpize
[root@host php-git2] ./configure
[root@host php-git2] make
[root@host php-git2] make install
しかし、自分の環境では make の段階でエラーが出て失敗。
/bin/ld: cannot find -lhttp_parser
/bin/ld: cannot find -lcurl
collect2: error: ld returned 1 exit status
えー、http_parser とか curl なんて普通に入ってるしなんで・・・?
とここでしばらく格闘し、どうやらそれぞれの追加パッケージを入れれば
いけそうな予感がしたので入れる。
[root@host ~] yum -y install http-parser-devel.x86_64 libcurl-devel.x86_64
そして改めて make すると、
Build complete.
Don't forget to run 'make test'.
いけた!
いざ make install!
そして .ini を書く!
extension=git2.so
そして php-fpm を reload して phpinfo() で確認!
・・・で、一般的にはロードできてるはず。
自分の環境ではそれでもロードされていなかった。
php 複数バージョン同居環境の対応
なぜかというと、
CentOS7 ではあるものの、KUSANAGI の AMI によるインスタンスだったので、
php7 のための仕込みが必要なのであった。
KUSANAGI や複数バージョンの php を同居させてる場合、
[root@host ~] git clone https://github.com/MagicalTux/php-git2
[root@host ~] cd php-git2
[root@host php-git2] ./libgit2_build.h
[root@host php-git2] /usr/local/php7/bin/phpize
[root@host php-git2] ./configure --with-php-config=/usr/local/php7/bin/php-config
[root@host php-git2] make
[root@host php-git2] make install
といった具合に phpize や php-config の場所を指定してあげる必要がある。
同じく .ini ファイルも、
/etc/php.d/git2.ini
ではなく
/etc/php7.d/extensions/git2.ini
等の、php7 用ディレクトリに置かないといけないケースもある。
というか KUSANAGI はそうだった。
これにより、自分の環境でも無事「git2.so のインストールとロード」は完了した。
んで、実際にこれを使ったスクリプトを書こうとまたもや試行錯誤したものの、
ドキュメント類があまりない上に PHP-Git2 も libgit2 も C で書かれてて
いまいち追いかけきれぬので、
結局お蔵入りになりましたとさ。。。
ただ、C がもりもり書ける人だったら、
大した量でもないし全部読めば使い方は把握できると思う。