こんにちは。Ideagearの林です。
今回はPHPの基本的な書き方について、例を見ながら学んだことをまとめたいと思います。「なんとなく書ける」ようになるのが目標です。
実践する事が一番身につきますが、読むだけでも理解できるように書きます。
対象・環境
基本的なLinuxのコマンド(cd, ls, vim, grep, cat, echoとリダイレクト)がわかる方
分からなくても調べればすぐ出てくるかと思います
シェルはPuTTYを使います。ファイルを作成し、Webサーバーにアップロードしてブラウザで見る、という方法を取ります。
実践
それではさっそく見ていきましょう。
載せるコードはPuTTY内でvim ファイル名.php
を実行して編集する.phpファイルの中身です。
1
これをtest1.php
として作成します
<html>
<body>
1+2= <?php
echo(1+2);
?>
</body>
</html>
まずPHPとは、HTMLに埋め込むことができ、Web開発によく使われるプログラミング言語らしいです。
PHPを記述する場合、<?php
で始まり?>
で終わるというルールがあります。
あとスクリプトの最後には" ; "が必要です。
そしてHTMLとは、Webページを作るために用いられる基本的なマークアップ言語らしいです。
大体見たらわかりますが、つまりこのコードは、PHPで書かれた命令も埋め込まれている、HTMLによるWebページ用の記述である、ということですね。
ブラウザで見ると
1+2 = 3
と表示されました。
2
こちらをtest2.php
として作成します。
<html>
<body>
<form method="GET" action=test3.php>
<div><input type="text" name="name">:Name</div>
<div><input type="text" name="age">:Age</div>
<input type="submit">
</form>
</body>
</html>
PHPじゃないので解説はしませんが、読み書きしながら覚えましょう!
ブラウザからアクセスすると年齢と名前の入力画面が出てきます。
入力して送信してみると・・・
送信しても、エラーが出てきます。
送信先のtest3.phpが無いからです。
test3.phpを作りましょう。
3
<html>
<body>
<h1>Name and Age</h1>
<div>name:<?php
echo $_GET["name"]
?></div>
<div>age:</div>
<form method="GET" action=test2.php>
<input type="submit">
</form>
</body>
</html>
さて、名前だけ出ましたね。年齢を出すにはどうしたらいいでしょうか?
<div>age:<?php
echo $_GET["age"]
?></div>
<div>age:</div>
で終わってしまっている年齢についての表示を、名前と同様に表示するように書き換えるとうまくいきます!
4
test4.phpを作ります
<html>
<body>
<h1>shell command test</h1>
<div>passthru</div><pre><?php
passthru( "ls -alh");
?></pre>
<div>exec</div><pre><?php
exec( "ls -alh");
?></pre>
</body>
</html>
今まではPHPの関数を実行してきました。
passthru, execもPHP関数ですが、どちらも外部プログラムを実行する関数で、ここではLinuxのコマンドを実行しています。
passthruは表示ありの実行、execは表示なしの実行です。
5
では、4を応用して名前と年齢の検索と登録をできるようにします。
その前に、シェルでリストを保存するファイルを作りましょう。ファイル名はage.csv
にします。
echo "hayashi 85" >> age.csv
echo "unknown 18" >> age.csv
という風に、いくつか名前と年齢を空白区切りにしたデータを登録しておきます。
次にtest2.php
を編集します。
<html>
<body>
<h1> search age </h1>
<form method="GET" action=test5.php>
<div><input type="text" name="search">:Name</div>
<input type="submit">
</form>
<h1> age submit </h1>
<form method="GET" action=test3.php>
<div><input type="text" name="name">:Name</div>
<div><input type="text" name="age">:Age</div>
<input type="submit">
</form>
</body>
</html>
以下のようにtest5.phpを作成します。
<html>
<body>
<h1>Search Age</h1>
<div>keyword:<?php
echo $_GET["search"]
?></div>
<pre>
<?php
passthru("grep ".$_GET["search"]." age.csv");
?>
</pre>
<form method="GET" action=test2.php>
<input type="submit" value="back">
</form>
</body>
</html>
検索ができるようになりましたか?
6
では最後に、test3.phpを書き換えて登録の画面を作ってみましょう!
また、test2.phpを変更してtest6.phpに飛ぶ機能を追加、test6.phpではすべてのデータを表示、というようにするにはどうすればよいでしょうか?
答え合わせ
登録
<html>
<body>
<h1>Name and Age</h1>
<?php
exec("echo \"".$_GET["name"]." ".$_GET["age"]."\">> age.csv");
?>
<div>name:<?php
echo $_GET["name"]
?></div>
<div>age:<?php
echo $_GET["age"]
?></div>
<form method="GET" action=test2.php>
<input type="submit" value="back">
</form>
</body>
</html>
リスト表示
test2.php
<html>
<body>
<h1> search age </h1>
<form method="GET" action=test5.php>
<div><input type="text"
name="search">:Name</div>
<input type="submit" value="search">
</form>
<h1> age submit </h1>
<form method="GET" action=test3.php>
<div><input type="text" name="name">:Name</div>
<div><input type="text" name="age">:Age</div>
<input type="submit" value="submit">
</form>
<h1> inspect entire list </h1>
<form method="GET" action=test6.php>
<input type="submit" value="watch">
</form>
</body>
</html>
test6.php
<html>
<body>
<h1>lists</h1>
<pre><?php
passthru("cat age.csv");
?></pre>
<form method="GET" action=test2.php>
<input type="submit" value="back">
</form>
</body>
</html>
うまくいきましたか?できなくてももう一度確認すればだんだんわかるようになるので、繰り返し練習しましょう!