Monthly Archives: March 2012

初心者による初心者のためのPHP講座 第9回 関数の定義

この講座でも、echo()を始めとして、date()、define()、array()、explode()、extract()などの様々な関数が登場している。(厳密には関数でないものも含まれるが・・・。) これらは、PHPが標準で備えている関数であり、構文と並んでPHPでのプログラミングの基本となる要素であるが、「ユーザー定義関数」として自身で関数を定義することも出来る。 関数については「初心者による初心者のためのPHP講座 第2回 PHPの基本構造」で触れているので、もう一度おさらいして欲しい。 ユーザー定義関数は、比較的小規模な処理を1つにまとめたもので、PHPのプログラムは、複数の「ユーザー定義関数」を組み合わせて実行させることで成立しているとも言える。 他の言語では、PHPの関数のような、ひとまとまりの処理を「サブルーチン」と呼ぶ場合もある。 ユーザー定義関数は、下記のようにfunction文を用いて定義する。 function 関数名() { 処理1; 処理2; 処理3; . . . } 関数は、1つまたは複数の引数を取ることもあるが、その場合は function 関数名(引数1, 引数2, 引数3…) { 処理1; 処理2; 処理3; . . . } となる。 関数名には、英数字、アンダースコアを使用することが出来るが、最初の一文字は、アルファベットかアンダースコアでなければならない。 戻り値を参照渡しする場合に、「&」で始まる関数を定義することがあるが、厳密には「&」は変数名の一部ではなく、「&関数名」となっている。 ユーザー定義関数を実行する場合は、標準の関数を実行する場合と同様に 関数名(); または 関数名(引数1, 引数2, 引数3…); とすれば良い。 また、ユーザー定義関数の戻り値を別の関数の引数として用いることも出来る。 <?php echo my_string(); round(my_value(), 2); // my_string()とmy_value()はユーザー定義関数 ?> このあたりは、PHPの標準関数と同じである。 下記の例では、get_date_yesterday()という関数を定義しているが、これは昨日が何曜日だったかを求め、それを戻り値として返す関数である。 <?php echo get_date_yesterday(); function get_date_yesterday() { $yesterday = time() + (60 * 60 * 9) – (60 * 60 * 24 * 1); // $yesterday = time() + (60秒 * 60分 * 9時間) – (60秒 * 60分 * 24時間 * 1日); $date_yesterday = date('l', $yesterday); return $date_yesterday; } ?> time()関数は、現在の時刻が、1970年1月1日0時0分から何秒経過したか求める関数であるが、 GMT基準であるため、日本時間に修正した上で、1日分の秒数を引いている。 こうして補正した秒数をdate()関数で整形し、曜日を求めている。 最後にreturn()を使って、戻り値として変数$date_yesterdayの値を返している。 return()は、処理を中断し、その引数を戻り値として返すが、echo()などと同様に厳密には関数ではないため、通常は、()は使わずに return 引数(戻り値となる値、変数); のように記述する。 戻り値として値を返さず、echo()関数で表示することが前提なら <?php get_date_yesterday(); function … 続きを読む →

Posted in PHP, PHP講座, ネット・PC | Tagged | 2 Comments

Plugin Directoryの統計情報を記事で表示出来るようにするプラグイン「Plugin Directory Stats」

