1
0
mirror of https://github.com/php/doc-ja.git synced 2026-03-23 22:52:11 +01:00
Files
archived-doc-ja/chapters/tutorial.xml
Yoshinari Takaoka d24a8e1b4e fixed typo
2025-11-01 01:18:03 +09:00

473 lines
19 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 876557ae38f6ca5035618f7cea48ca627118b437 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.firstpage">
<info><title>PHP を使用する初めてのページ</title></info>
<simpara>
このチュートリアルでは、PHP はインストール済みであることを想定しています。
インストール方法については、
<link xlink:href="&url.php.downloads;">ダウンロードページ</link>
を参照ください。
</simpara>
<para>
以下の内容で <filename>hello.php</filename>
という名前のファイルを作成してください:
</para>
<para>
<example>
<info><title>初めての PHP スクリプト: <filename>hello.php</filename></title></info>
<programlisting role="php">
<![CDATA[
<?php
echo "Hello World!";
?>
]]>
</programlisting>
<simpara>
ターミナルを使い、このファイルがあるディレクトリに移動し、
以下のコマンドで開発用のサーバーを起動します:
</simpara>
<programlisting role="shell">
<![CDATA[
php -S localhost:8000
]]>
</programlisting>
<simpara>
ブラウザを使用して、<literal>/hello.php</literal>
で終わる Web アクセス用 URL を指定し、
このファイルにアクセスしてください。
先程のコマンドを実行済みの場合、この URL は
<literal>http://localhost:8000/hello.php</literal>
のようになります。
全てが正しく設定されている場合、
このファイルは 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 タグ形式を示すことです。
この例では、<literal>&lt;?php</literal> が PHP
タグの開始を示しています。この後、PHP 命令を置き、終了タグ <literal>?&gt;</literal>
を記述することにより、PHP モードを抜けています。
このように任意の場所で PHP モードを抜けて HTML
ファイルに移ることができます。詳細は、<link linkend="language.basic-syntax">
基本的な構文</link>のセクションを参照ください。
</para>
<note>
<title>改行に関する注意</title>
<para>
HTML においては改行にはほとんど意味がありません。ただ、
HTML の見栄えをよくするためにも適宜改行を入れておくとよいでしょう。
<literal>?&gt;</literal> の直後の改行は、PHP によって取り除かれます。
複数の PHP ブロックを使用している場合や、
何かを出力するのかどうかがわからないファイルを include する際などに、
この挙動は非常に便利です。と同時に少々混乱するかもしれません。
強制的に改行させるには、<literal>?&gt;</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
-->