Why study PHP? 何故PHPなのか その1

まず、自分でウェブページを作ろう、という気が全然無い人はPHPを勉強する必要は100パーセントありません。(爆)

まずはWebページのなりたちから 15年ほど前にウエブページを作ろうと思えば、覚えるべき事はただひとつ、HTMLというマークアップ言語を勉強すればよかったのです。 これで

<html>
<header>
<title>my first web page</title>
</header>
<body>
<p>Hello World</p>
<p>This is my first web page!</p>
</body>
</html>

とnotepadなどのテクストエディターで書いて、hello.htmというファイルにセーブし、ブラウザーでこのファイルを読めば画面上に

Hello World
 This is my first web page!

 と出たのでした。(今でも出ますが)(ちなみに上の <p> は段落タグ(paragraph tag)です。 </p>タグまでが一段落 

基本的にhtmlはタグを使って表示内容を記述します。 ほとんどのタグは<tag>中身</tag>のペアで記述されます)

 HTMLとはHyper Text Markup Language の略です。発足当時の一番の特徴はハイパーリンクにより、複数のページを簡単にリンクすることができる、というものでした。 Wiki ページのようなものが簡単にできるわけです。

たとえば、

<html>
<header>
<title>link demo </title>
</header>
<body>
<a href=”mypage.net/nextpage.html”>Go to next page</a>
</body>
</html>

上のように書いたページに現れる”go to next  page” というリンクをクリックすると他のページに飛んでいく、という、印字された文書しかなかった当時としては画期的なアイデアでした。(今まで読み方のパラダイムがシーケンシャルからランダムへとシフトしたのです)

(<a>はアンカータグと呼ばれ、テキスト、イメージなどをリンクするために使われます)

 基本的にブラウザに表示したい表示内容はすべてhtmlで書くことができます。 ただ、websiteの表現方法が発達するにつれ、 表現の仕方=スタイル(たとえば、この文章は枠で囲もう、とかこの部分は大文字で背景は赤くしたいとか) については書き込む内容とは別にすべきだ、という思想からCSSというスタイルシートに纏めて書き込み、これをhtmlファイルから参照するというのが正しいマナーになっていきました。

CSSはカスケードスタイルシートと呼ばれるものでこれに内容をどのように表示するか、という指示が記述されます。たとえば

 p {font-size: large; }

 という記述がCSSファイルにあると、上のhello world はブラウザーに普通より大きな文字で表示されるわけ。

CSSについてはCSS Zen garden ページを見てください。ここでは同じHTMLを使いながらCSSを置き換えることによって、ページの表現がこんなにかわります、という実例の閲覧ができます。 メニューアイテムのリンクはすべて同じhtmlの内容。 参照されるCSSが異なるだけです。

このhtmlとCSSを使えば熟練したWebページデザイナならかなり立派なウェブページを作ることができるのです。 ただ、このようにして作られたWebページは静的なページです。 CSSにはカーソルがテキストやイメージの上に来たときに、その表現方法を変えられる機能があって、選ばれたメニューアイテムの色を変えたり、文字を大きくしたり程度のことはできますが、インターアクティブなページを作ることができません。(たとえば、メニューアイテムにカーソルを合わせると、そこからさらに別のメニューが開いていく、[flyout menu]と言われるようなもの) 

インターアクティブなページを作るにはページにスクリプトを実装する必要があります。スクリプトというのはブラウザに何からの現象が起こったときにhtmlの中身自体を変更してブラウザの表示内容を変えてしまう仕組みを記述したものです。

ここで言う現象とは「新しいページを開いた」「現在のページを閉じた」「ユーザーが画面上のどこかをクリックした」「ユーザーがボタンをクリックした」「ページが開いて一定時間が過ぎた」などなど

スクリプトの種類には二つあります。 ひとつはブラウザー側で実行されるスクリプト。 もうひとつはサーバー側で実行されるスクリプトです。 それぞれ Client side script, server side scriptと言います。

 ブラウザー側で実行されるスクリプトはJavaScriptが代表的なものです。 (ところで、巷にいうJava というプログラミング言語と、このJavaScriptはまったくの無関係です)

そしてサーバー側のスクリプトの代表的なもののひとつにPHPがあります。

というわけでやっと、PHPの入り口までたどりついた。 ハアー

以下次号

PHP で Hello World

<?php

echo “Hello World\n” ;

?>

お粗末でした。

<php? : PHP コードは<php? ではじまり、?> で終わる