「WordPress.ORG」の「Plugin Directory」から統計情報を取得し、投稿、固定ページ、ウェイジェットの中で表示できるようにするプラグイン「Plugin Directory Stats」をリリースした。 最新の「Plugin Directory Stats」をダウンロード 「Plugin Directory Stats」は、「Plugin Directory」からダウンロード数などの統計情報を取得し、ショートコードを使ってそれらを投稿、固定ページ、ウェイジェットの中で表示させることができる。 統計情報の取得にAPIと独自の仕組みを利用しているが、どちらもプラグインディレクトリのページをリクエストし、統計情報を取得する仕組みになっている。 つまりは、訪問者には見えない部分で、自サイトのページ以外にプラグインディレクトリのページを閲覧することになるため、サイトのパフォーマンスに少なからず影響を与える。 度が過ぎればWordPress.COMに対しても影響は皆無ではない。 そのため、原則として、プラグインの作者が、自身のプラグインの統計情報を自分のサイトで表示させる用途に向くプラグインである。 ただし、大量のプラグインの統計情報を表示させるような用途には向かない。 プラグインの利用者のサイト、WordPress.COMへの負荷を軽減するため、取得した情報は一定時間(デフォルトで3時間)キャッシュし、頻繁にページのリクエストを発生させない仕様になっている。 そのため表示される統計情報はリアルタイムの情報ではない。 キャッシュする時間を短くすることも出来るが、そもそも、リアルタイム性が重要な情報ではないので、可能な限り長めに設定して欲しい。 なお、統計情報は、プラグイン毎、作者者毎に独立してキャッシュされる仕組みであり、全情報が同時に更新されるとは限らない。 キャッシュの有効時間を過ぎた場合以外にもキャッシュが更新のタイミングがあり、UTCの午前0時(日本時間 午前9時)を過ぎ、日付が変わった後に、このプラグインのショートコードが記述されたページに訪問があった場合にもキャッシュが更新される。 以下は、このプラグインを使って統計情報の表示させた場合の例である。 ・特定のプラグインの統計情報 ・作者毎のプラグインリスト

Posted in WordPress, ネット・PC, 自作アプリ | Tagged , | Leave a comment

トラックバックスパム対策に適したWordPressプラグイン

先日、突然、トラックバックスパムが急増して、削除しても直ぐにトラックバックスパムを受信してしまうような状況に陥ってしまった。 コメントは「DISQUS」を使用しているので、「DISQUS」側でコメントスパム対策を行なっているが、トラックバック(ピンバック)に関しては対策を行なっていなかった事が原因だが、やはり事前に対策を講じておくべきだったと反省している。 コメントスパムやトラックバックスパム対策と言えば「Akismet」が定番であるが、対象がトラックバックに絞られるため、もっとシンプルなトラックバックスパムに特化したプラグインの方が好ましい。 また、私のケースでは、記事へのリンクが含まれないサイトからのトラックバックを禁止する機能があれば十分だろうと思われたので、そのようなプラグインを探して見ると「Simple Trackback Validation」というプラグインが見つかった。 ところが、残念なことに「Simple Trackback Validation」は、長らくアップデートされていないので、出来れば使用は避けたい。 更に調べると、派生として「Simple Trackback Validation with Topsy Blocker」というプラグインが存在することが分かったので、こちらを使うことにした。 「Simple Trackback Validation with Topsy Blocker」は、「Simple Trackback Validation」の基本機能に加えて、「topsy.com blocker」という外部サービスを利用できるようになっている。 実際のところ、基本機能に違いがあるかは分からないが、単にリリースが新しいという理由で「Simple Trackback Validation with Topsy Blocker」を選んだ。 「Simple Trackback Validation with Topsy Blocker」では、トラックバックスパムの受信を拒否する以外に、承認待ちとして保存したり、スパムとしてマークして保存することも出来る。 スパム判定に「topsy.com blocker」という外部サービスを利用している点が、このプラグインの特徴であるが、これに加えて、次のような条件でもスパム判定を行う。 まず、IPアドレスをチェックする機能があり、トラックバックの送信元IPアドレスと、トラックバック元のサイトのIPアドレスを比較し、一致しなければスパムと判定される。 つまり、ツールなどを使って、実際のサイト以外からトラックバックが送信されたケースがこれに該当する。 また、トラックバック元のサイトに投稿へのリンクが含まれなければ、スパムと判定する。 これらの判定条件は、設定画面でON/OFFでき、かつ細かな設定が出来るようになっている。 「Simple Trackback Validation with Topsy Blocker」は、シンプルなプラグインではあるが、トラックバックスパムに対抗するための機能は十分に備えており、実際、これでトラックバックスパムを完全に拒否することが出来た。

Posted in WordPress, ネット・PC | Tagged , , | Leave a comment