実践でわかる「PHPとは」

こんにちは。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は表示なしの実行です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488218/9feee832-1318-41ba-fbe1-5b61b5efd685.png)


##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>

```

うまくいきましたか？できなくてももう一度確認すればだんだんわかるようになるので、繰り返し練習しましょう！