echo : 以下の文字列を出力する print もほぼ同じように使える

文字列の中に\で始まるエスケープキャラクターを入れることができる。 \nで改行

ステートメントは ;  で区切る

57歳の手習いでPHPを勉強しているわけだが、誰かに教えることで習得度が上がる、という先人の知恵を拝借。周りには誰も教えて欲しいという人がいないので、ここに書いておこう。

Way of wayfinder

ModXのWayfinderはナビゲーションリストを作るときに、base_urlからの相対パスを出力する。 よってテンプレートに<base>tagで [[++site_url]]指定をしてやる必要がある、これを指定せずに階層の下がったページからナビゲーションしようとすると システムはカレントパスを相対パスの前に追加するからリンク先が存在しない事態になる。

Make sure you have the following in the the <head> section of your template:
Code:

<base href=”[(site_url)]” />
without the above code in the site template, the navigation menu  wayfinder will generate will not render correct path.   This is because Wayfinder generates the path from base url. If you left <base> tag out, the system will always start from current path.
Let me describe what had happened to me.
Target document tree looks like below;
one – two
  |_    three
  |__ four
  |__ five
The wayfinder sinppet generates a list with correct hrefs and  works fine in the page one.
When navigated to page two, then the links generated for other pages are incorrect.
if you are in second level, then the path will start as http://…/one.  the wayfinder adds /one/three.  Therefore the generated path is http://…../one/one/three,  rather than http://…./one/three  etc., (“one/ “is repeated twice)
Simply adding the <base href=”[[++site_url]]”> line at the <head> section of the template solve the issue.

趣味の将棋サイトをModxを使ってぼちぼち構築

現在 officelive で動いている我がサイトを別サイトに移し、PHPとMySQLベースで 再構築しようとしているわけだが

今回 ModX revolution をインストールしたがその際間違えてEvolutionを削除し、そのためホームページがまっしろになる。

 まあいいか。まだProductionにはほど遠かったし、これからはRevoの時代!!
 
インストールはしごく簡単でやんした。
MySQLに空のテーブルを用意し、サーバーのURLやログインパスワードなどを前もって用意しておくぐらいであとは setupをURLの最後に指定してブラウズするだけで楽勝の手合い。
Revolutionは使いやすそう。 今のところ、サーバー(Godaddyエコノミープラン)との相性も良い感じ。
バックエンドのインターフェースが”楽しそう”←アブナイ
 
 
それに今頃わかったが、 ZIPファイルをサーバーホストにuploadして ホスト側のファイルマネージャーを使って解凍することができるのだった。 今までデスクトップで解凍してアップロードしていたわけで、それに比べるとかなりの時間の節約になった。

今日の一言をメインループから隠してみる

Today’s quote と言うことで、名士の名言をポストしているのがだいぶたまってきたので、メインのリストから隠してみた。 Editorで index.phpをいじってやらなければいけない。 具体的には

<?php query_posts(‘cat=-n’);  ?>

 を 

<?php haveposts()

の前に追加する。 nはカテゴリーID。 Quoteカテゴリーは自分の場合は5だったので 

<?php query_posts(‘cat=-5’); ?>

Quote Tagをクリックすると名言のみがリストアップされる。

いいじゃん

modx を学習中 Site の 移動

modx で作ってみたテストサイトを ローカルサーバーからリモートサーバーに移動してみる。

インストラクションを見ると結構面倒くさいか?

Moving Site To Another Location

肝は.htaccess でベースURLをしっかり規定しておくこと。ルートから(本当のルートからはかなり下の階層で、それもmodxがしっかりdefaultのURLとして認識してくれるわけだけれど)Modxというフォルダーを作って、そこにダンプした場合は’/’の指定を’/modx’に変えてやる必要が。

http://myhomepage.org/modx

と打ち込みたくないので、ルートのindex.phpを

