カテゴリー別アーカイブ: プログラミング

BASHの脆弱性でCGIモードで動いてるPHPにアレさせてみました

タイトルはパクリ
元記事: BASHの脆弱性でCGIスクリプトにアレさせてみました – ブログ – ワルブリックス株式会社

sakura のレンタルサーバが cgi モードで php 動かしてるよなーと思ってテストしてみたらできました。
# テストスクリプトは削除済みです。
続きを読む

Codeigniter の言語クラスで gettext を使えるようにする

最近、ちょっと訳あって Codeigniter をいじってます。
すでに PHP が分かっていれば、学習コストも低く、直感的に使えるんでなかなか良いっすよ。

Codeigniter で、国際化するために用意されてる言語クラスですが、通常は以下のようにして使います。

application/language ディレクトリに各言語のサブフォルダ(例:japanese)を用意する。

その中に _lang.php (例:error_lang.php) というファイルを作成して、連想配列 $lang にテキストをセットする。

$lang['language_key'] = "実際に表示されるメッセージ";

Controller で言語ファイルを読み込む。

$this->lang->load('filename');

lang オブジェクトの line メソッドか、lang() 関数で、キーを指定してテキストを取得する。

$message = $this->lang->line('language_key');
// または
echo lang('language_key');

ただ、これだとキーとの対比とか、メンテナンスがめんどくさいので、できれば .mo ファイル作って gettext() で処理したい所です。
続きを読む

uninstall.php

WordPress でプラグインを無効化したときにオプションを消すには

uninstall.phpWordPressプラグインで生成したテーブルをプラグインアンインストール時に削除する方法について、twitterでゴチャゴチャ話していたら、@takayukister さんに良いことを教えてもらいました。
via. Twitter / @takayukister: @miya0001 @wokamoto 二人が話して
プラグインディレクトリの中に uninstall.php を設置するか、プラグインディレクトリの中に、register_uninstall_hook() を使用すれば WordPress の管理画面からプラグインを削除する時に動作する処理を記述できるようです。
この辺の処理方法について、早速 @miya0001 さんがまとめてくれてます。

ただ、この方法だと削除時にしか動作しないんすよね。
できれば、無効化したときにも wp-options テーブルから消したい。
でも、一時的に無効化して、あとで有効化する場合にはオプション消されちゃうと再設定しなきゃだから辛いしなぁ..
とか、考えてたんですが、良い方法を思いつきました。
続きを読む

sleep sort する jQuery プラグイン

注意: sleep sort は、あくまでもネタです。ネタとして楽しんでください。
コメント欄でも指摘されてますが、実用に耐えるものではありません。
間違っても実用しようとか思わないように!

一部で話題沸騰中のソートアルゴリズム「sleep sort」を jQuery 用プラグインとして実装してみました。
via. 常識を覆すソートアルゴリズム!その名も"sleep sort"! – Islands in the byte stream

とりあえず、デモ。
下の textarea に数値をスペース区切りで入力してから「Sleep Sort!」をクリックしてください。
ソートされるはずです。



続きを読む

ん~、正直なところ、$("#checkboxid").checked()が欲しいっすw

jQuery で checkbox が check されてるか調べる

ん〜、正直なところ、$("#checkboxid").checked()が欲しいっすwTwitter で、@masaru_b_cl さんが、「jQueryでチェックボックスがチェックされているかどうかを取るのって、 var checked = $("#checkboxid").attr("checked"); しか方法ないのか・・・」と言ってました。
jQuery オブジェクトには .checked() とかってメソッドがありません。
なので checkbox がチェックされてるかどうかは、通常以下のようにして取得します。

checked = $("#checkboxid").attr("checked");
checked = $("#checkboxid").get(0).checked;

ただ、これだとあまり直感的じゃないですね。
checked = $("#checkboxid").checked(); のようにして、取得できるとカッコイイです。
本当にできないんでしょうか?
実は .checked() メソッドを jQuery オブジェクトに追加するのは、すごい簡単です。
続きを読む

wp_remote_get のススメ

WordPress プラグインで外部サービスのAPIを叩く場合、以前は Snoopy 等のライブラリを include して行っていました。
# Snoopy が WordPress コアソースに含まれていたため。

しかし、WordPress 2.7 以降では wp_remote_get() という関数が追加されたため、もっぱらこれを使っています。
例えば Topsy の API を使って、パーマリンクに対して言及されたツイートを取得するには以下のようなコードを書けば実現できます。

$response = wp_remote_get('http://otter.topsy.com/trackbacks.json?url='.rawurlencode(get_permalink()).'&tracktype=tweet&perpage=50');
if( !is_wp_error( $response ) && $response["response"]["code"] === 200 ) {
	$response_body = json_decode($response["body"]);
	var_dump($response_body->response->list[0]);
} else {
	// Handle error here.
}

簡単でしょ?

以下、簡単に wp_remote_get の使い方
続きを読む

WordPressで、1つの投稿を2つのフォーマットで出力(URLも別)とかできたりしないだろうか。

パラメータでシングルページのテンプレートを変更

WordPressで、1つの投稿を2つのフォーマットで出力(URLも別)とかできたりしないだろうか。WordPress で与えられたパラメータによって、シングルページで適用するテンプレートを変更する方法。
Eri さんが、こんなことを言っていたのでサクッと作りました。
話を聞くと、通常の表示ページの他に印刷用のページを用意して、見た目をガラッと変えたいとのこと。

例えば、パーマリンクが http://example.com/archives/1 の場合、http://example.com/archives/1?type=print にアクセスすると、テンプレートとして single.php を読み込む代わりに single-print.php を読み込ませたい。
これは single_template というフィルターフックを利用して、通常とは違うテンプレートを読み込むようにすることで対応できます。
続きを読む

匿名関数と無名関数 (PHP Advent Calendar 2010 16日目)

shin1x1 さんから、開始された PHP Advent Calendar jp 2010 16日目です。

書くTipsは、10分で考えて、5分で書ける内容で ok です。

とのことなので、さらっと。

PHP5.3から導入された無名関数って、5.2以前からある匿名関数とどうちがうの?ってお話。
続きを読む

任意のリンクに公式 Tweet 機能を追加する

先日 Twitter の公式 Tweet ボタンが提供されました。
ただし、この機能では Twitter が提供するボタン画像しか使えません。
Tweet ボタンとして他の画像を使いたい場合は、「Build your own」の所で説明されているように http://twitter.com/share へのリンクを設置してねとしか説明されていません。
しかし、これでは公式 Tweet ボタンのようにサブウィンドウを開いて Tweet することができませんね。
任意のリンクに公式 Tweet ボタンと同様の機能を持たせるにはどうすれば良いのでしょうか?

ここでは jQuery で、任意のリンクに公式 Tweet ボタンと同様の機能を持たせる方法を解説します。
続きを読む

Google Eath View API

先日公開されたGoogle Earth ビューが、中々面白い。
APIの呼び出し方も Google Map API に似ているのでさほど面倒ではないし、動作がスムーズでカッコいい。
Windows と MacOS X 10.4以降にしか対応していないのは残念だが

私が配布している WordPress 用プラグイン Google Maps Anywhere も、Earthビューに対応させるために準備中です。
ご期待ください。
とりあえず、動作はするようになったので「続きを読む」以降にデモを置いておきます。
続きを読む