PHP:PECL::ssh2のインストール

PHPでssh2を使う必要が出てきた。
方法としては、PECL::ssh2をインストールしておけばよいらしい。
依存ライブラリとして、libssh2が必要なので、yumにてlibssh2をインストールしておく。
libssh2-develはいらないかもしれない。

yum -y install libssh2 libssh2-devel

その後、peclコマンドでssh2拡張をインストールする。

pecl install ssh2
downloading ssh2-0.11.0.tgz ...
Starting to download ssh2-0.11.0.tgz (22,884 bytes)
........done: 22,884 bytes
5 source files, building
running: phpize
Configuring for:
PHP Api Version:         20041225
Zend Module Api No:      20060613
Zend Extension Api No:   220060519
 1. libssh2 prefix? : /usr

1-1, 'all', 'abort', or Enter to continue: all # libssh2.soへのprefixが/usrではない場合、修正
libssh2 prefix? [/usr] : /usr/lib
 1. libssh2 prefix? : /usr/lib
1-1, 'all', 'abort', or Enter to continue: # 何も入力せずにenterを押す
# インストールが始まる
...
# インストール完了通知
Build process completed successfully
Installing '/usr/lib/php/modules/ssh2.so'
install ok: channel://pear.php.net/ssh2-0.11.0

ssh2.soがインストールされたので、権限を変更する

chmod 755 /usr/lib/php/modules/ssh2.so

php.iniを修正してextensionを組み込む。自分の環境では、extensionの組み込みが外部ファイル化してあったので、そちらを修正する。gd.iniとかをコピーしてssh2.iniを作り、それを修正した。その後は、apacheの再起動を行う。

cd /etc/php.d
cp gd.ini ssh2.ini
vi ssh2.ini
# gdをssh2に変更
extension=gd.so
↓
extension=ssh2.so
# 編集終了

# apacheの再起動
service httpd restart

これで、phpinfo()を確認したところ、ssh2が組み込まれていたのでOK!!


firebug: consoleがundefinedの場合

昨日書いたfirebugでのconsoleオブジェクトを使ったデバッグ方法ですが、firefoxにfirebugが入ってなかったり、IEだとconsoleオブジェクトが存在しないため、JavaScriptエラーになって処理が止まってしまいました…。なんちゅうことだ…。

このままだと、firebugがある場合だけ正常な動作をするアプリになってしまう!リリースするタイミングでconsole系のメソッド使ってるところを全部コメントアウトすればよいのかもしれないけれど、それはそれで面倒だし、なによりまたデバッグが必要になったときに困る!

解決策はないかな~とネットで探してみたら、まあ自分が考えていたような解決策とほぼ一致したので、じゃあそれでやってみるかと。

// consoleオブジェクトが未定義ならば
if(typeof console == 'undefined'){
  // 何も処理しないメソッドを持ったconsoleオブジェクトを定義する
  console = {
    log: function(){},
    debug: function(){},
    info: function(){},
    warn: function(){},
    error: function(){},
    assert: function(){}
  };
}

consoleオブジェクトが持つメソッドはこれらだけではないのだけれど、自分が使ってるメソッドだけとりあえず定義しておけば大丈夫なんじゃなかろうか?
とりあえずはこれでJavaScriptエラーで止まるということはなくなった。


WordPress: メルマガ用プラグイン調査メモ

仕事の関係で、メルマガを発行する方法を調査する必要が出てきた。
それをWordPressのプラグインで行う方法を調査中。
調査結果などをチョコチョコとメモしていく。

subscribe2というプラグインを使うのがよさそう。
というか、会社の他の人からこれはどうだろう?と言われたので、調査することになったんだけど。動作の検証環境として、自社の開発サーバのWordPressにsubscribe2を突っ込んでみたが、動かず。
原因は、WordPressをインストールしているサーバにメールサーバを立ててないから。普通はメールサーバも入ってるレンタルサーバとかにWordPressをインストールするだろうから、あまり問題にならないケースではあるが、うちらの開発環境としては問題有りだと。
cform2の場合は、環境設定でSMTPサーバを使うように設定できたのでよかったのだが、どうもsubscribe2はできなさそう。それを補完するプラグインが、WP Mail SMTP。このプラグインを使うと、WordPressから送るメールを全てSMTPサーバ経由に設定できるみたいですな。

