読者です 読者をやめる 読者になる 読者になる

uzullaがブログ

uzullaがブログです。

phpでsshしたいだけなんだけど、XAMPPを使ってる情弱(俺)には面倒臭い

phpからsshやscpをするのに、ssh2という拡張があるのですが、libssh2のバインディングなので、色々ネイティブなライブラリを入れたりとかしないといけない。
そう、peclという時点で、ウッってなったんですけど、まあ予想通り手間だったし、メモ

出オチ

XAMPPとか使うな!!!!!!


もうすこし細かいオチ

xamppのphpは32bitだから、peclでビルドする時や、libssh2をビルドする時にCFLAGに-arch i386指定しよう。
っていうかxamppとか情弱なものをつかわないほうがいい>俺>いやいや分かってて使う分には楽なんだよ>俺


俺の環境

まあ、私の環境が偏っているのですが、
・Snowleopard(64bit)
pecl(php)はXAMPP(32bit)
・libssh2がportsで入ってる(64bit)

という環境


細かい説明

この環境でなにも考えずに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 0

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 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

ということですね。

おわり。

*1:正しくは、pecl install channel://pecl.php.net/ssh2-0.11.3 だろう