February 17, 2006
domxml
こんばんは。Miyaです。
RSS情報を取得するのに、今まではxml_parserを使用していましたが、
今回、あるサーバーでdomxmlが使えることが分かったので使ってみました。
December 13, 2005
PHP正規表現 2
お久しぶりです。Miyaです。
やはり年末は何かとばたばたしていますね。
さて、以前、URL、メールアドレスを抽出する正規表現を書きましたが、
今回は画像情報を取得する正規表現が必要になったので、色々考えました。
November 22, 2005
ソートあれこれ その二
こんにちは。Miyaです。
さて、前回はシンプルな配列のソートを紹介しました。
今回は、少し進んでphpの複雑な配列のソート、多次元配列のソートを紹介します。
November 18, 2005
ソートあれこれ その一
寒くなってきましたね。身も心も懐も。
にわかに持ち上がる冬のイベントの話に耳をふさいで小さく震えているMiyaです。
MTの方ばかりエントリーしていましたが、この間、Perl→PHPへの以降作業をしていて、
sortで苦労したので、備忘録代わりに。
August 17, 2005
PHP便利な関数 8
最近、朝夕の風が少しずつ涼しさを感じてきています。
ああ・・・夏が終わる・・・Miyaです。
さて、ほんとに最近デザインの話からは離れてしまって申し訳ないのですが、
本業がシステムなので、しばしお付き合いください・・・。
さて、本日はPHPの日付関数について。
PHPはdate()という関数がありまして、かなりいろいろなフォーマットが
使用できます。
a am または pm を定義する
A AM または PM を定義する
d 2桁の日付を定義する
D 3文字の曜日 (Sun ~ Sat) を定義する
F フルスペルの英字で月を定義する
h 12時間単位 (00 ~ 12) の時間を定義する
H 24時間単位 (00 ~ 23) の時間を定義する
g 先頭に 0 をつけない12時間単位 (0 ~ 12) の時間を定義する
G 先頭に 0 をつけない24時間単位 (0 ~ 23) の時間を定義する
i 2桁の分 (00 ~ 59) を定義する
j 先頭に 0 をつけない (0 ~ 31)の日を定義する
l フルスペルの英字で曜日を定義する
L 閏年では 1 を、それ以外は 0 を返す
n 先頭に 0 をつけない (0 ~ 12) の月を定義する
m 2桁のの月 (01 ~ 12) を定義する
M 3文字の月 (Jan ~ Dec) を定義する
s 2桁の秒 (00 ~ 59) を定義する
S 英文の序数を表わす接尾語 (th ~ nd) を定義する
t 指定した月の日数 (28 ~ 31) を定義する
U UNIX時間 (1970年1月1日からの秒数) を定義する
w 数値で示す曜日 (0 ~ 6) を定義する
y 西暦の下2桁を示す年を定義する
Y 西暦を4桁で示す年を定義する
z その年の1月1日からの通算日を定義する
Z タイムゾーンのオフセット秒 ( -43200 ~ 43200まで)
date("Y年m月d日 H:i:s");と指定すれば、現在時刻が
「2005年08月17日 12:12:24」と表示されるわけです。
ここで、もう一つstrtotimeという関数を紹介しておきましょう。
これは英文形式の日付をUNIXタイムスタンプに変換します。
つまり、現在時刻ではなく、ファイルやDBに格納された時刻を表示させる時、
一度strtotime関数でUNIXタイムスタンプに変換し、date関数で
フォーマットを編集することができるようになります。
date("Y年m月d日", strtotime("2005-08-17"));
一件遠回りのように見えますが、昨日の日付や明日の日付を取得するときなど、
編集もしやすいため、メンテナンス効率も上がります。
August 15, 2005
PHP便利な関数 7
高松市はこのまま雨が降らなければ断水が始まります。
Miyaです。水をください。
さて、今回は関数自身の便利さというよりは、関数の使い方のTipsです。
以前ここでエントリーを行なったセッションを使用したサイトを作っていて気づいたことなど。
今回使用する関数はheader関数です。
関数の効果は、生のHTTPヘッダを送信するという非常にシンプルなものなので、
ページのリダイレクトやヘッダー情報の書き換えに使用するのですが、
例えば、フォームから受け付けた内容を管理者にメールで知らせる時、
受付内容入力画面→受付内容確認画面→受付完了画面と遷移させるのであれば、
一つのphpファイルで完結させることが出来るので、header関数を使うことはありませんでした。
しかし、この場合、受付完了画面で更新することによって、同じ内容の
メールが何度も管理者宛に送られてしまいます。
サイトによっては、「一度だけクリックしてください」と記述しているところもありますが、
やはりスマートではありません。
そこで、ひと手間かけて、確認画面から完了画面へ移るとき、管理者あてにメール送信した後、
header("Location: http://www.form.com/thanks.htm"); /* Redirect browser */
exit;
などといった記述でリダイレクトさせてやれば、更新を行なっても複数送信されることはなくなります。
また、header関数を使用してセッションにかかわる情報を更新することによって、
セッションを使用した認証ページでも、ブラウザの「戻る」ボタンで戻ることが出来ます。
(「ページの期限切れ」表示を回避することが出来ます)
特に認証付申し込み受付ページなどは、
入力画面表示→入力→入力内容処理→表示処理へリダイレクト
という流れがユーザーが扱いやすいページになるのではないでしょうか。
August 11, 2005
PHPとMovable Type
そろそろお盆の時期ですね。
夏休みの人も多いのでは?こんばんは(職場から)Miyaです。
さて、現在色々と案件でMovable Type(以下MT)を触ることが多いのですが、
MTとPHPを連携させることによって、色々と面白いことが出来そうです。
そこで、今回からテーマを一つ増やし、MTに絡めたPHPで試してみたこと、
困ったことなどを紹介して行こうと思います。
さて、このブログのトップページのように、RSSから項目を取得し、表示させる仕組み。
実は色々なところで使っているのですが、それを作った当初、使う場所によって
表示される内容が異なる、といったことが起きていました。
具体的には、blogエントリーの本文の場所です。
表示用PHPも特には変えておらず、MTのRSSテンプレートもデフォルトのまま。
違うのはMTバージョンくらいなのに・・・。と色々と調べているうちに、
○MT 2.XXのRSS 1.0
<description><$MTBlogDescription encode_xml="1"$></description>
○MT 3.XXのRSS 1.0
<description><$MTEntryBody encode_xml="1"$></description>
と、デフォルトのRSS 1.0のテンプレートが異なっているのを見つけました。
このせいで、同じ項目なのに内容が違う。なんて現象が起きていたんですね。
デフォルトでRSSを生成している人は、一度テンプレートを見てみると良いかもしれません。
August 09, 2005
PHPセッション管理について
暑い日が続きますが、クーラーに頼りすぎるのは気をつけましょう。
風邪ひきました。Miyaです。
時々、PHPで認証付のサイトにアクセスした時、
ブラウザの「戻る」ボタンをクリックした時に、
「ページの有効期限切れ」というエラー画面がでたという人も多いのではないでしょうか。
これは、認証にセッション情報を使った時、
デフォルトではブラウザのキャッシュを残すことが出来ないことが原因です。
例えば入力フォームなどを使用した場合、確認画面から戻るを押した時、
入力項目が全てクリアされるのは困りモノです。
そこで、PHPファイルの最初に、
session_cache_limiter('private_no_expire');
と記述することによって、ブラウザのキャッシュを使用することが出来ます。
これを利用すれば、ブラウザの戻るボタンや、history.backを使用して
前画面に戻した時も、入力値は保持されます。
・・・が。
セッション値なども保持されてしまい、セッション情報が変わる場合や、
リロードをクリックしても、キャッシュ情報を参照してしまう不具合があります。
(これはブラウザによってまちまちですが)
サイトによっては、リロードボタンでxxx.php?asgbys6478 とランダムな文字列を与えて、
キャッシュをクリアしたり、ブラウザの「戻る」やhistory.backを使用しないで、
プログラムで入力値を保持したフォームを表示させるなど、対応は様々です。
どれも一長一短で、これ!といった最良の方法がないのが現状、といったところでしょうか・・・
August 02, 2005
PHP正規表現
最近、Webデザインからかけ離れていますね。
お久しぶりです。Miyaです。
本日はPHPの正規表現で、苦労したところを紹介します。
○目的
掲示板に入力された文字列を検索し、URLであれば、
自動的にリンクする。
メールアドレスであれば、mailtoを負荷する。
結果の正規表現
・URL(http://~)
ereg_replace("(http)(://[[:alnum:]\S\$\+\?\.=_%,:@!#~*-/&]+)","<a href=\"\\1\\2\" target=\"_blank\">\\1\\2</a>",$str);
・URL(https://~)
ereg_replace("(https)(://[[:alnum:]\S\$\+\?\.=_%,:@!#~*-/&]+)","<a href=\"\\1\\2\" target=\"_blank\">\\1\\2</a>",$str);
・メールアドレス
preg_replace('/([a-zA-Z]{1}[\w\.\-]*@[\w\.\-]+\.[\w\.\-]+)/','<a href="mailto:$1">$1</a>', $str);
もし不具合を見つけたり、これよりいいものを知っているよ、という方はぜひご一報ください。
July 25, 2005
PHP便利な関数 6
髪を切ってから、「ムショ帰り」とか「修行僧」とか言われるようになりました。
このままチベットあたりに行ってしまいたい気分です。Miyaです。
Perlでファイルを読み込んで、配列に格納し、
その中で一番大きい数に番号を追加するなど、最大値を出したい時、
sub maxval {
my @data = @_;
return if @data == 0;
my $max = shift @data;
foreach my $val (@data) {
if ($max < $val) {
$max = $val;
}
}
return $max;
}
このようなサブルーチンを準備していました。
これを元にして、PHP版を作ろうとしていたところ、既に準備されていました。
max -- 最も大きい数値を返す
max() の()には配列も使用できますし、整数、文字列、倍精度実数でも使用できます。
July 21, 2005
PHP便利な関数 5
ここ最近の暑さで、今日ダウンしかけたMiyaです。こんにちは。
夏バテには注意しましょう。
DBを使わない環境において、
入力内容から重複したものを除外するのはなかなか労力を必要とします。
Perlでプログラムを作っていた頃は連想配列を駆使して、
何とか一意の情報を出力させていましたが、PHPでは既に一つの関数として用意されています。
array_unique
array_unique() は、 arrayを入力とし、値に重複のない新規配列を返します。
注意すべき点はキーが保持されることと、最初の要素が使用される事でしょうか。
例えば、最初に文字項目として"3"という要素があった場合、あとに数字として3という要素があってもそれは全て文字項目の"3"にまとめられます。
膨大なエントリーからメールアドレスの重複を省いたり、日にちごとのエントリー有無の確認など知っていると結構役に立つ関数の一つではないでしょうか。
July 19, 2005
PHP便利な関数 4
全国的に梅雨明けしたそうですね。
アウトドアの季節です。準備はOKですか?Miyaです。
さて、RSSの情報を取得して表示させようとする時、エントリー全文を表示させたり、
body部分のみを表示させる場合は良いのですが、表示する文字をプログラムで
抑制させようとする場合、タグが邪魔になってしまう場合があります。
画像タグやリンクタグが途中で切れる事によって、表示全体のレイアウトが崩れたり・・・。
今までは、置換関数と正規表現を使って、強制的にタグを除去していたのですが、
調べてみると便利な関数がありました。
strip_tags
この関数は、指定した文字列から全てのHTMLおよびPHPタグを取り除きます。
この関数の便利なところは、$string = strip_tags($string, '<br><b>'); とタグを
指定することによって、必要なタグを残すことが出来ることです。
画像は不要だけど、改行は必要、とかリンクは不要だけど、強調は残したい。
などという場合、利用価値は高いと思います。
ただ、ユーザーの入力内容がそのまま表示されるページについては、
悪意のある記述がそのまま通る可能性がありますので、
使用場面を考える必要はありそうですね。
July 12, 2005
PHP便利な関数 3
今日も雨模様でした。
香川には恵みの雨ですが、そろそろ夏の太陽も見たいかなMiyaです。
Webにおいて半角カタカナは厳禁です。
受け付けたデータをメールで送信する時、
文字化けを起こして確認できなくなっては大変です。
受付フォームによっては、「半角カナは使用しないでください」と記述したり、
半角カナの場合はエラーを返したり、と対応は様々ですが、
一番親切なのは半角カタカナを全角カタカナに変換することではないでしょうか。
Perlで開発を行なっていた頃は、共通のモジュールを使っていましたが、
濁点文字が文字と濁点の2文字に変換されてしまうために、
変換用サブルーチンを準備していました。
しかし、PHPでは関数として搭載されています。
mb_convert_kana -- カナを("全角かな"、"半角かな"等に)変換する
使用可能な変換オプション
オプション : 以下のオプションを変換時に指定します。デフォルトは
"KV"です。
"r" : 「全角」英字を「半角」に変換
"R" : 「半角」英字を「全角」に変換
"n" : 「全角」数字を「半角」に変換
"N" : 「半角」数字を「全角」に変換
"a" : 「全角」英数字を「半角」に変換
"A" : 「半角」英数字を「全角」に変換
("a", "A" オプションに含まれる文字は、U+0022, U+0027, U+005C,
U+007Eを除く U+0021 - U+007E の範囲です)
"s" : 「全角」スペースを「半角」に変換 (U+3000 -> U+0020)
"S" : 「半角」スペースを「全角」に変換 (U+0020 -> U+3000)
"k" : 「全角片仮名」を「半角片仮名」に変換
"K" : 「半角片仮名」を「全角片仮名」に変換
"h" : 「全角ひら仮名」を「半角片仮名」に変換
"H" : 「半角片仮名」を「全角ひら仮名」に変換
"c" : 「全角かた仮名」を「全角ひら仮名」に変換
"C" : 「全角ひら仮名」を「全角かた仮名」に変換
"V" : 濁点付きの文字を一文字に変換。"K","H"と共に使用します。
特徴としては、複数のオプションを同時使用できること、
濁点文字も1文字として変換できることです。
これを応用すれば
○電話番号チェック
全角英数記号→半角英数記号→数字チェック
○メールアドレスチェック
全角英数記号→半角英数記号→メールアドレスチェック
といった入力チェックにも使用できそうですね。
July 08, 2005
PHP便利な関数 2
もうすぐ海の日ですね。
連休の予定はOKですか?Miyaです。
RSSからブログの内容をPHPで表示させる時、
文字数が多くなると、見た目が悪くなります。
続きを読む・・・のようにすれば良いのですが、
それでもエントリーをする人によって文字数が変わってきます。
その時、指定文字数のみ表示させ、あとは「・・・」という風に
しようと下のようなプログラムを作りました。
$item["description"] = mb_substr($item["description"],0,70);
しかし、これは文字コードによって化けてしまい、
うまくいきませんでした。
そこで色々と調べたところ、見つけたのが次の関数。
$item["description"] = mb_strimwidth ($item["description"], 0, 70, "…",utf8);
mb_strimwidth -- 指定した幅で文字列を丸める
文字数の指定から、文字コード、後ろに付け足す文字まで、
すべて一つの関数で事足りるのでかなり便利です。
知っているとちょっと得する。
そんなものをこれからも紹介出来ればと思います。
July 05, 2005
PHP便利な関数
最近座っているだけでも汗ばんできますMiyaです。
以前はPerlでプログラミングをしていましたが、
最近PHPでプログラミングを行なうことも多くなってきました。
PHPはPerlに比べ、Webで使い勝手の良い関数が準備されているのが特徴ですね。
そのような便利な関数を備忘録代わりに紹介していきたいと思います。
みなさんの「こういうときはどうするの?」や、
「これ知ってる?」も教えていただけると嬉しいです。
今回は、Webで表示させる上で基本となる関数から。
○htmlspecialchars
特殊文字をHTMLエンティティに変換してくれます。
シングルクォート、ダブルクォートも変換可能なのが特徴です。
○nl2br
改行文字の前にHTMLの改行指定文字を挿入します。
ただ、改行コードはそのまま残るので、
改行コードが不要な場合は、置換処理が必要です。
June 30, 2005
ActionScript
おはようございます。nakauです。
今日はなんとなくActionScriptをやってみようかなーと思います。
まずは準備。
ActionScriptのフリーコンパイラmtascをダウンロードします。
http://www.mtasc.org/#download
これは解凍してパスを通すだけで終わりです。早い!
Tips
・ActionScriptの拡張子は .as
・Tuto.asをTuto.swfにコンパイルするコマンドは
mtasc -swf tuto.swf -main -header 800:600:20 Tuto.as
June 29, 2005
RSSとは その5
こんにちは。
香川は大変水が不足してますMyaです。
前回のエントリーで
「RSS・・・(RDF Site Summary)」と書きましたが、
RSSという略称は、バージョンによって異なるようです。
RSS 0.9・・・Rich Site Summary
RSS 1.0・・・RDF Site Summary
RSS 2.0・・・Really Simple Syndication
約する意味が違えば中身も違うように、
RSS 0.9→RSS 1.0→RSS 2.0と進化したものではなく、
これらは開発の意図やコンセプトが微妙に異なるようです。
各々に互換性があるかは微妙ですが、一般に広まっている
RSSリーダーは大抵どのバージョンにも対応しているので、
それほど心配はいらないのではないでしょうか。
June 28, 2005
RSSとは その4
こんにちは。
最近微妙にダイエットに成功しているMiyaです。
目指せ規則正しい生活。
前回は、XMLについて、ものすごく簡単に説明しました。
今回はXMLとRDFについてものすごく簡単に説明します。
RSSがXMLで記述されていることは前回のとおりですが、
RSSリーダーに登録するURLはxxxx.rdfという具合に、RDFというファイルを
参照しています。
じゃぁ、XMLのファイルはxxxx.rdfになるの?と思ってしまいそうですが、
やや違います。
確かにXMLのフォーマットで記述されていますが、
前回の話しでいうところの、「共通の約束」がRDFということになります。
・・・少しややこしくなってきました。
おさらいをかねてまとめてみましょう。
RSS・・・(RDF Site Summary)文字通り、サイトのサマリー情報をRDFで記述したもの
RSSリーダーに登録する元のファイルですね。
XML・・・(eXtensible Markup Language)拡張可能なマークアップ言語
タグで囲まれた形で記述される。
RSSはこのフォーマットで記述されています。
RDF・・・(Resource Discription Framework)詳細説明用の形式、とでも言うのでしょうか。
XMLで記述した文章では不十分な部分をRDFという共通の条件で補っています。
つまり、RDFとは、サイトのサマリー情報を誰でも簡単に取り出せるように、
XMLフォーマット+RDFの条件という「共通の約束」に従って書かれたファイル、
ということになります。
June 27, 2005
RSSとは その3
こんにちは。
朝方に変えてから、てき面に夜更かしできなくなったMiyaです。
さて、前回RSSを実際に見てもらったわけですが、
記号ばっかりでよく分からないという意見を聞いたので、
本日はもう少し分かりやすい説明を。
June 24, 2005
RSSとは その2
おはようございます。
「この業界は夜型人間が多い」という定説をひっくり返そうと目論んでいるmiyaです。
さて、前回RSSの話をしましたので、本日はもう少し突っ込んだ話を。
色々なサイトで、トップページに「新着情報」なんかが表示されていますが、
これらにもRSSが使われていることが多いんです。
一昔前は、新着情報は更新されるたびHTMLを修正したり、
CGIで管理画面からメンテナンスしたりとなにかと手間がかかりました。
しかし、RSSを使えば、MTの更新が即、新着情報の更新につながり、
人の手を煩わせることがありません。
情報は鮮度が重要視されるので、即時反映できるというのもポイントの一つでしょう。
では、そのRSSとはなんぞやという話になってきますが、
まずは実際に見てみましょう。
http://www.gofield.co.jp/blog/study/index.rdf
(クリックして開かない場合は、ダウンロードしてメモ帳などでも確認できます)
これはこのブログのRSSなんですが、
開いてみると、タグの中にエントリーの本文やら、更新日時、URLが
がそのまま記述されているのが分かりますね。
つまり、RSSリーダーはこれを解析して表示させているだけであり、
似たような仕組みを作れば、トップページに新着情報を更新することもできるわけです。
ちなみに、ブログトップページもRSSを使って最新エントリーを自動更新しています。
「解析して表示する」ことさえできれば、表示件数や、更新日時を見て「New」マークを
表示させるなど、カスタマイズも自由に行なえます。
June 23, 2005
RSSとは
おはようございます。miyaです。
今日も高松は雨の気配なし、曇ってはいるんですがねぇ。
さて、他のスタッフからもRSSについていくつか話題が挙がっていますので、
今回は私からもオススメRSSリーダーの紹介を。
RSSリーダーには様々な形態があります。
それ単体でRSSリーダとして機能するソフト、既存のブラウザやメールソフトに
組み込むタイプのもの。
最近ではWeb上の自分専用のページにRSSコンテンツを登録しておくものもあります。
「My Yahoo! 」
いちいちアクセスする不便さはあるものの、自宅と職場など、違うパソコンで
情報共有したい場合は便利なのではないでしょうか。
さて、他のスタッフからは、組み込み型のRSSリーダーの紹介が多いので、
今回はティッカータイプのRSSリーダーをいくつか紹介します。
「eクルーザー」
上記2つはいずれもフリーソフトです。
このタイプのRSSリーダーはパソコンのデスクトップ上に常駐し、
電光掲示板のように最新情報が流れ続けます。
定期的にチェックするのではなく、他の作業中に気になった情報をチェックできるので、
仕事をしながらでもアンテナをはることができますよ。