PHPを使うとクールでモダンでインタラクティブそしてイノベーティブなウェブアプリケーションをエフィシエントかつサステイナブルにクリエイトすることができます。 あれ? こういう場合はクリエイトじゃなくてディベロップと言った方がいいのかな? いえいえ、ディベロップじゃなくてディヴェロップですよ。下唇を噛みながら……ヴェ! 何を言っているかわからなくなってきましたが、つまりなんだか楽しそうだぜってことです。
PHPという単語を聞いたことはあっても、実際に自分で使ったことはないという人は多いかもしれません。 たとえばレンタルサーバーを借りてHTMLでちょっとしたランディングページのようなものを作ったことがあっても、 PHPを使うのはちょっと大げさな気がして、今のところ手を出したことはない、というのはよくあるケースではないでしょうか? しかし大抵のレンタルサーバーでは特に何も追加の手続きを申し込まなくても最初からPHPが使えるようになっています(逆に高価なホスティングサービスでは自由な半面、自分でインストールしないといけないかもしれません)。 使えるようになっているなら使ってみない手はありません。
と言っても、大げさな使い方をする必要はありません。 何も知らないでいるよりは、ほんのちょっとだけでも使い方を知っておけば、毎日の何気ない生活の中にウキウキの瞬間を見つけることができるようになることでしょう。 朝、窓辺に訪れた小鳥さんたちとお話できるようにだってなるかもしれません。 何を言っているかわからなくなってきましたが、つまりなんだか楽しそうだぜってことです。
というわけでここでは、PHPのことは全然知らないけれどHTMLファイルをクリエイトしてサーバーにインタラクティヴにアップロードしたことぐらいはあるぜ! という才気あふれるお友達を対象に、PHPの簡単な機能をエフィシエントかつテアモタントにどうのこうのして、最後はお問い合わせフォームを作ってみます。
では張り切ってまいりましょう。
早速PHPを使っていきたいところですが、まず下準備として、普通にHTMLファイルを作ってサーバーに置いてください。 中身は何でもいいです。単なるHTMLで構いません。HTML名人のあなたにはお茶の子さいさいですよね?
たとえばこんな感じでしょうか。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>サンプル</title>
</head>
<body>
<div>PHP実験</div>
</body>
</html>
これをブラウザで表示してみ……なくてもどうなるかは知っての通りです。退屈な日常にはもう飽き飽きってやつだぜ。
ではさて、ちょっとした刺激を求めて、このファイルの拡張子を .php に変えてみてください。 拡張子を変えるだけです。中身は一切手をつけません。
つまりこういうことですね。
以下同文
拡張子が .php になったので、これで一応PHPファイルです。
ではさて、これをブラウザで表示してみましょう。 どうなるでしょうか?
はい。どうもなってませんね。
退屈な日常は相変わらずなのでしょうか?
いいえ、そんなことはありません。1つ重大なことがわかりました。 PHPファイルはHTMLファイルと全く同じように扱える、ということです。 つまり PHP > HTML ということです。友達以上恋人未満ということです。日常の隙間に忍び寄るロマンスの誘惑ということです。 何を言っているかわからなくなってきましたが、つまりなんだか以下略ってことです。
ではこのファイルにPHPのコードをカキコしてあれこれ試してみましょう。うわ、カキコって。古っ。
以下のように書いてみてください。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>サンプル</title>
</head>
<body>
<div>PHP実験</div>
<?php
print "あいうえお";
?>
</body>
</html>
ブラウザでアクセスするとどうなるでしょうか?
こうなりました。
PHP大成功!
さて、今のどこらへんがPHPだったのか?
<?php print "あいうえお"; ?>
こういう箇所を追加したのでした。この部分がPHPです。
<?php ~ ?> の中にPHPのコードを書きます。
今回、PHPのコードとして書いたのはこれですね。
↓
print "あいうえお";
こうすると、print の右側に書いたものが画面に表示されるということですね。 引用符の中身を変えると表示も変化します。いろいろ変えて遊んでみてください。
echo "あいうえお" ;
という感じですね。
何が違うかと言うと、方言のようなもの……と言うとエライ人に怒られるのかな。
知りたい人は検索してみてください。
たとえば……。
<?php print "あい<h1>う</h1>えお"; ?>
こうなるわけですね。
試しにブラウザの画面上で「右クリック → ソースの表示」してみると、何が起きているのかよくわかると思います。
要は print で書いたのと同じ内容がブラウザ側に出ているだけです。
↓
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>サンプル</title>
</head>
<body>
<div>PHP実験</div>
あい<h1>う</h1>えお
</body>
</html>
さて、書いたものがそのまま出るだけだったら普通にHTMLで書いたって同じです。 何かもう少しPHPっぽいことがしたいところです。
というわけで「変数」なるものを使ってみましょう。
以下の内容をコピペしてみてください。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>サンプル</title>
</head>
<body>
<div>PHP実験</div>
<?php
$x = "あかさたな";
print $x;
?>
</body>
</html>
ブラウザでアクセスすると……、
ふむ。なんかあんまり変わり映えしないですね。
しかしやっていることは違います。何気なく続く日常の水面下で変化は着実に進行しているのです。
<?php $x = "あかさたな"; print $x; ?>
前回と同じく print です。
printはどんな機能かと言えば、右側に書いたことをブラウザに表示する、というものでした。
ここでは右側に何を書いているかというと、見ての通り $x です。
ではブラウザに $x と表示されてもよさそうなものですが、そうはならず、「あかさたな」と表示されたのでした。
つまりその上の行にある、これですね、
$x = "あかさたな";
ここで $x の内容は「あかさたな」ですよ、と言っているわけです。 そう言われたからには print だって従わざるを得ません。 この $x が「変数」、というわけですね。
変数を使うのと、文字を直接書くのと何が違うのか? 同じと言えば同じですし、違うと言えば違います。
たとえば……、
<?php $x = "あかさたな"; $y = "おおおおおおおお"; $z = "わぁ!"; print $y; ?>
こうすると何が表示されるでしょうか? 変数が増えてますが、print は一ヶ所です。
はい。
print で変数を切り替えることで表示するものを切り替えることができる、というわけですね。
だから何だと言われればそれまでですが、
線路を渡った向こうに別系列のスーパーが新設されて「ちょっと遠いけど行ってみようかな〜」というのと同じぐらいには楽しいかもしれません。まさに日常のウキウキってやつです。
表題の通りであります。
たとえばこんなふうにしてみましょう。
↓
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>サンプル</title>
</head>
<body>
<div>PHP実験</div>
<?php
$abc = "おしょうゆ";
$def = "お味噌";
$xyz = "ふりかけ";
print "あらヤダ! {$abc}を切らしちゃってるわ!";
?>
</body>
</html>
ではブラウザで様子を見てみましょう。
あらー。おほほほほ。
じゃあちょうど駅向こうにスーパーが新装開店したって言うし行ってみようかしらね、ってなもんです。
ポイントはここです。
print "あらヤダ! {$abc}を切らしちゃってるわ!";
生の文字列の中に $abc が混じってます。 さきほど見たようにこれは「変数」ですね。 何かを切らしてしまうことというのは日常的によくあることです。 定型文の中で部分的に単語を入れ替えて発言する。これもまた日常的によくあることでありましょう。 変数を生の文字列に混ぜるときには半角の { と } で囲んであげてください。それが日常を生き抜くコツです。
ちなみにこの「生の文字列」のことをあっちの世界では「リテラル」と呼んだりします。 おっ、ささやかに非日常の香りが漂ってきましたよ? ワクワク!
同じことの繰り返しってありますよね。
たとえば、
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>サンプル</title>
</head>
<body>
<div>PHP実験</div>
<?php
print "生まれて生きて死ぬ<br>";
print "生まれて生きて死ぬ<br>";
print "生まれて生きて死ぬ<br>";
print "生まれて生きて死ぬ<br>";
print "生まれて生きて死ぬ<br>";
print "生まれて生きて死ぬ<br>";
print "生まれて生きて死ぬ<br>";
print "生まれて生きて死ぬ<br>";
print "生まれて生きて死ぬ<br>";
print "生まれて生きて死ぬ<br>";
print "生まれて生きて死ぬ<br>";
?>
</body>
</html>
で、こうなるわけですけど、
こんなふうになるってあらかじめわかってるわけですから、もっと簡潔に書きたいものです。
というわけで、こうです。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>サンプル</title>
</head>
<body>
<div>PHP実験</div>
<?php
for ( $i = 0; $i < 100; ++$i )
{
print "生まれて生きて死ぬ<br>";
}
?>
</body>
</html>
で、こうなるわけです。
つまり、
for ( $i = 0; $i < 100; ++$i )
ここに書いた数字の分だけ、その直下の { と } で囲った処理が繰り返される、ということですね。
それで実際のところ何回繰り返せばいいのかってのはわからないですが、
一応、こういうふうに決められてるとします。
↓
for ( $i = 0; $i < 100000000; ++$i ) { print "生まれて生きて死ぬ<br>"; }
これを実行するとどうなるかは頭の中でシミュレーションしていただくとして、 こうやって同じことを繰り返しているうちに、自分で「もういいんじゃね?」って思うときがくると思うんですよ。
つまり、
↓
for ( $i = 0; $i < 100000000; ++$i ) { print "生まれて生きて死ぬ<br>"; if ( $i > 10 ) { print "解脱"; break; } }
はい。
if ( $i > 10 )
ポイントはここです。
この $i というのは 上の for の中に書いてあるのと同じ「変数」です。
こうすると何が起きているのかわかりやすいかもしれません。
↓
for ( $i = 0; $i < 100000000; ++$i ) { print "{$i} 回目 : "; print "生まれて生きて死ぬ<br>"; if ( $i > 10 ) { print "解脱"; break; } }
変数 $i の値が 「> 10」の条件を満たすと、その直下の { ~ } の中身が実行される、ということですね。
これであなたは、ループ処理(for)と、条件分岐(if)を覚えました。やったぜ!
今まではなんだかんだ言いつつ、自分で実際に書いたものが画面に出ているだけでした。
それでは物足りない。
人生には身に覚えのないサプライズが必要です。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>サンプル</title>
</head>
<body>
<div>PHP実験</div>
<?php
print $_SERVER["REMOTE_ADDR"];
?>
</body>
</html>
おっ、何だこれは……?
IPアドレスだ!
<?php print $_SERVER["REMOTE_ADDR"]; ?>
さて、お馴染みの print です。右側もお馴染みじゃないように見えますが、これも変数です。 このように書くと、アクセスしている人のIPアドレスが取得できます。 もちろん、お隣の家に行ってそこのパソコンで表示すればそのパソコンのIPアドレスが表示されます。
しかし今までと違って自分で IPアドレスを書き込んだ覚えはありませんね? どうやらPHPには自分で書かなくても自動で設定される変数があるみたいですね。 同じような値は他にもいろいろあります。元気があるときにでも調べてみると楽しいかもしれません。
ずいぶん遠いところまで来てしまいました。 今、あなたの手元では test.php の中身はどうなっているでしょう? ここに書いたサンプル以外のことをいろいろ試して、ぐちゃぐちゃになっているかもしれませんね。
なんでもいいのですが、例えばこうなっているとします。
↓
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>サンプル</title>
</head>
<body>
<div>PHP実験</div>
<?php
print "ああああああああああああああああ";
?>
</body>
</html>
さて、このドキュメントの最初の方で PHP > HTML というお話をしました。 では、このまま拡張子だけを .html に戻すとどうなるのでしょう?
やってみるしかありません。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>サンプル</title>
</head>
<body>
<div>PHP実験</div>
<?php
print "ああああああああああああああああ";
?>
</body>
</html>
ではブラウザでアクセス。
むむ。
PHPのコードが実行されていないようです。
では、ここで「右クリック → ソースの表示」をしてみると……。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>サンプル</title>
</head>
<body>
<div>PHP実験</div>
<?php
print "ああああああああああああああああ";
?>
</body>
</html>
自分でファイルに書いた通りですね。
つまり画面には出ませんが、データとしてはそのまま送信されてきているというわけです。
だから何だと言われると困るところですが、 中身は全く同じファイルでも、サーバー側でPHPとして取り扱われるか、HTMLとして取り扱われるかで 結果に違いが出てくる、ということを体感してみると、少しだけ楽しいんじゃないかな? ということでした。 <?php ~ ?>で囲ってあるおかげで表面上はPHPのコードが画面に出てこないというのもうまくできてると思いませんか? ウキウキ!
さて、あなたはHTML名人ですから、フォームを書くのは朝飯前ですよね?
たとえばこんな感じになっているとします。
↓
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>サンプル</title>
</head>
<body>
<div>PHP実験</div>
<?php
print "ああああああああああああああああ";
?>
<form action="">
<p><input type="text" id="abc"></p>
<p><button>送信</button></p>
</form>
</body>
</html>
はい、こんな感じになりますね。
この状態で送信ボタンを押すとどうなるかというと、どうもなりません。
しかしあなたは今やHTML名人であるだけでなくPHP名人でもあるのです。 画面で入力された値を取得することだって朝飯前です。
↓
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>サンプル</title>
</head>
<body>
<div>PHP実験</div>
<?php
print $_POST["abc"];
?>
<form method="post" action="">
<p><input type="text" name="abc"></p>
<p><button>送信</button></p>
</form>
</body>
</html>
これをブラウザで見てみると……
あれ? なんかまた見覚えのないものが表示されてますね。あなたの環境では多少異なる文字列だと思いますが、雰囲気は同じだと思います。
一体何なのかというと、これです。
print $_POST["abc"];
さっきの $_SERVER と形が似てますね? これも同じように、知らないうちに中身が設定される変数の一種です。 どうやらこれのせいで画面に身に覚えのないことが表示されているようです。
それはさておき、入力欄に何か書いて「送信」してみましょう。
すると……、
おっ、身に覚えのある内容になった!
つまりどういうことかと言うと、ここですね。
<input type="text" name="abc">
入力フォームの nameの値と $_POST["abc"] の引用符の内側の値を合わせておく。 するとそのフォームの入力値が取得できる、というわけですね。 ということでさきほど出ていた身に覚えのないメッセージをもう一度見てみましょう。
> Notice: Undefined index: abc in /home/user/Documents/samples/php/test.php on line 13
なんかゴニョゴニョ言ってますが、つまりこの段階では $_POST["abc"] で取得できる値が存在しませんよ、という意味ですね。 しかしそんなことを言われたって、画面を表示した段階ではまだ入力してないんですから仕方がありません。
入力してないんだから仕方がない、とは言うものの、いちいち「Noticeぅ!!」などと言われるのは、 まるで参加した覚えのないゲームに知らないうちに参加したことにさせられていて「おまえ負けぇ〜」と言われているようで面白くありません。
というわけでページを分けましょう。 「フォームのページ」と「入力を受け付けるページ」を別々にします。
まずはさきほどのページから、$_POST で表示する箇所を省いて……、
↓
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>サンプル</title>
</head>
<body>
<div>PHP実験</div>
<?php
?>
<form method="post" action="test2.php">
<p><input type="text" name="abc"></p>
<p><button>送信</button></p>
</form>
</body>
</html>
形式的に <?php ~ ?>を残してありますが中身は空です。この場合はこのタグ自体を消してしまってもいいですね。 結局このページではPHPを使わないので拡張子を .html にしてしまったって構いません。
実際にPHPの機能を使うのはフォームの「送信」を押したときの送信先のページです。
formタグに送信先のページを書いておきます。HTML名人のあなたには説明不要ですよね?
↓
<form method="post" action="test2.php">
ではその test2.php というPHPファイルを新たに作りましょう。
↓
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>サンプル</title>
</head>
<body>
<div>PHP実験(受信側)</div>
<?php
print $_POST["abc"];
?>
<div>
<a href="test.php">入力画面に戻る</a>
</div>
</body>
</html>
ではさて、test.php にブラウザでアクセスしてみましょう。
うむ。警告は出ていません。ここでは $_POST に触ってませんからね。警告を受けるいわれはございません。
では張り切って入力欄に何か書いて「送信」してみようではありませんか。
↓
うむ。身に覚えのある結果だぜ!
あれ? 自分で書いたことが表示されただけなのに、どうしてこんなにもウキウキしてるのかしら? きっとこれがPHPのマジックなのね!
ではさて、このウキウキ感を抱きしめつつ「はじめに」に書いた通り、お問い合わせフォーム作成に向けて突き進んでまいりましょう。
前項の内容を応用すればすでにフォームっぽいものが作れてしまいそうですね。 しかし肝心のメール送信はどうすればいいのでしょう?
そういうのはネットで検索すれば一発で出てくるのですけど、それを言っては身も蓋もないので簡単に紹介しておきます。 PHPでメール送信をするには次のようにします。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>サンプル</title>
</head>
<body>
<div>PHPでメールを送信する実験</div>
<?php
$mailTo = "test@test.com";
$title = "メールの件名";
$text = "本文";
$from = "soushinmoto@soushinmoto.com";
mail ( $mailTo, $title, $text, "From: {$from}" );
?>
</body>
</html>
今までのサンプルに比べると急に変数が増えたので目に優しくないかもしれませんが、 落ち着いて見てみればどうということはありません。
$mailTo が宛先のメールアドレスです。ここにあなたのメールアドレスを入れて試してみてください。
$from は送信元として相手に伝わるメールアドレスです。自己申告です。あなたの生き様が問われる領域です。
その下の mail以降がPHPでのメール送信機能です。
カッコの中にパラメータを入れると、それに従ってメール送信をしてくれる頼もしいお友達です。
変数を使わずにこのカッコの中にメールアドレスなどを文字列として直接書いても同じなのですが、
それもまた目に優しくないかな、と思ったのでこんなふうにしてみました。お好みでどうぞ。
その他、細かいことを言い出すと命がいくつあっても足りないぐらい時間がかかってしまうのですが、 結論だけ言うと、上のように書いたPHPファイルにブラウザでアクセスすれば送信が実行される……はずです。やってみましょう!
入力欄で入力した値を取得する方法がわかった!
メール送信する方法がわかった!
ならば、あとは突っ走るのみ!
まずはHTML名人の腕前にモノを言わせてフォームの体裁を作り込むぜ!
↓
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>サンプル</title>
</head>
<body>
<div>PHP実験</div>
<?php
?>
<form method="post" action="test2.php">
<p>
お名前
<input type="text" name="name">
</p>
<p>
件名
<input type="text" name="subject">
</p>
<p>
メール
<input type="text" name="resmail">
</p>
<p>
本文
<textarea name="honbun"></textarea>
</p>
<p><button>送信</button></p>
</form>
</body>
</html>
お次は送信処理側だぜ!
↓
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>サンプル</title>
</head>
<body>
<?php
$name = $_POST["name"];
$subject = $_POST["subject"];
$resmail = $_POST["resmail"];
$honbun = $_POST["honbun"];
$mailTo = "test@test.com";
$title = "お問い合わせフォームより:{$subject} by {$name}";
$text = $honbun;
$from = $resmail;
mail ( $mailTo, $title, $text, "From: {$from}" );
?>
<div>
お問い合わせを受け付けました。
</div>
<div>
<a href="test.php">入力画面に戻る</a>
</div>
</body>
</html>
少し分量が増えてますが、今までに覚えたことの組み合わせです。 $mailTo = "test@test.com"; の箇所はあなたのメールアドレスに変えておいてくださいね〜。
さて、うまくいくでしょうか? いくはずです! いけ〜!
さぁ、メールボックスを確認だ!
以上です。
PHPを使うことで何気ない日常の中にウキウキの瞬間を見つけつつ
手軽にウェブページに実用的な機能を追加したり小鳥さんとお話したりできるということが実感できたのではないでしょうか?
PHPが使えるサーバーはたくさんあります。そして今やあなたは「自分でPHPが書ける人」です。 今回ここで紹介したのはPHPのほんの一部です。工夫次第でもっといろいろなことが実現できます。自分なりに経験を重ねて楽しいウェブサイト作りに活用してみてください。