subscribe2は、基本的には投稿があったときにメルマガユーザに投稿が合った旨を通知するのがメイン機能のプラグイン。一応メルマガの真似事はできるのだが、メルマガの過去ログが残らない。運用で、カテゴリにメルマガというのを作ってメルマガはそのカテゴリの投稿のみ送られるようにするという方法もあり得るとは思うが、多少面倒に感じる。テンプレートいじらないとダメだし。まあ楽なもんかもしれんけど…。

それをメルマガの真似事の機能を使って、WP Mail SMTPプラグインを使ってGmail経由で送ると、送信済みメールとしてメルマガの過去ログを残せるという副次的な効果があるようだ。Gmailのアカウントを取らないといけないが、これはこれで使えるノウハウだなと思った。

ひとまず、調査報告終了です。


javascript: firebugの使い方 tips

JavaScriptの開発で必須であるFirebugですが、自分は使いこなせてなかったことを痛感しました…。AJAXの通信を見張るのと、DOM要素のCSSチェックとかに使ってたので、これで使いこなせてると思ってたけど、console.logとかあったんやなぁ~。consoleオブジェクトの素晴らしさを知ったら、alertとか使わんで済むから助かる~!!

// ログを出すのみ
console.log("test");

// sprintfのように置換して出力もできる!
console.log("Hello, %s", "patorash"); // Hello, patorash

// 以降は、ログを出し、ソースへのリンクも貼る
console.debug("test");
// infoマーク付き
console.info("test");
// warnマーク付き
console.warn("test");
// error扱い
console.error("test");

// 条件に合致しない場合だけコンソールログ出力(unittestに使える?)
var test = "test";
console.assert(test == "hoge", "test != 'test'ではない", test);

まだまだ色々できるみたいだけれど、自分が使いそうなのはこれくらいかな。

自分が最も使いそうな使い方。(prototype.jsで)

var ary = $w('php javascript css ruby java');
console.debug(Object.inspect(ary));

mixiアプリ:永続化したJSONデータの取得

趣味でmixiアプリの開発を始めてる。mixiアプリで値の永続的に使用するには、外部サーバに値を保存する方法と、mixiのkey-valueストアを利用する方法がある。今回は処理が軽くて通信も少なくて済みそうなkey-valueストアに値を保存する方法を選んだのだが、key-valueストアはいわゆるデータベースではないのでどういう形式で値を持たせるかで悩んだ。今回はJSONで保存してみた。

ところが、いざ値を取得してみると、JSONからオブジェクトに戻すことができなかった!

これはどういうことだ!?と、思って先日楽天ブックスから届いたOpenSocial入門を読んで調べていると、永続化されたJSONデータをそのまま取得するとHTMLエスケープされているらしい。これでは使いにくいので、HTMLエスケープしないように明示してデータを取得させに行く必要がある。

// 現在の設定を取得する
var req = opensocial.newDataRequest();
var mySetting = {};
var escapeParams = {};
// ここで、JSONデータをHTMLエスケープしないように指示
escapeParams[opensocial.DataRequest.DataRequestFields.ESCAPE_TYPE] = opensocial.EscapeType.NONE;
req.add(req.newFetchPersonAppDataRequest("VIEWER", ["setting"], escapeParams), 'selfData');
req.send(function(data){
	if(data.hadError()){
		// エラー処理
		var msg = data.getErrorMessage();
		return;
	}else{
		var selfData = data.get('selfData');
		if(selfData.hadError()){
			return;
		}
		var dataAry = selfData.getData()[viewer_id];
		if(dataAry != null){
			// 値が設定済み
			mySetting = gadgets.json.parse(dataAry['setting']);
		}
	}
}

上記のようにしたところ、JSONデータをオブジェクトとして取得することができた。JSONは便利だけれど危険もあるので、HTMLエスケープが自動的に行われるのはいいと思うけれど、OpenSocialアプリ開発を始めたばかりだとはまってしまいそうだったのでメモメモ。

OpenSocial入門 ~ソーシャルアプリケーションの実践開発
OpenSocial入門 ~ソーシャルアプリケーションの実践開発
技術評論社 2009-01-24
売り上げランキング : 8425

おすすめ平均 star
star内容の濃い良書

Amazonで詳しく見る by G-Tools