このページについて

知識なんてなくても使えるとはいえ、やはり自分の使うもの・ダウンロードするもの・サーバーにUPするものについて、最低限理解しておくことも大事だと思います。簡易ではありますが、PHPについてとdream.phpの仕組みの説明です。

ただ理解しないと使えないわけではないので、ここに書いてあることがわかんなくても、dream.phpは使えます。

PHPとはなにか

PHP
動的にWebページを生成するスクリプト言語(プログラミング言語)の一つです。PHPで、掲示板やチャット・ブログ・アクセスカウンターやアクセス解析・メールフォームといったスクリプト(簡易のプログラム)を作成することができます。

<?php?>で囲われた部分がPHPのコードになります。

JavaScriptとPHPの違い

JavaScriptもPHPも、同じくスクリプト言語ですが、違いがあります。

詳しく

普段サイトを見るという行為は、1つのでかいパソコン(サーバー)に保存されたファイルを、閲覧者が各々ダウンロードして見る、という状態です。

あなたがJavaScriptでなにか命令文を書いてサーバーにアップロードしたら、その命令は各々のパソコン(のブラウザ)で実行されます*2。各々のパソコン(のブラウザ)は、その命令を正しく実行するかもしれませんし、命令を誤解して命令を下したひとの思惑とは違うことをするかもしれませんし、閲覧者は自分のパソコンにその命令を無視させることもできますし、そもそも命令内容を理解できない場合もあります。つまり、どういう風に命令が実行がされるのか、閲覧者の環境の数だけ可能性があります。

一方であなたがPHPでなにか命令文を書いてサーバーにアップしたら、その命令はサーバーで実行されます。閲覧者は、そうやってサーバーがPHPの命令通りに差し替えた後のデータをダウンロードして見ることになりますから、JavaScriptとは違って閲覧者の環境に左右されることは絶対にありません。

名前を登録し、それを表示する仕組み

  1. 閲覧者がフォームに内容を記入して送信する*1
  2. 内容を閲覧者のパソコンのブラウザのクッキーとして保存する
  3. 閲覧者のパソコンのクッキーを読み込む
  4. 読み込んだクッキーの内容を出力する

だいたいこんな感じのことが起こっています。

HTMLは、名前の通り書いてある文章の構造をマークアップすることしかできませんので、保存読み込み出力という動作をどうにかすることはできません。保存読み込み出力をコンピューターに実行させるのが、JavaScript・Perl・PHPなどといったスクリプト言語で記述されたスクリプト(簡易プログラム)です。

JavaScriptの場合

ボタンをクリックする動作を読み取ったブラウザがフォームに入力された内容を、読み込んで解析・整形してそれをクッキーに保存します。そして、そのクッキーを読み込んで整形し、指定した場所に表示します。これが全て、スクリプトの働きによってブラウザの内で行われます。

PHP(dream.php)の場合

JavaScriptと違ってサーバーを介します。

先んじて説明しておきますと、ブラウザとサーバーのあいだでは、我々が見ているファイルを送受信する前にも情報をやり取りしています。リファラーやブラウザのUAなんていう、個々の情報をPHPでも出力できる(アクセス解析などで知ることができる)のは、ブラウザがサーバーにそれらの情報を送信しているからです。その情報の中にクッキーもあります。

本題。

まず、閲覧者がフォームに名前を記入して送信します。するとサーバー上のdream.phpが、送信された情報を読み取り、内容を整形します。そして「この内容をクッキーに保存して今度からはその情報も送るように」とブラウザに返します。ここまでが名前登録の挙動です。

今度はブラウザがサーバーにクッキーの内容を送信します。サーバー上のdream.phpはその内容を読み込んで解析・整形します。そして、クッキーから解析した名前にHTMLの内容を差し替え、サーバーはそのHTMLファイルをブラウザに送ります。閲覧者はそのHTMLファイルを見ます。

dream.phpのセッションの仕組み

名前を登録してそれを表示する仕組みについては、送信された情報を何処に保存するか以外はクッキーに保存するのと変わりありません。セッションは送信された情報をあなたのサーバーに保存します。