<?php
header( ‘Location: http://www.myhomepage.com/modx‘ ) ;
?>

としてフォワードするようにした。

CSS の指定パスが一瞬わからなくなったが、Resource に CSS として入れてやればよい、という記事を見つけ、早速実行。 これは便利。

[Tutorial] Use CSS as MODx document (now compatible with IE)

alias をたとえば、   style.css と設定してやると テンプレートからの参照が url=”style.css” となる。 簡単、快感! しかしながら、このページをpublish するのを忘れ、マネージャでログインしているときにはCSSが参照されるのにログアウトしてサイトにアクセスすると、CSS が反映されない、という不具合?で小一時間悩んだ。 ああもったいない。

wampでPHP と MySQL を導入する

自宅の pc のVistaにはIISを実装したが、netbookについてきたXP Home Editionにはwampserverでアパッチ・PHP・MySQLを導入し、 PHP fileなどのエディターにはちょっと重いがNetBeans6.8をインストール。こちらのマシンのほうは、OS以外は割りとMS色を払拭している (ただしOffice Suiteは仕事の関係上、どうしても必要なのでXPにとどまっている。 この制約がなければubuntuにするところだ)

 
Wamp=W)indows A)pache M)ySQL P)HP server
 
WampServerをインストールするとタスクトレーにアイコンが出来、クリックするとサーバーの起動・停止などが簡単にできるような構造になっている。また、データベース管理にはphpmyadminが組み込まれていて便利。で、http://localhost/phpmyadminをブラウザーで開いてい見ると、今回も2点ほど警告が出たが、IISの導入とは種類が違った。
1)rootのパスワードが設定されていません。危険です。
2)リンクテーブルのサポート機能が、無効になっています。
 
というもの。 早速修正してみよう。
1) password の入力はphpmyadminの画面でPreviledgeのタブを選ぶとuser listが出てくるのでここで修正した。新しいパスワードを入力して、セーブしてこれで終わり、と思ったら、途端にphpmyadminからMySQLに接続できません、パスワード無しの設定になってます、と文句を言われた。 なるほど。MySQLのパスワードは変更したが、phpmyadmin自体のMySQLアクセスの設定がパスワード無しのままになってしまっている。のでデータベースを開くことができなくなったわけ。
これを解決するためには config.inc.phpをエディターで開き、パスワードを設定する行を探し出す。 設定したパスワードがmyPwdだった場合、
$cfg[‘Servers’][$i][‘password’] = ”;
こうなっていたのを
$cfg[‘Servers’][$i][‘password’] = ‘myPwd’;
こうすることによって解決!
 
