2009/8/19 水曜日

foreachでなくreset(),current(),next()を使う

カテゴリー: — gabon @ 17:17:06

phpで配列の全ての要素に対してアクセスする時に、foreachを使いますが、
初めから順番にアクセスしたいときがあります。

単純な配列ならば、C言語のように、for文でインデックスを加算すればよいですが、
連想配列ではそうもいきません。

その場合は、reset(配列) を使うとよいです。

例えば、

$hoge が配列だとして
reset($hoge); <--hogeの一番始めに
while ( $a = current($hoge)){ <--今のインデックス(ポインタ)の値をとる
print $a;
next($hoge); <--次のインデックスに
}

正規表現で一致した部分を抜き出す

カテゴリー: — gabon @ 17:06:11

phpで正規表現がからんだ処理でちょっとハマリました。

ある文字列が、例えば「 where like ‘%こんにちわ%’」が来て、シングルクゥオーテーションを含んで囲まれた部分を取り出す(この場合は’%こんにちわ%’)時、文字列置換のpreg_replaceではなく、文字列検索のpreg_matchで書くことに気づくまで、結構時間がかかりました。

結論から言うと

preg_match( "/'%.*%/", $hoge, $matches, PREG_OFFSET_CAPTURE);
と書けば、
$matches[0][0]にヒットした部分が格納されています。

print_rデバッグの裏技

カテゴリー: — gabon @ 16:43:44

phpでwebアプリのプログラミングをしていると
print_rでオブジェクトを画面に出したい時がありますが、
ブラウザで表示を行うと、情報が全部くっついてデバッグの効率が非常に悪いです。
そんなときには、

<pre>~</pre>

で囲めばしっかりフォーマットされて表示されます。


print "<pre>"; print_r ($hoge); print "</pre>";

のような感じです。


2009/7/22 水曜日

mb_splitが使えない環境でのマルチバイト文字列の分割

カテゴリー: — kurowanko @ 15:40:34

マルチバイト文字列の分割は、mb_split関数を使うことでできますが、環境によってはmb_splitが使えない場合があります。
そうした環境の場合、どのように文字列を分裂すればいいのかを調べました。

『月曜・3』という文字列を『月曜』と『3』に分割する時、split関数を用いて『・』をターゲットにして分割を行いますが、『・』は全角のマルチバイト文字なのでマルチバイトに対応していないsplit関数ではうまく行ってくれません。
そこで、下記のようにしたら、うまく分割をしてくれました。

<?php
$sample =”月曜・3”;
echo($sample.”<br>”);
echo(bin2hex(”月曜・3”).”<br>”);
echo(bin2hex(”・”).”<br>”);
$sample_ = split(bin2hex(”・”), bin2hex($sample));
$sample_[0] = pack(”H*”,$sample_[0]);
$sample_[1] = pack(”H*”,$sample_[1]);
echo(”finish:”. $sample_[0].”<br>”);
echo(”finish:”. $sample_[1].”<br>”);
?>

分割をする文字列(月曜・3)と分割の起点とする文字(・)をbin2hexを使って16進数に変換し、その値を用いてsplitを行います。
16進数に変換すると、『月曜・3』は『e69c88e69b9ce383bbefbc93』、『・』は『e383bb』となります。
分割をした後で、pack関数を使い文字を元に戻します。
これで、mb_splitが使えない環境でもマルチバイト文字列を分割することができました。

2009/7/14 火曜日

WordPressのアップグレード

カテゴリー: — kurowanko @ 16:42:01

WordPress2.7からバージョンアップの際に自動アップグレードが可能になったようです。
以前までと同様に手動でアップグレードもできますが、自動の方が手順がかなり簡単です。

アップグレードのページにある自動アップグレードのボタンを押せばそれだけでバージョンアップの作業が完了します。
ですが、使用しているプラグインを停止させずに行うとPHPエラーが出てしまうので、アップグレードを行う前に必ずプラグインの停止をしてください。

プラグインの停止を行えば、後はワンクリックでバージョンアップができます。
バージョンアップが完了したら、停止させたプラグインを再び利用して大丈夫です。

共有SSLの導入

カテゴリー: — admin @ 16:28:01

