hiromasa.zone : o)

2007/2/25 Sunday 投稿時の月齢:8.0  月名:九日月  潮汐:小潮 Moon:8.0[九日月]今日の心技体 : 低調期低調期低調期

PHP で遊ぼう(5) – PHPの書き方 – このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加

日記 - 晴れ ひろまさ @ 17:53

何から伝えれば、いいのか。 というわけでめでたく5回目。 🙂

プログラム言語といえども、それは人間が使う言語のひとつ。 しゃべれるようになるには、まずはいくつかの基本を押さえる必要があります。 プログラム言語に備わる機能は全て目的があって実装されているものですが、何に使うのかを説明する前に、いくつかは動作だけを先にお伝えする必要があります。 なぜなら、そうじゃないとサンプルが実行できないから。 ちょっとジレンマですが、少々ご辛抱ください。 🙂

目的がないとプログラム言語なんちゅーものは使わないものです。 というわけで、まずは目標をひとつ!。

ここのブログを読んでくださっている方は WordPress を使われている方が多いので、次の次の回で WP のプラグインをひとつつくることにします。 使うのは変数と if 構文といくつかの組み込み関数。 まじですか、と思う方もいるかもしれませんが、プログラムは単純な動作しかしなくても、ブログのようにたくさんの入力データがあると、実はそれだけでもプログラムは面白いものに変わります。 お楽しみに…。 (endunham さん、naoki さんコメントありがとうございました!)

さて前回は、PHP はファイルの先頭から順に実行が始まって、ファイルの終端もしくは明示的な構文の指定で、プログラムが終わるという説明でした。 いろいろすっとばして言うと、拡張子 .php のテキストファイルを適切に設定された Web サーバ上におき、そのファイルにブラウザからアクセスするとテキストファイルに書かれた PHP が動作し最後まで行くと終了します。

この辺が、Apache とか mod_php とか CGI とかその手の世界の話になりますが、まぁとりあえずインフラのお話はおいおいと。 どうせ、画面からのユーザ操作受けのところでいやというほどでてきます。

プログラム言語の世界では、とりあえずまずは hello world というプログラムを書くのが習わしになっています。 hello world って画面にだすだけのプログラムなんですが、この慣習の奥底には、画面さえでちゃえば、あとはなんとなかるぜというハッカー的な要素が潜んでいます。

たとえば、Java (Script じゃないよ)なんかだと、

  1.  public class HelloWorld {
  2.      static final String HELLOWORLD = "Hello World.";
  3.      HelloWorld() {
  4.          System.out.println(HELLOWORLD);
  5.      }
  6.      static public void main(String args[]) {
  7.          new HelloWorld();
  8.      }
  9.  }

こんなかんじかなー。 いや、もっとやれば getHello() とかつくるべきなんだろうけど、まぁまぁとどのつまり非常に複雑です。 Java などのオブジェクト指向プログラムとよばれる言語はこのようにとっかかりが非常に悪いのです。 この hello world が1行ずつ正しく説明できたらほぼ言語仕様が分かっていることになります。(System オブジェクトの PrintStream 型の out スタティックフィールドの println メソッドを呼ぶ、、とか冷静に考えるとここだけでも高度ですよね)

じゃー、PHP で画面に hello world とだすのは非常に簡単で、

  1.  <?php
  2.      echo "Hello World.";
  3.  ?>

となります。 これならなんとなくぱっとみすぐ分かります。 このようにスクリプト系言語は非常にとっつきやすいようにできています。

ではひとつずつこのプログラムの要素を見ていきます。 <?php、?>、echo が目立ちますが実は重要なのは「;」と改行とスペース・タブです。

PHP は <?php から ?> でくくられた部分をプログラムとして認識し評価実行します。 それ以外の場合は、”そのまま出力”します。 ここは後述。 echo というのは後ろに指定された文字等をこれまた画面に出力します。

では、「;」はなにかというと PHP にそれが1文であるということを知らせるものです。 二つ画面に hello world を出力する場合は、

  1.  <?php
  2.      echo "Hello World.";
  3.      echo "Hello World.";
  4.  ?>

