-
Notifications
You must be signed in to change notification settings - Fork 79
/
Copy pathtutorial.xml
510 lines (492 loc) · 22.6 KB
/
tutorial.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1fd637525fd3bbaec04f6fff80eeb33fce880b10 Maintainer: hirokawa Status: ready -->
<!-- CREDITS: shimooka -->
<chapter xml:id="tutorial" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>簡易チュートリアル</title>
<para>
ここで、PHP の基礎の基礎について簡単なチュートリアルで説明したいと思います。
PHP は Web ページを作成する機能だけを有しているわけではありませんが、
ここでは PHP で動的な Web ページを作成することのみを扱います。詳細は、
<link linkend="intro-whatcando">PHP でできること</link>
と題するセクションを参照ください。
</para>
<para>
PHP を使用できる Web ページは、通常の HTML ページと全く同様に扱われ、
通常の HTML ページを作成するのと同様の方法で編集することができます。
</para>
<sect1 xml:id="tutorial.requirements">
<title>必要なものは?</title>
<para>
本チュートリアルでは、使用するサーバーで PHP が使用可能であり、
<filename class="extension">.php</filename> で終わる全てのファイルが PHP
で処理されることを仮定します。多くのサーバーでは、PHP
ファイルに関してこれがデフォルトの拡張子ですが、
確実なのはサーバーの管理者にきいてみることです。サーバーが PHP
をサポートする場合、何もする必要はありません。
<filename class="extension">.php</filename> ファイルを
作成して Web ディレクトリに置くだけで、
サーバーがこれを自動的にパースしてくれます。
何もコンパイルする必要はなく、他のツールをインストールする必要もありません。
PHP のファイルは、あなたが行なう全ての処理を実装した特殊なタグを通常の
HTML ファイルに追加したものと考えると良いでしょう。
</para>
<para>
ここでは、貴重なネットワーク帯域を節約するために、
ローカルに開発を行うことにしましょう。この場合、
<link xlink:href="&url.apache;">Apache</link> のような Web サーバーと、
当然、<link xlink:href="&url.php.downloads;">PHP</link>
をインストールすることになります。また、多くの場合には、
<link xlink:href="&url.mysql.docs;">MySQL</link>
のようなデータベースもインストールすることになるでしょう。
</para>
<para>
これらは個別にインストールすることもできますし、
より簡単な方法でインストールすることも可能です。
このマニュアルには、
<link linkend="install">PHP のインストール手順</link>
(Web サーバーが設定済みであると仮定しています) があります。
PHP 自体をインストールする際に問題が発生した場合、
<link xlink:href="&url.php.mailing-lists;">インストールに関する
メーリングリスト</link>で質問することをお薦めします。
より簡単にインストールを行いたい場合には、
使用するオペレーティングシステム用の
<link xlink:href="&url.installkits;">設定済みのパッケージ</link>
を利用することもできます。これにより、
数回のマウスクリックで自動的にこれらをインストールすることができます。
MacOSX、Linux や Windows を含む、あらゆるオペレーティングシステムにおいて
Web サーバーで PHP を使用できるように設定することは簡単です。
Linux の場合、RPM の場所を知るために
<link xlink:href="&url.rpmfind;">rpmfind</link> と
<link xlink:href="&url.rpmfind.pbone;">PBone</link> が有用でしょう。
Debian 用パッケージをみつけるには、<link
xlink:href="&url.apt-get;">apt-get</link> にアクセスするとよいでしょう。
</para>
</sect1>
<sect1 xml:id="tutorial.firstpage">
<info><title>PHP を使用する初めてのページ</title></info>
<para>
以下の内容で <filename>hello.php</filename>
という名前のファイルを作成し、Web サーバーのルートディレクトリ
(<varname>DOCUMENT_ROOT</varname>) に置いてください:
</para>
<para>
<example>
<info><title>初めての PHP スクリプト: <filename>hello.php</filename></title></info>
<programlisting role="php">
<![CDATA[
<?php
echo "Hello World!";
?>
]]>
</programlisting>
<simpara>
ブラウザを使用して、<literal>/hello.php</literal> で終わる Web アクセス用 URL を指定し、
このファイルにアクセスしてください。
ローカルに開発を行っている場合、この URL は
<literal>http://localhost/hello.php</literal> または
<literal>http://127.0.0.1/hello.php</literal> のようになります。
しかし、これは Web サーバーの設定に依存します。
全てが正しく設定されている場合、
このファイルは PHP によりパースされ、"Hello World" がブラウザで表示されます。
</simpara>
<simpara>
PHP は通常のHTMLの Webページにも埋め込むことができます。
つまり、HTML ドキュメントを PHP のぶんを使って書けるということです。
そのことを示すデモが以下になります:
</simpara>
<programlisting role="php">
<![CDATA[
<!DOCTYPE html>
<html>
<head>
<title>PHP Test</title>
</head>
<body>
<?php echo '<p>Hello World</p>'; ?>
</body>
</html>
]]>
</programlisting>
<simpara>
上記の出力は、以下のようになります:
</simpara>
<screen role="html">
<![CDATA[
<!DOCTYPE html>
<html>
<head>
<title>PHP Test</title>
</head>
<body>
<p>Hello World</p>
</body>
</html>
]]>
</screen>
</example>
</para>
<para>
このプログラムは非常に簡単なので、実際には、このようなページを
作成するために PHP を使用する必要はありません。
<literal>Hello World</literal> を PHP の <function>echo</function>
命令により出力しているだけです。
このファイルは、実行ファイルまたは特殊なファイルとする必要がないことに注意してください。
このファイルが拡張子 ".php" を有し、このファイルが PHP
に渡される必要があると設定されているため、サーバーは PHP
により解釈されるファイルを見付けることができます。
このファイルは、多くの面白いことを可能にする特別なタグを利用できる、
通常の HTML ファイルと考えることができます。
</para>
<para>
この例を試しても何も出力されない場合、または、
ダウンロード用のプロンプトが表示されるか、
テキストとしてファイル全体が表示された場合、
利用しているサーバーで PHP が利用できない可能性があります。本マニュアルの
<link linkend="install">インストール</link> の章により
PHP を利用できるようにするよう管理者にきいてみてください。
ローカルに開発を行っている場合も、
インストールの章を読んで設定が全て正しく行われていることを確認してください。
解決しない問題がある場合は、多くの
<link xlink:href="&url.php.support;">PHP サポート</link>
の選択肢のどれかを利用してみてください。
</para>
<para>
この例の目的は、特殊な PHP タグ形式を示すことです。
この例では、<literal><?php</literal> が PHP
タグの開始を示しています。この後、PHP 命令を置き、終了タグ <literal>?></literal>
を記述することにより、PHP モードを抜けています。
このように任意の場所で PHP モードを抜けて HTML
ファイルに移ることができます。詳細は、<link linkend="language.basic-syntax">
基本的な構文</link>のセクションを参照ください。
</para>
<note>
<title>改行に関する注意</title>
<para>
HTML においては改行にはほとんど意味がありません。ただ、
HTML の見栄えをよくするためにも適宜改行を入れておくとよいでしょう。
<literal>?></literal> の直後の改行は、PHP によって取り除かれます。
複数の PHP ブロックを使用している場合や、
何かを出力するのかどうかがわからないファイルを include する際などに、
この挙動は非常に便利です。と同時に少々混乱するかもしれません。
強制的に改行させるには、<literal>?></literal> の後に空白を置くか、
あるいは PHP ブロック内の最後の echo/print で明示的に改行を出力します。
</para>
</note>
<note>
<title>テキストエディタに関する注意</title>
<para>
PHP ファイルを作成、編集、監理する際に使用できる、
多くのテキストエディタや統合開発環境 (IDE) があります。
これらのツールのリストの一部は、<link
xlink:href="&url.phpeditorlist;">PHP エディタのリスト</link>
で整理されています。あるエディタを推薦したい場合、上記のページを訪れ、
ページの監理者にそのエディタをリストに加えてくれないかとたずねてみてください。
</para>
</note>
<note>
<title>ワードプロセッサに関する注意</title>
<para>
StarOffice Writer, Microsoft Word および Abiword
のようなワードプロセッサは、PHP ファイルの編集には向いていません。
これらのワープロ上でテストスクリプトを編集する場合は、
ファイルをプレーンテキストとして保存していることを確認してください。
さもないと、PHP はスクリプトを読み込んで実行できません。
</para>
</note>
<para>
さて、動作する簡単な PHP スクリプトを作成することができましたので、
最も有名な PHP スクリプトを作成してみましょう!
<function>phpinfo</function> 関数をコールすることにより、
<link linkend="language.variables.predefined">定義済み変数</link>、
ロードされている PHP モジュール、<link linkend="configuration">設定
</link>等のシステムに関する多くの有用な情報を得ることができます。
この重要な情報を見てみてください。
</para>
<para>
<example>
<title>PHP からシステムに関する情報を取得する</title>
<programlisting role="php">
<![CDATA[
<?php phpinfo(); ?>
]]>
</programlisting>
</example>
</para>
</sect1>
<sect1 xml:id="tutorial.useful">
<title>実用的な例</title>
<para>
次に、より実用的なことをしてみましょう。
ページを見ているユーザーが使用しているブラウザの種類を確認してみます。
これを行なうには、ブラウザが
HTTP リクエストの一部として送信した user agent 文字列を調べます。
この情報は、<link linkend="language.variables">変数</link>
に保存されています。PHP では、変数名は常にドル記号で始まります。
ここで使用する変数は、<varname>$_SERVER['HTTP_USER_AGENT']</varname>
です。
</para>
<note>
<para>
<varname>$_SERVER</varname> は、
Web サーバー関連情報を全て保持する PHP の特別な予約変数です。詳細は、
<link linkend="language.variables.superglobals">スーパーグローバル</link>
を参照ください。
</para>
</note>
<para>
この変数を表示するには、以下のようにします。
</para>
<para>
<example>
<title>変数を出力する (配列要素)</title>
<programlisting role="php">
<![CDATA[
<?php
echo $_SERVER['HTTP_USER_AGENT'];
?>
]]>
</programlisting>
<para>
このスクリプトの出力例は以下のようになります。
<screen role="html">
<![CDATA[
Mozilla/5.0 (Linux) Firefox/112.0
]]>
</screen>
</para>
</example>
</para>
<para>
PHP で利用可能な変数の<link linkend="language.types">型</link>
には多くの種類があります。上の例では、
<link linkend="language.types.array">配列</link>
の要素を出力しています。配列は、非常に有用です。
</para>
<para>
<varname>$_SERVER</varname> は、PHP
で自動的に利用可能な変数のひとつに過ぎません。マニュアルの
<link linkend="reserved.variables">定義済の変数</link>
のセクションでリストを参照することができます。
あるいは、完全なリストを取得するには、さきほどのセクションで使用した
<function>phpinfo</function> 関数の出力を確認します。
</para>
<para>
PHP タグの中に複数の PHP 命令を置くことができ、echo
文以上のことを行なうコードブロックを作成することができます。
例えば、Firefox かを調べたい場合は、
以下のようにします。
</para>
<para>
<example>
<title>
<link linkend="language.control-structures">制御構造</link> および
<link linkend="language.functions">関数</link>の使用例
</title>
<programlisting role="php">
<![CDATA[
<?php
if (str_contains($_SERVER['HTTP_USER_AGENT'], 'Firefox')) {
echo 'あなたはFirefoxを使用しています';
}
?>
]]>
</programlisting>
<para>
このスクリプトの出力例は以下のようになります。
<screen role="html">
<![CDATA[
あなたはFirefoxを使用しています
]]>
</screen>
</para>
</example>
</para>
<para>
ここで、新しい概念をいくつか導入します。
<link linkend="control-structures.if">if</link> 文を使用しています。
C 言語の基本構文を知っているとしたら、理解できると思います。
C 言語や上記の構文を使用する他の言語をあまり知らない場合には、
PHP の入門書を手にとって最初の数章を読むか、このマニュアルの
<link linkend="langref">言語リファレンス</link>の部分を読むべきです。
</para>
<para>
二番目の新しい概念は、<function>str_contains</function> 関数のコールです。
<function>str_contains</function> は PHP に組み込まれた関数で、
指定された文字列が、別の文字列に含まれているかを判定します。この場合、
<varname>$_SERVER['HTTP_USER_AGENT']</varname> (いわゆる干し草の山
【haystack】) の中で
<literal>"Firefox"</literal> (いわゆる針【needle】) を探しています。
この文字列が見つかった場合、
この関数は &true; を返し、
見つからなかった場合には &false; を返します。
この関数が &true; を返すと、
<link linkend="control-structures.if">if</link>
文は &true; と評価し、その{波括弧}の中のコードが実行されます。
そうでない場合は、実行されません。
<link linkend="control-structures.if">if</link>,
<link linkend="control-structures.else">else</link> と
<function>strtoupper</function> や <function>strlen</function>
のような他の関数で、似たような例を作ってみてください。
関連するマニュアルの各ページにも例が載っています。
関数の使用法に自信がない場合には、マニュアルの
<link linkend="about.prototypes">関数定義の読み方</link>および
<link linkend="language.functions">PHP関数</link>のセクションの両方を
読んでみると良いでしょう。
</para>
<para>
この例を少し発展させて、PHP ブロックの中からでも PHP
モードから出たり入ったりすることができることを以下に示します。
</para>
<para>
<example>
<title>HTML および PHP モードの両方を混在させる</title>
<programlisting role="php">
<![CDATA[
<?php
if (str_contains($_SERVER['HTTP_USER_AGENT'], 'Firefox')) {
?>
<h3>str_contains() がtrueを返しました</h3>
<center>あなたはFirefoxを使用しています</center>
<?php
} else {
?>
<h3>str_contains()がfalseを返しました</h3>
<center>あなたはFirefoxを使用していません</center>
<?php
}
?>
]]>
</programlisting>
<para>
この例の出力は以下のようになります。
<screen role="html">
<![CDATA[
<h3>str_contains() がtrueを返しました</h3>
<center>あなたはFirefoxを使用しています</center>
]]>
</screen>
</para>
</example>
</para>
<para>
何かを出力する際に PHP の echo 文を使用する代わりに、PHP
モードを抜けて通常の HTML を送信しています。ここで注意すべき重要で強力な点は、
スクリプトの論理フローが損なわれないということです。
<function>str_contains</function> が &true; または &false;
のどちらを返すか、言い換えると<literal>Firefox</literal>
が見つかったかどうかに基づき、HTML
ブロックだけが見る側に送信されることになります。
</para>
</sect1>
<sect1 xml:id="tutorial.forms">
<title>フォームの処理</title>
<para>
PHP の最も強力な機能の一つは、HTML フォームを処理する手段です。
理解するべき重要な基本概念は、あるフォームの中の全てのフォーム要素が、
自動的に PHP スクリプトで利用可能になるということです。
詳細は、マニュアルのセクション<link linkend="language.variables.external">
外部から来る変数</link> および PHP
でフォームを使用する例を参照ください。以下に HTML フォームの例を示します。
</para>
<para>
<example>
<title>簡単な HTML フォーム</title>
<programlisting role="html">
<![CDATA[
<form action="action.php" method="post">
<label for="name">名前:</label>
<input name="name" id="name" type="text">
<label for="age">年齢:</label>
<input name="age" id="age" type="number">
<button type="submit">Submit</button>
</form>
]]>
</programlisting>
</example>
</para>
<para>
このフォームに関して特別なところはありません。これは通常の HTML
フォームで特殊なタグは全く使用していません。
ユーザーがこのフォームを記入し、投稿ボタンを押した時、
<filename>action.php</filename> ページがコールされます。
このファイルには、以下のようなコードを記述します。
</para>
<para>
<example>
<title>フォームからのデータを出力する</title>
<programlisting role="php">
<![CDATA[
こんにちは、<?php echo htmlspecialchars($_POST['name']); ?>さん。
あなたは、<?php echo (int) $_POST['age']; ?> 歳です。
]]>
</programlisting>
<para>
このスクリプトの出力例は次のようになります。
<screen role="html">
<![CDATA[
こんにちは、Joe さん。あなたは、22 歳です。
]]>
</screen>
</para>
</example>
</para>
<para>
<function>htmlspecialchars</function> および
<literal>(int)</literal> の部分以外は、何を行っているかは明らかでしょう。
<function>htmlspecialchars</function> は、html での特殊な文字を適切にエンコードし、
HTML タグや JavaScript をページ内に仕込めないようにします。
また、age フィールドには数値が入ることがわかっているので、これを
<type>int</type> 型に <link linkend="language.types.typecasting">変換</link>
します。これにより、おかしな文字が入力されることを防ぎます。
これらの処理を PHP に自動的に行わせるためには、
<link linkend="ref.filter">filter</link> 拡張モジュールを使用します。
変数 <varname>$_POST['name']</varname> と
<varname>$_POST['age']</varname> は PHP により自動的に設定されます。
前の部分では、スーパーグローバル<varname>$_SERVER</varname> を使用しましたが、
ここでは、全ての POST データを保持するスーパーグローバル
<varname>$_POST</varname> を導入しています。
フォームの<emphasis>メソッド</emphasis>が POST であることに注意してください。
<emphasis>GET</emphasis> メソッドを使用している場合、
フォームの情報は代わりにスーパーグローバル <varname>$_GET</varname>
に代入されます。リクエストデータの発信源に留意しない場合には、
スーパーグローバル変数
<varname>$_REQUEST</varname>
を使用することもできます。この変数は、GET, POST, COOKIE, FILE
データの混ざったものが含まれます。
</para>
</sect1>
<sect1 xml:id="tutorial.whatsnext">
<title>次にするべきことは?</title>
<para>
ここで得た知識により、マニュアルのほとんどの部分、
そしてサンプルのアーカイブにある多くのスクリプトの例を理解できるようになったはずです。
</para>
<para>
この他 PHP でできる多くのことを示すスライドプレゼンテーションを見るには、
PHP カンファレンスマテリアルサイト
<link xlink:href="&url.php.talks;">&url.php.talks;</link>
を参照ください。
</para>
</sect1>
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->