さくらインターネットサーバのコントロールパネルへログインをし、ドメイン設定のページを開きます。
開いたページのドメイン一覧から共有SSLを利用したいドメインの欄にある変更をクリックします。
するとドメイン詳細設定画面が開きます。
共有SSLを利用するにチェックを入れて送信すれば、収容サーバの番号が入った新しいアドレスが設定されます。
なお、初期ドメインに共有SSLを設定した場合のアドレスは(https://example.sakura.ne.jp)のようになります。

ホームページなどでお問い合わせのフォームだけSSLを利用したい場合には、お問い合わせのフォームへ飛ぶ際に絶対パスでSSLのアドレスへ飛ぶようにすることで解決できます。
同じように、共有SSLを設定したページからSSLを利用しないページに飛ぶ際にも絶対パスを使う必要があります。

ドメインの設定の際に、マルチドメインの対象フォルダを指定する項目がありますが、
その指定フォルダは変更する必要はありません。

参考URL
http://support.sakura.ad.jp/support/manual/rs/set_ssl_kyouyu.shtml
http://daisuki-sakura.com/ssl.htm

2009/7/11 土曜日

素人cake php1.2ではまり

カテゴリー: — gabon @ 18:04:39

前回のエントリで書き換えたviewが反映されない件について書きました。
viewが反映されるようになったのですが、
今度はpagenateがないぜ、というエラーに悩まされました。

http://d.hatena.ne.jp/s-yo-ko/20080226
の記事に助けられました。ありがとうございます!
function index(){
$this->set(’adminusers’,$this->paginate());
}
のように、コントローラからpaginateのオブジェクトを送ってあげればよいようです。

改めまして、s-yo-koさんに感謝です。

素人cakephp1.2でビューがかわらず・・・

カテゴリー: — gabon @ 18:00:05

cakephp1.2を始めました。

bakeでコントローラ、ビューを一度つくりました。
その後ビューを書き換えても、結果が反映されず、、
半べそに。

解決法は、初期状態のコントローラに、
ビューに対応するコントローラを作ってあげることです。

例えば、最初のリスト表示なら、
funcion index(){
}
て空っぽのエントリを用意してあげれば、
対応するビューのindex.ctpが読み込まれます。

cakeは何もかかなくてもリストビューができるから、何も書かないでいいのかな、というハマりでした。

bentonさんありがとう!

2009/7/6 月曜日

excel2007の「開く」ファイラーの便利な機能

カテゴリー: — gabon @ 14:34:35

今の今まで気がつかなかったのですが、
excel2007のファイルを開くで出てくるファイラーの
左のペイン(「最近使ったファイル」とか「デスクトップ」が並んでいるところ)に、
新規に追加できるんですね。

自分は「共有ドキュメント」を追加しました。

やり方は、追加したいフォルダを右のペインで選んでおいて、件の左側のペインで右クリックで、「~(選んだフォルダ)を追加」です。

比較的よく開く(しょっちゅう開くものは履歴にのこりますが)フォルダなどをすばやく開くことができます!

2009/6/27 土曜日

AS2で連想配列と配列と連想配列を組み合わせる

カテゴリー: — gabon @ 17:02:19

久々のactionScript2ネタです。
結構ハマリましたので、ブログに書きます。

例えば、
経路データが入っているテーブルがあるとします。
どこに行くかは名前で引っ張ることとし、
道筋のデータ(X,Y)は任意の個数分あるため、数字で引っ張ります。
そして、座標は名前で引っ張るとします。

そういうデータを格納する書き方でちょっとハマリました。

var moveroute = new Object();
moveroute["LIBRARY"] = new Array( { X:300, Y:130},{ X:310, Y:140} );
moveroute["BOOKSTORE"] = new Array( { X:10, Y:130},{ X:30, Y:130},{X:30,Y:100} );

と格納して、

引っ張ってくるときは、
moveroute["LIBRARY"][1]["X"]; <-310
moveroute["LIBRARY"][1]["Y"]; <-140
でOKです。

・名前で管理したいときはオブジェクト
・数字で管理したいときは配列

と覚えればよいのかもしれません。
しかし、、動的に要素を追加したりする場合って、、どうするのかしら。。またブチあたったら考えます。。

« 前ページへ次ページへ »

HTML convert time: 0.671 sec. Powered by WordPress ME