となります。 文の区切りとしては改行は特に意味を持ちません。 あくまで文は ; で区切ります。 改行は人間がみやすいように挿入するだけですので、次のようにしてもまったく問題ありません。

  1.  <?php echo "Hello World."; echo "Hello World."; ?>

スペース・タブに関しては何文字いれても PHP は1区切りとなります。 逆に言うと次はだめです。 エラーになります。(たぶん)

  1.  <?phpecho "Hello World."; echo "Hello World."; ?>

<?php と echo がくっついちゃっているので解析できないわけです。 次は OK です。

  1.  <?php      echo "Hello World."; echo "Hello World."; ?>

この辺は人の書き方の癖になりますね。 ちなみに複数人の大規模開発なのではコーディングスタイルといった文書でこれらを統一するようにしたりします。

さてさて、この hello world を helloworld.php とかってして Web サーバに置いてアクセスするとブラウザ上にはめでたく Hello World と出力されるわけですが、実はこの Hello World は真実ではありません。

なぜならばブラウザは HTML を表示するもの。 そして基本的に PHP は HTML を送るようにデフォルトで設定されていますので、内部的にブラウザに HTML をおくるよーといいつつ、<html> タグすらない うそ HTML を送っていることになります。

タグを全部ふくめて、echo してもいいわけなんですが、PHP は上で書いたように <?php ~ ?> でくくられていないものはそのまんま出力するという機能があります。 これを使えば、

  1.  <html>
  2.  <body>
  3.  <p><?php echo "Hello World1."; ?></p>
  4.  <p><?php echo "Hello World2."; ?></p>
  5.  </body>
  6.  </html>

とすることができます。 <?php ~ ?> 部分が PHP の echo による出力とおきかえられるイメージです。 これが真の Web/PHP の Hello World かもしれません。 出力された画面を、ブラウザのソース表示で確認すると分かりやすいでしょう。

…でお気づきの通り、

  1.  <html>
  2.  <body>
  3.  <p>Hello World1.</p>
  4.  <p>Hello World2.</p>
  5.  </body>
  6.  </html>

という hellowordl.php でもまったく同じ結果を得ることができます。。

これでは PHP 使わなくてもいーじゃんって話ですが、その通りで echo は固定で文字をだしている文にはその実装された目的を達成することができません。 echo はプログラムで処理した結果を出力するもので、実行によって値が変わる場合にその真意を発揮します。

というわけで、やっぱりとっかかりはツマランですね。(笑) でも PHP の場合これでおしまいです。 次は変数と if を使って遊んでみましょう。 ちょっとは面白いかもしれません。 🙂

VB Script とエラーハンドリング このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加

日記 - 晴時々曇(2/-6) ひろまさ @ 4:34

ちょっと訳ありで VB Script でバッチ処理を書くことになり、いろいろ試行錯誤しました。 もう5年も前に一度扱ったことがあるのですが、正直もう VB 系は覚えていない…。

VB Script というのは、Windows で標準的に使えるスクリプト言語です。 IE の上でも使えますが、Windows に実装されている、WSH (Windows Scriptiog Host) 上でも使えます。 とどのつまり、昔からある .bat ファイルの強化版のようなイメージ。 ためしに、Windows 上で拡張子 .vbs の空ファイルをつくるとアイコンが変わり、そのままダブルクリックでスクリプトファイルが実行できるのが分かります。 🙂

@IT:運用 Windows管理者のためのWindows Script Host入門 第1回 WSHの内部構造 1.Windows管理にWSHを活用しよう

このバッチに代わるものとして、Windows環境ではWindows Script Host(以下WSH)と呼ばれる機能が提供されている。これはWindowsが標準でサポートするスクリプト環境で、テキスト・ベースのスクリプトを記述することで、GUIに頼ることなく、Windows環境でさまざまな処理を実行できる。

これつかうと、簡単に exe を起動したり、ものによってはアプリを自動コントロールできたり、結構個人で使うぶんには便利です。 Skype なんかも COM 対応なので WSH から動かせるみたいですね。 ムードメッセージ変更したりなんかが、UI使わなくてもできるようです。

