phpでsshしたいだけなんだけど、XAMPPを使ってる情弱(俺)には面倒臭い
phpからsshやscpをするのに、ssh2という拡張があるのですが、libssh2のバインディングなので、色々ネイティブなライブラリを入れたりとかしないといけない。
そう、peclという時点で、ウッってなったんですけど、まあ予想通り手間だったし、メモ
出オチ
XAMPPとか使うな!!!!!!
もうすこし細かいオチ
xamppのphpは32bitだから、peclでビルドする時や、libssh2をビルドする時にCFLAGに-arch i386指定しよう。
っていうかxamppとか情弱なものをつかわないほうがいい>俺>いやいや分かってて使う分には楽なんだよ>俺
細かい説明
この環境でなにも考えずにpecl install ssh2とかやると*1、まずlibssh2が無いと怒られる。
じゃあ、という事で適当にportsでlibssh2をいれるとpeclは通る。
しかし、以下のような事を言われる。
PHP Warning: PHP Startup: Unable to load dynamic library '/Applications/XAMPP/xamppfiles/lib/php/php-5.3.1/extensions/no-debug-non-zts-20090626/ssh2.so' - dlopen(/Applications/XAMPP/xamppfiles/lib/php/php-5.3.1/extensions/no-debug-non-zts-20090626/ssh2.so, 9): no suitable image found. Did find:
/Applications/XAMPP/xamppfiles/lib/php/php-5.3.1/extensions/no-debug-non-zts-20090626/ssh2.so: mach-o, but wrong architecture in Unknown on line 0Warning: PHP Startup: Unable to load dynamic library '/Applications/XAMPP/xamppfiles/lib/php/php-5.3.1/extensions/no-debug-non-zts-20090626/ssh2.so' - dlopen(/Applications/XAMPP/xamppfiles/lib/php/php-5.3.1/extensions/no-debug-non-zts-20090626/ssh2.so, 9): no suitable image found. Did find:
/Applications/XAMPP/xamppfiles/lib/php/php-5.3.1/extensions/no-debug-non-zts-20090626/ssh2.so: mach-o, but wrong architecture in Unknown on line 0
作成されたssh2.soがオカシイと言われる、今君がビルドしたコードやで…?
まあ、これは作成されたバイナリのアーキティクチャが揃っていないのが原因ですね。
peclでarchを指定するのは世間一般とかわらず
CFLAGS="-arch i386" pecl install channel://pecl.php.net/ssh2-0.11.3
でOK。
しかしこれも多分通らない。
portsでなにも考えずにいれたら、当然libssh2が64bitなのでlibssh2も32bitでビルドしましょう…。
32bitのlibssh2とか、そのphp以外ではゴミでしかないので、/Applications/XAMPP/optの中とかに放り込んでおきましょう…。
つまり
# wget libssh2-1.4.2.tar.gz .
# tar xvzf libssh2-1.4.2.tar.gz
# cd libssh2-1.4.2
# mkdir /Applications/xampp/opt
# CFLAGS="-arch i386" ./configure --prefix=/Applications/xampp/opt
# make install
# CFLAGS="-arch i386" pecl install channel://pecl.php.net/ssh2-0.11.3
※途中のlibssh2場所指定では、/Applications/xampp/opt 指定
# vi /path/to/php.ini # add extension=ssh2.so
# php -i |grep ssh
ということですね。
おわり。