2) config.ing.phpにはコメントアウトされた行が多々あって、それらの行でリンクテーブルを処理するために関係のあるところを有効にしていけばよいわけだが その前にリンクテーブル用のデータベースを作っておく必要がある。
a) phpmyadmin の Import tabから ./script/create_tables.sqlをインポートしクエリを実行。するとphpmyadminというデータベースが出来上がる。 これを確認後、
b) config.inc.phpで以下の行を有効化してセーブ。(コメント[/*]をはずす)
$cfg[‘Servers’][$i][‘pmadb’] = ‘phpmyadmin’;
$cfg[‘Servers’][$i][‘bookmarktable’] = ‘pma_bookmark’;
$cfg[‘Servers’][$i][‘relation’] = ‘pma_relation’;
$cfg[‘Servers’][$i][‘table_info’] = ‘pma_table_info’;
$cfg[‘Servers’][$i][‘table_coords’] = ‘pma_table_coords’;
$cfg[‘Servers’][$i][‘pdf_pages’] = ‘pma_pdf_pages’;
$cfg[‘Servers’][$i][‘column_info’] = ‘pma_column_info’;
$cfg[‘Servers’][$i][‘history’] = ‘pma_history’;
 
参考リンク 
http://www.wampserver.com/phorum/read.php?2,63233,63241
 
思うのだが、問題が出た場合は単純にググるのではなく、まずは製品のサイトに行ってそこでサーチをかけるのが解決法発見の早道のようだ。 今回のものは割りと煩雑に起こっているらしく、単にググると解決法まで載っていない、ノイズのような記事が沢山引っかかってしまう。

iisで導入したPHPとMySQL

そもそもことのきっかけが4月に自宅のパソコンの Vista 上にある IIS サーバーを有効化してみたところが話の発端なのだが、 これをやって、fast CGI もついでに有効化したら、なんだか勝手に Web Installer というのが導入され、localhost 上で、PHP やMySQL が設定可能な状態になっていた。これって、ASP.net や MS SQL を開発しているマイクロソフトからしてみれば、競合製品だと思っていたのだが、IIS の上では、みんな仲良く動きますよーということらしい。 それどころではなく、この Web Installer で、WordPress や Joomla! や Drupalなど、 PHP+MySQL  を使ったサイト構築ツールが各種導入できるようにまでなっている。  これには驚いた。 自分のサイト構築法は HTML と CSS +若干の javascript どまり、サーバーサイドのプログラムは手を出さないでおこうと思っていたのだが、ここまで環境を整えられると食指が動いてしまう。 (といってもつい最近まで名前を知っていたのはWordPressくらいで、 Joomla! ってJavaScriptのライブラリーかなんか、PHPも やたら?マークがついて使いにくそうなツールだなあ、と思っていたくらいでこのあたりの知識はこの1ヶ月くらいで得たものだ。)

遅ればせながらPHPとMYSQLの教科書、本屋でなるべく薄くて簡単そうなものを選びとりあえず読んでみて、なんとなく理解したと思ったので、localhost/phpmyadmin を動かしてsql 言語を試してみたりしている。

そこで気になったのがウォーニングメッセージ

1.mcrypt が導入できていません云々
2.クライエントとライブラリーのバージョンが異なっています。

という二つのメッセージが出る。 気色が悪いので、消すことはできないか、と調べてみた。

結論のみ書く。 1の問題については、Windowsに導入されたPHPはコントロールパネルのプログラムの追加・削除のパネルから変更を選んでオプションのmcryptのエクステンション導入にチェックを入れるだけで解決。(ググッてヒットする解決策は php.ini の記述をいじる、ファイルをコピーするなどの手作業を伴う。 しかしそういう作業をする必要はなかった)

2の問題はええ加減にしてくれ、である。 バージョン違いのコンポーネントは勝手に組み込まれたのだ。 これをエラー表示するとはどういうことかいな。

mysql のフォーラムに、このバージョン違いは実害はない。 phpmyadmin のフォルダーにある main.php にある当該コードをコメントアウトすればよい、という記述があったのを発見。 これを参考に、 バージョンの先頭3文字を比較して違っていたらエラーを表示する、というプログラムの部分を見つけることができたので(5.0と5.1を比較して警告を出している)、これを先頭1文字のみの比較として、とりあえずエラー警告を消すことにした。

具体的にはmain.php の341行目
... 0, 3)...
とあるところ2箇所、3を1に変更するだけである。 原因を直さないで、表示をさせないだけの方便ではあるが、これでウォーニングメッセージは消える。

この入門本、最初に「wordpress を使えば、完璧なブログサイトを30秒フラットで作れるようになっているこのご時勢、簡単に習得できるから、とか、無料で入手できるから、だけの理由だけで PHP と MYSQL を習得する理由にはならない。」と書いてある。、じゃあいったい、自分としてはどうして習得する必要があるのか?ということになるが、今のところ、知的好奇心から、という答えしか浮かばない。 というわけで、すぐに挫折するかも。

WordPressに統合中

昔、はてなで書きつづったものをWORDPRESSに統合してみた。 はてなのエクスポートでMT・TP書式を選びTXTファイルに落とした後、念のため自宅PCのテストサイトにインポートしてみたら、なんとポストの日付がすべて1970年の1月1日になるという不具合があったが、 この記事を見て解決。  この件に限らず、エラーメッセージやら現象の記述を検索窓に貼り付けてグーグル検索すると、あっという間に正解にたどり着けることが、インターネット関係の話題に限らず最近すごく多くなってきた。 ものすごく楽をしている感じ。

これで日付の問題は解決したが、ポストにつけられたコメントが反映されない。 こちらのほうはいろいろググッてみても同じような問題の報告はあっても解決したという、話がまったく見つからない。  MTのファイル書式の仕様を探し出し、これをはてなの出力と比べてみたが特に問題はなさそうだ。 これは困ったと思いながらコーデックスを眺めていたら、まったく別のコンテクストの説明で「この対策はサーバーがアパッチのときのみ有効」という一文に出くわした。 自宅のPCのlocalhostサーバーはiisである。 これはもしかしたら、と思い、だめもとで直接このサイトにアップしたところ、あっさりコメントも読み込んだ。 理由は不明なるもLINUX base のサーバーではちゃんとインポートしてくれたみたいだ。

あちこちに書きなぐっていたブログをひとつにまとめる、というのはポストするのには便利ではあるが、全体を見回してみるといかにも雑然としている。

Crashing wordpressという、 ティーンが書いたような団子文の文章で、ものすごく読みにくい本を読んでいるのだけれど、これにループをいくつも使ってカテゴリー別にページを作り分けたり、特定のカテゴリーをメインループから除外したりするやり方が説明してある。 もう少しWordPressの使い勝手がわかってきたらこのあたりをいじって少し整理をしないと、わけがわからなくなりそう。