さて、”バッチ処理” というのは(Windows のバッチではなく一般的な意味)、一括処理系の総称で、反対の言葉はリアルタイム処理となるでしょう。 たとえば、日中帯リアルタイムで入力されたデータを、システム終了後 “バッチ処理” で集計する、といった使い方になります。 1日の売り上げの集計(締め処理)などがこれにあたります。

でもって、VB Script でバッチ処理を書こう、というのが今回の課題になっていました。 VB Script が指定されるというくらいなので、それほど難しいバッチではないのですが、一応業務システム。 落とすわけにはいきません。

とりあえずちょこちょこ書きはじめてみたのですが、ひとつの壁に当たりました。

エラーハンドリングどーやるんだ?

プログラムにエラーはつきものですが、そのエラーには大きく2つあります。 正常系異常と異常系異常。 なんのことやらですが、文字通りで前者は、動き的にエラーが想定されていて、それが分かった場合にはしかるべき処理をするというのが正常系異常。 異常系異常は、単純にプログラムのバグによっておちることです。 後者は当然リリース時には修正されるものです。

ここでの問題は、正常系異常。 これはスクリプト言語系全般にいえるのですが、組み込み関数などが簡単に異常で落ちます。 まぁ落ちるのはいいとして、それを検知(エラーハンドリング)するのがあまりスマートなほうほうがとれない。

もちろん、プログラム続行不能な場合は落ちるしかないのですが、業務系のシステムでは落ちたことを適切に(正常に)ログに出力するなどして通知したり、そこまでの処理データを処理前にロールバックする必要があります。 これが正常系異常処理です。

以下、かなり前後を省略していますが VB Script で”ファイルを消す”処理です。(そらで書いているので間違っているかも。 イメージだけ)

objFS.Delete("hoge.txt")

こうやると、hoge.txt が消えてくれます。 hoge.txt が存在している場合は正常系。 じゃー、hoge,txt が存在しないこともあるとするとどうなるのかというと、このコードはここの部分でエラーで”落ち”ます。 スクリプトが停止してしまうので、失敗したことの通知すらできません。 なんたってバッチです、画面なんかでません。(画面にでただけでもだめだけど…) これじゃー困っちゃうのです。 🙂

というわけで、ちょっと小細工します。

If onjFS.FileExists("hoge.txt") Then
  objFS.Delete("hoge.txt")
Else
  log "hoge,txt が消せませんでした。"
  WScript.Quit 1
End If

ってなかんじで、ファイルが存在しているときだけ消すようにすると、まぁファイルなくてもおちなくなります。