dream.phpでセッションを使うようにしたときのもっと微細な動作は以下のようになります。

  1. UAがDoCoMoでクッキーが保存されない環境の閲覧者がフォームが内容を記入して送信する
  2. 指定した保存フォルダ内に、送信された情報(つまり閲覧者が登録した名前)を記載した、「sess_セッションID(ランダムなアルファベットと数字)」というファイルが自動で新規作成される(セッションIDは登録ごとに異なる)
  3. 閲覧者がアクセスしているURLのパラメーター*3とセッションIDが合致するとき、「sess_セッションID」の情報を表示する

表示についての詳細

登録すると、閲覧者がアクセスしているページのURLに?DREAM=各々のセッションIDというパラメーターが付加されます。このパラメーターによって、サーバー上に保存してある複数のセッションファイルの内のどれが閲覧者の情報であるかを判別します。

パラメーターがついていなければ登録内容は読み込めません。なので、セッション保存した登録内容を使うには、このパラメーターが付加したアドレスにアクセスしなければなりません。そうでなければ、どのセッションファイルを見ていいのかわからなくなるので、登録名を表示できません。

http://my.homepage.com/dream/text.php
セッションIDが不明なので変更不可能
http://my.homepage.com/dream/text.php?DREAM=ex.A1B2
セッションを保存フォルダ内のsess_ex.A1B2というファイルの情報を使って変更

セッション(パラメーター)の保持について

名前を登録してもらったら、当たり前ですが作品を見てもらわなければなりません。そのためにあなたは作品ページへリンクをはっているはずです。

<a href="http://my.homepage.com/dream/text1.php">作品名001</a>

けれど、このリンクによってアクセスするのはhttp://my.homepage.com/dream/text1.phpであって、セッションで大事なパラメーターがついていません。これでは登録名を表示できません。が、セッションには以下のような機能が備わっています。

二点が満ちている場合、そのページのリンクの相対パスにパラメーターを書き足して提供されます。この挙動は自動です。リンク先の指定を相対パスにしておくだけで、セッションを利用している閲覧者をパラメーターがついたURLにアクセスさせることができます。

注意したい点は、http://~の場合はパラメーターはつかないということです。外部サイトにアクセスするときまでパラメーターがつく必要はないし、パラメーターを知られることで保存されたデータを覗かれたり改ざんされる可能性などの問題もあるので、http://~からのリンクにはパラメーターは自動でつきません。

例;http://my.homepage.com/dream/form.phpのソース
<?php require_once("dream.php"); ?>
<!DOCTYPE html>
<title>テスト</title>
<?php nameForm; ?>
<ul>
 <li><a href="text1.php">作品名001</a></li>
 <li><a href="http://my.homepage.com/dream/text2.php">作品名002</a></li>
</ul>
例1;http://my.homepage.com/dream/form.php?DREAM=ex.A1B2
<!DOCTYPE html>
<title>テスト</title>
#formのソース略
<ul>
 <li><a href="text1.php?DREAM=ex.A1B2">作品名001</a></li>
 <li><a href="http://my.homepage.com/dream/text2.php">作品名002</a></li>
</ul>

条件2点を満たしていないページを1ページでも経由すれば、後のページ全てでセッションは無効になります。

【

リンクを用いず、ブラウザバックでページを戻ったりすると、パラメーターの保持が適切に行われなかったり、登録前のページまで戻りすぎたりして、そこでセッションが途切れる可能性があります。モバイルとセッションの機能上、対処しようがありません。

といったことを閲覧者に勧めてください。

dream.phpのPOSTによる名前変更の仕組み

  1. チェック用クッキーが保存されていなくて、登録名も保存されていないアクセスがあると
  2. 新たに名前変換フォームのページが出力され
  3. いったんそれ以外の内容の読み込みをストップ
  4. それに入力して送信すると
  5. 送信されたPOST情報を解析して
  6. その名前を挿入して表示する

コンテンツ最上部