でもね、気になりませんか? 存在確認をした直後、瞬間に、ファイルが消える可能性があります。 いや、100% に近い確率でありえませんが、それでも可能性はあります。 WP で起きても笑うだけですが、たとえば、これが原発とか病院のシステムだったらと思うと夜も眠れません。(←そんなもんつくったら寝るな!

というのは冗談ですが、ファイルが読み取り属性だったり、もちろん直後に消えることも少しは考えられますし、Delete がおちる可能性はまだまだあります。

Java や C# などのいわゆる高級言語では例外処理という考え方があり、なにかが落ちたらこの処理をはしらせろといった記述ができます。 また、それぞれのメソッドで何が起きる可能性があるかということも言語仕様として非常に明確です。

ちなみに、PHP も 5 から例外処理が構文的には書けるようになっていますが、組み込みの関数はごく一部しか例外を throw してくれないので、組み込み関数の場合はその戻り値をみて自前で例外をなげるしかないようです。 とりあえず PHP の場合あまり処理ごと落ちる関数がないので、これである程度なんとかはなりそうです。

というわけで、VB Script。 くさっても Visual Basic ゆずりということで例外処理くらいかけるだろーと思ってしらべたらでてきました。

On Error Resume Next
On Error Goto 0

…この Resume Next 構文より下はエラーが”なかった”ことになるらしい。 で、Err オブジェクトでエラー番号調べて処理しろと。。 Goto 0 はその解除ですか。 orz

On Error Resume Next
If onjFS.FileExists("hoge.txt") Then
  objFS.Delete("hoge.txt")
Else
  log "hoge,txt が存在しませんでした。"
  WScript.Quit 1
End If
If Err.Number <> 0 Then
  log "hoge,txt がなぜか消せませんでした。" & Err.Number
  WScript.Quit 1
End If
On Error Goto 0

そりゃないぜ、って感じですが VB だと使えた On Error Goto ラベル ってのが使えないのでこうするしかないようです。

であと、みため美しくないのもあるのですが、エラーを全部無かったことにしてくれるので、異常系異常すら素通ししてしまいます。 つまりスペルミスなどの構文エラーなどもなかったことになるのです。 これがコーディング中には非常に強敵。 そんなわけで、

If SCRIPT_DEBUG = False Then
  On Error Resume Next
End If

なんてしておくと便利かと思いました。

今回は処理も簡単な 1000 step 程度のもので、複数人でひとつつくっているわけでもなかったので、なんとなかりましたが、やはりあまり大規模なものには向いていないという感想を持ちました。

とりあえず本気(?)で使う場合は、よく落ちるメソッドがたくさんありますので、正常系だけでなく異常系もよくよく試験してから運用に回すことをお勧めします。 😛

2007/2/21 Wednesday 投稿時の月齢:3.8  月名:黄昏月  潮汐:中潮 Moon:3.8[黄昏月]今日の心技体 : 低調期低調期好調期

備えあれば、公式ドキュメント このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加

日記 - 曇時々雪 ひろまさ @ 11:37

プロがプログラム言語を使う上で一番必要なのは、なにはなくても公式ドキュメント。 たまに、現場でいきなり Google でインターネット全検索しだす新人君がいますが、みるとこ間違っていますよ。。 考え方を調べるのと、使い方を調べるのは違うもの。 考え方が必要なのはお勉強中のときです。 🙂

てなわけで、公式ドキュメント/日本語訳のありかをまとめてみます。

まずは公式 PHP マニュアル。 

PHP: PHP マニュアル – Manual

ECMAScript (JavaScript) 日本語訳。 助かります。

Under Translation of ECMA-262 3rd Edition

W3C – XHTML /CSS 1.0 日本語訳。 どら猫本舗さん。

ウェブ制作 – どら猫本舗

W3C – DOM1 日本語訳。 どら猫本舗さん。

DOM1仕様書

Mozilla の JavaScript 実装。 その他もあります。

mozilla developer center

Microsoft の JavaScript の実装と VBS とか WSH とか。

Windows Script

Sun Microsystems Java Development Kit。

JDKTM 5.0 ドキュメント

ファイルダウンロードできるものはしておくと安全ですね。 メモリスティックで持ち歩くのもありでしょう。 🙂

あ、セキュリティでメモリスティックさせませんか? うちもです。(笑)

あと、あんまり関係ありませんが SOHO などでインターネットに依存してお仕事されている方は、携帯電話用の通信ケーブルがあるとプロバイダダウンなどの事態に備えられます。

ドコモの FOMA なら、

FOMA USB接続ケーブル | 製品 | NTTドコモ

たしか、2千円しないと思いました。 接続先は、

mopera|サポートメニュー|アクセスポイント一覧

です。 特別な契約などは不要です。 通信料は安くはありませんが、メインプロバイダがダウンする確率を考えれば、緊急回線で2回線プロバイダ契約するよりずっとリーズナブルかと思います。

備えあれば憂いなし。 😛

2007/2/20 Tuesday 投稿時の月齢:3.2  月名:黄昏月  潮汐:中潮 Moon:3.2[黄昏月]今日の心技体 : 低調期低調期好調期

ぼくもおっこってました。 このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加

日記 - 曇時々晴 ひろまさ @ 22:43

え、あーあーあー。 テスト。 テスト。

すいません、若干忙しく更新が滞っております。 コメント返信、遅れまして申し訳ないです。 オフラインが続いておりますが、生きていますのでご心配なくデス。 携帯にメールくださったかた、ありがとうございました。 🙂

お詫びに(?)、小ねたを。

プログラム言語で愛を語る方法。

この愛が続く限り。 by Java

while(this.ai);

新しい愛をぼくと一緒にはぐくまないか。 by Java

love = new Love(new Hiromasa());

君のすべてが知りたい。 by SQL

select * from kimi;

僕色でそまれ。 by PHP

$kimi = str_replace("boy", "hiromasa", $kimi);

こわ!!

猫のトイレ。 by UNIX

cat nuko | wc

関係ない。。。 ← 前の会社の先輩のネタでした。

以上、お後がよろしいようで…。:evil:

2007/2/13 Tuesday 投稿時の月齢:25.7  月名:二十六夜  潮汐:若潮 Moon:25.7[二十六夜]今日の心技体 : 低調前不安定期好調期好調前不安定期

サーバおっこってました。 このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加

日記 - 雪のち晴 ひろまさ @ 20:21

またまた、MySQL くんがご機嫌をそこねたようで数日サイトがとまっておりました。 アクセスしてくださったかた、ごめんなさい。。

結構ここのところ頻繁に出ているのですが、

Host is blocked because of many connection errors. Unblock with ‘mysqladmin flush-hosts’

ということで、ここの Web サーバからの接続が、使っている MySQL に拒否されてしまいます。(MySQL は正常に動いている) なんでかってーと、

MySQL AB :: MySQL 4.1 リファレンスマニュアル :: A.2.5 Host ‘…’ is blocked エラー

これは、mysqld が ‘hostname’ ホストから多くの接続エラー(max_connect_errors)を受けた場合に発生します。max_connect_errors 大量発生後、mysqld は何か問題(クラッカーからの攻撃など)が発生したと判断し、このホストからの接続を拒否するようにします。これを解除するには、mysqladmin flush-hosts コマンドを実行します。

ということで、原因はおそらくですがこの Web サーバが DoS をうけているとかそんなところだと思います。 MySQL が自衛しているわけですね。(ログをみるとうちではなさそう)

共有サーバなのでしかたないところですが、またおちてたら、そのうち復活しますので(メールして手動でサーバ管理者の方に接続を flash してもらっているのです)ややお待ちいただければと思います!。

そういえば、WordPress が PHP5 標準で使える組み込みデータベースSQlite データベースもサポートするというチケットがあったのですが…

SQLite support for wp2.0

02/04/07 21:50:13 milestone deleted.

消えちゃった? 🙁

2007/2/4 Sunday 投稿時の月齢:16.4  月名:立待月  潮汐:大潮 Moon:16.4[立待月]今日の心技体 : 好調期好調期低調期

JavaScript のお勉強.. このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加

日記 - 雪時々曇 ひろまさ @ 14:44

AJAX 以降脚光を浴びてしまった JavaScript ですが、ぼくはこれが大の苦手です… 基本的にバックエンドのプログラムが好きなので…。 Web やっている人でも結構そういう人は多いのではないかと思います。

境界を越える: JavaScript の言語機能 / プログラミング言語の「醜いアヒルの子」を探る@IBM

ほとんどの Web 開発者は、1 度か 2 度は JavaScript を呪ったことがあるはずです。この悩める言語は、DOM (document object model) と呼ばれる複雑なプログラミング・モデルの重みで沈んでおり、実装やデバッグのためのツールは貧弱であり、その上ブラウザーによって実装が異なります。最近まで、多くの開発者にとって JavaScript は、好意的に言っても必要悪であり、ひどい場合はオモチャにすぎませんでした。

100回は呪っています… 🙂

というわけで、苦手苦手いってもしょうがないのでお勉強を。 上の IBM の文書はその後「しかし~」で続き JavaScript の仕様を他の言語(Java)と比べたときの特殊な点と利点を列挙しています。 分かりやすいです。

ちなみに、たまに JavaScript のことを Java っていう人がいますが、まったく別な技術なので区別して呼んだ方が良いです。 昔、JavaScript の技術者を探すのに Java の技術者を探していると電話している人がいて、混乱をよんでいました…

まずは基本からということで、JavaScript とはなんぞやというとことですが、「ECMA-262 / ECMAScript」の実装のひとつということらしいです。 言語仕様自体は ECMA というヨーロッパの標準化団体で規定されています。

Under Translation of ECMA-262 3rd Edition

この文書は、 Standard ECMA-262: ECMAScript Language Specification (3rd edition, December 1999) の邦訳を試みるものです。

その、ECMAScript の上で HTML の処理を行う DOM や通信系、プラグインとの通信を実装したものが JavaScript という理解をしました。 DOM は W3C で規定されています。

Document Object Model (DOM) Technical Reports

AJAX でお馴染みになった、XMLHttpRequest などのオブジェクトは基本的に各ブラウザの実装のようです。 調べてて分かったのですが、AJAX のきもとなる XMLHttpRequest は、もともと Microsoft InternetExplorer の独自拡張で他のブラウザが追従したもののようです。(なので生成方法が違うし、ECMAScript的には違ってもいい)

XMLHttpRequest@Mozilla

XMLHttpRequest は、Microsoftによって作られ、Mozillaが採用した JavaScript オブジェクトです。 これを使ってHTTPを通してデータを簡単に回収することができます。

もともと、Web をぴょこぴょこ動かすのは Microsoft が好きだったような気がするのですが、Google がつかうまでうざい対象とされていて…、なんか Microsoft も気の毒ですね。 いまじゃ、XMLHttpRequest なんか削除しちゃいたい気分でしょう… 自分の首をしめるオブジェクトいれたの誰だ!って怒られてたくらいにして(笑)

というわけで、JavaScript のお勉強はまずは ECMAScript の仕様を読むところから始まるらしい… 長い道のりです。。

プロトタイプ型のオブジェクト指向言語というらしい、、それで prototype.js なんか?。 え、配列の out of bounds ないんですか、勝手に拡張される!? なんだそりゃ。。 うはー、外からメソッド追加できるんだ、、意味わかんね。(←投げ出しそう

まさにスクリプト言語の中の、スクリプト言語。 なれるまで相当かかりそうです。

DOM に関しては、こちらのソースが簡潔にまとまっていてかなり参考になります。

bytefx

Bytefx is a fast, lightweight and crossbrowser library with some useful special effect for your web pages.

JavaScript の開発環境は aptana が非常に便利なので、こちらにたよりながらもうちょっと探ろうと思います。

2007/2/3 Saturday 投稿時の月齢:15.7  月名:満月  潮汐:大潮 Moon:15.7[満月]今日の心技体 : 好調期好調期低調期

小樽なると このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加

日記 - 晴のち雪 ひろまさ @ 20:45

札幌市からくるまで1時間くらい(住んでるところにもよりますが)の、おとなり北海道小樽市。

観光だけでなく地元の人にも人気らしい「なると」というお店。 若鶏のからあげが食べられます。 ぼくもなんだかんだ年に1回くらいいくかも・・・。 🙂

というわけで本日行ってきました。

なると

お寿司もあります。

なると

おなかいっぱい。 😛

小樽観光の際には行ってみるといいかもしれません! タクシーでなるとっていえばすぐ連れて行ってくれることでしょう。

いま写真をアップロードするのに携帯を見てたら、撮っていて載せてないのがあったことが発覚。

メガマック

発売2日目くらいに買って撮ってたのに、完全にブームに乗り遅れの図。 :shock:

PHP で遊ぼう(5) – プログラムのエントリポイントと生存期間 – このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加

日記 - 晴のち雪(4/-6) ひろまさ @ 0:34

と、めずらしく2日続けて遊ぼうシリーズ。 何を隠そう、すでに5回目。 いつも、書き始めるんですが脱線してなかなかプログラムのことまでたどり着けません。 😛

なにやら難しそうなサブタイトルがついていますが、なんのことはありません。 でも意外と入門書には書いていない事実。 今回は PHP というより若干 Web プログラミングよりのお話です。

PHP で書かれたプログラムの多くは、拡張子 .php となっているただのテキストファイルです。 これをそれなりに設定された Web サーバ上において、ブラウザからそのファイルに対してアクセスを行うと動作するといのは、なんとなく分かるかと思います。

じゃー、そのプログラムはどこから始まって、いつ終わるの?というのがエントリポイントと生存期間です。

まずはどこから始まる(エントリポイント)かというお話ですが、これは”そのファイルの先頭”から実行がはじまります。 そして、”1行(文)”づつ基本的に上から下に向かって解釈しながら走行し、ファイルの終端、もしくは exit や die といった構文でプログラム中で明示的に終了を命令されたときに終了します。(ちなみにこういった、ファイルの先頭から実行が始まる言語はエントリポイントが”ない”言語というそうです。 ファイルの先頭からはじまらず、ある特定のキーワードの部分からはじまる言語も多数あります。)

ちょうど人間が、文章を読み進めるがごとく、PHP も指令が書かれた文書を上から下に読み進めるイメージです。 若干違うのは、上から下に進んでいるときに、上にもどったり別の文書(ファイル)を読みに行ったりすることです。

Web / PHP の場合、その読み進めていく課程で行ったなにかしらのの”出力”結果が、ブラウザにそのプラグラムの動作として表示されます。 ブラウザは HTML を解釈して画面を表示するソフトウェアですので、一般的に PHP の出力結果は HTML になります。

ということで、HTML の出力をおえると PHP のプログラムはその役目を終えます。 なので、その生存期間は1秒やそこらです。 WP だと 3~5 秒くらいですか。

ポイントは、次のアクセスは、たとえ同じプログラムでも、さっきうごいていたプログラムとはなんら関係がないということです。 動作中に処理された値などは、終了と同時になくなります。 残るのは、ブラウザに表示された結果だけです。 ブラウザに表示された結果はユーザが消さない限りのこりますので、ユーザの手元には見えますが PHP 的には、生存期間がおわったものはすべて無かったことになります。

それでは、なぜ WP なんかが投稿したエントリを覚えていれるかというと、WP のプログラムはその実行結果を忘れないように MySQL というデータベースに保存するためです。 シンプルな掲示板のシステムなどはファイルにデータを書き出すことも良くやります。 このように生存期間の短い Web / PHP のプログラムでデータを保存したい場合は、ディスクなどの外部記憶を使う必要があります。

さて Web / PHP で永遠に動き続けるプログラムがかけないかというと、そういうわけでもありません。 そういったプログラムにブラウザでアクセスした場合は、ブラウザの地球儀がぐるぐる回り続けそのプログラムは動き続けます。 ただしHTML の出力においてこういった永遠に動き続ける動作をしたところで意味はありませんし、また想定されていないため、ブラウザのタイムアウトや PHP 自身によりこういったプログラムは強制的に落とされます。

この辺が、Web のプログラムになれていない人には分かりづらいとこですね。(職業でコンピュータやっている人でも、Web に携わってないと分からない人が多い)

一般の Windows などのPCで動作するクライアントのソフトウェアは、画面がみえているうちは生存しています。 操作が無くてもプログラムは同じところをぐるぐるぐるぐる動き続け、ユーザからの入力などを待ち動き続けます。 終了はユーザが明示的に終了の操作をしたときや、OS からの指令がきたときです。 なのでこのときまでデータなどは、外部記憶に頼ることなく保存されているわけです。

こういった生存期間が長いクライアントソフトウェアは C++ や C# でかかれることが多いわけですが、同じプログラミング言語ですから PHP だってかけないことはありません。 PHP は Web で使われることを想定していますので、標準で Windows の画面にウインドウをだしたりはできませんが、ライブラリと呼ばれる拡張をつかえば、生存期間がながいぐるぐるぐるぐる動き続けるクライアントソフトを作ることも可能です。 こういった意味合いで区別するため上では「Web / PHP 」といった書き方をしてみました。

また、逆に Web 系のシステムでここでいう生存期間が長いソフトウェアをつくれないかというとそうでもなく、Java 言語などでは、一般的にアプリケーションサーバと呼ばれる仕組みをつかいアプリケーションをサーバ上で生存させ続けることもできます。

また話が脱線してしまいましたが、、Web / PHP に関してはまずは次のように覚えておけば間違いありません。

プログラムはファイルの先頭から、

どこかで終わったら無くなる

HTMLを出し終わったら大満足

せっかくですので、我らが WP のスタートポイントを書きます。 ブログルートにある、index.php です。 上から気合いで読み続けていけば、そのうち終わります。 それがファイルの終端だったか、exit だったかは忘れました。 😛

2007/2/2 Friday 投稿時の月齢:13.8  月名:待宵月  潮汐:大潮 Moon:13.8[待宵月]今日の心技体 : 好調期好調期低調期

PHP で遊ぼう(4) このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加

日記 - 雪のち曇(-2/-5) ひろまさ @ 0:40

WordPress を深くいじっていると避けては通れない PHP。 操れたらよりいっそう、WP を自由に使うことができるようになります。

プログラム言語に関してはいくら入門本を読んでもよ~わからん、そんな声も聞こえてきます。 かたやノリだけでかくような人もいて…、この違いは何か!!

条件反射...

いや、そーいってしまってはみもふたもないのですが、案外真実です。

プログラムをかくということはやりたいことをパターンにあてはめることです。 やっている人間は、データ格納の方法、ループの方法、条件の選択の方法の3つを、やりたいことに当てはめられます。 実はこれは簡単で、変数/配列の使い方、制御構文の使い方、if の書き方を知っているだけです。 あとは、それぞれにまつわる小技です。

で、なんで入門書をみてもよーわからんかというと、あんまりこの “当てはめ方” というのが本には書いていません。 それぞれの”使い方”はでているんですが、どうも使いどころまでは書いていないのです。 「変数は値を入れる箱のようなものです」…、だからなんなんだ、みたいな。(笑) なので、理解はできても何かはつくれない…、そういったことなんだと思います。 サンプルコードをみせて、という形だけなので案外スパルタです。

昔はおもしろおかしく、当てはめ方が書いた本/雑誌がいっぱいあったのですが、最近はいまいちなくなってしまったようで、できるできないの格差がひろがってしまったように思います。 インターネットに情報を発信する人も、本人的にはあまりに普通すぎてネタにしないのもあるのかもしれません。

ないなら、ためしに書いてみようかと思い立ちました。 🙂

たとえばですが、ぼくがかく 1000 step (行) 程度のプラグインの規模くらいだと、骨の部分は3論理エラーくらいで通ります。 実はコードを全部かいてから、エラーフリーで一気に通そうとするのが若干趣味な部分もあるのですが、、いや、当然のようにぼくの場合無理ですよ。(笑) まぁ3つくらいひっかかるくらいでいけます。 もちろん、表示位置の調整とか細かい部分はランアンドトライの繰り返しです。

なんとなくすごそうなかきっぷりですが、単純に条件反射でやっているから間違わないのです。 どのプログラムもたいていは同じパターンでかけるから、間違いようがないというか。

オブジェクト指向というプログラム言語の世界では、デザインパターンという言葉があります。 こういうときには、こういうふうにオブジェクトをくめばいいというパターンを集めたものですが、ここで書きたいのはもっと手続きのパターン。(オブジェクト指向だって、中の細かい処理は手続き型です)

プログラムをかくのに必要なのは、たった8この知識!(たぶん) 定数、変数演算、フラグ、配列、ループ、ループカウンタ、if、関数 。

ついでに、Web についても覚えちゃえってことで、PHP を使ってなにかやってみようかと思います。 まぁ1から全部つくって見てくれの良いものはなかなか大変なので、WP のプラグインをお題にしてもでもいいですね。 😛

こんなんやってくれ、とかありましたらコメントいただければ!

このサイトについて

このブログは引っ越しを行いコンテンツはフリーズしています。hiromasa.anotherへどうぞ。

Powerd By WordPress

We (Heart) WordPress

WordPressME Logo
WordPress Plugins

ブログ内検索

Todays Popular

WordPress Ring

はてなリング - WordPress -

情報

19 queries. 0.198 seconds.

このページの先頭へ