1
0
mirror of https://github.com/php/doc-ja.git synced 2026-03-24 07:02:08 +01:00
Files
archived-doc-ja/chapters/tutorial.xml
TAKAGI Masahiro 580160ca7f Sync with en
git-svn-id: https://svn.php.net/repository/phpdoc/ja/trunk@335516 c90b9560-bf6c-de11-be94-00142212c4b1
2014-12-31 07:28:42 +00:00

566 lines
27 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 41060e691dc09b9b190e2181123dbc8286e05843 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>.php</filename> で終わる全てのファイルが PHP
で処理されることを仮定します。多くのサーバーでは、PHP
ファイルに関してこれがデフォルトの拡張子ですが、
確実なのはサーバーの管理者にきいてみることです。サーバーが PHP
をサポートする場合、何もする必要はありません。
<filename>.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">
<title>PHP を使用する初めてのページ</title>
<para>
以下の内容で <filename>hello.php</filename>
という名前のファイルを作成し、Web サーバーのルートディレクトリ
(<varname>DOCUMENT_ROOT</varname>) に置いてください。
</para>
<para>
<example>
<title>初めての PHP スクリプト: <filename>hello.php</filename></title>
<programlisting role="php">
<![CDATA[
<html>
<head>
<title>PHP Test</title>
</head>
<body>
<?php echo '<p>Hello World</p>'; ?>
</body>
</html>
]]>
</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 によりパースされ、以下の出力がブラウザに送信されます。
</simpara>
<screen role="html">
<![CDATA[
<html>
<head>
<title>PHP Test</title>
</head>
<body>
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>&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>
<note>
<title>Windows のメモ帳に関する注意</title>
<para>
Windows のメモ帳を使用して PHP スクリプトを書く場合には、ファイルに
拡張子 <filename>.php</filename> を付けて保存したかどうかを確認する必要があります
(メモ帳は、以下の防止策のどらかを適用しない限り、拡張子 <filename>.txt</filename>
を自動的に付加します)。ファイルを保存する際に、
ファイル名を入力するプロンプトでファイル名を引用符で括ります
(すなわち、"<filename>hello.php</filename>" とします)。
もしくは、保存ダイアログボックスにおいてドロップダウンメニュー
"テキスト文書"をクリックし、"すべてのファイル" に設定を変更します。
これにより、引用符を付けずにファイル名を入力することができます。
</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>
を参照してください。
これらの特別な変数は、<link xlink:href="&url.php.release4.1.0;">4.1.0</link>
で導入されました。これ以前は、
<varname>$HTTP_SERVER_VARS</varname> のような古い配列
<varname>$HTTP_*_VARS</varname> を代わりに使用していました。
古いとはいえ、これらの変数はまだ存在しています
(<link linkend="tutorial.oldcode">古いコード</link>に関する注記も
参照してください)。
</para>
</note>
<para>
この変数を表示するには、以下のようにします。
</para>
<para>
<example>
<title>変数を出力する (配列要素)</title>
<programlisting role="php">
<![CDATA[
<?php
echo $_SERVER['HTTP_USER_AGENT'];
?>
]]>
</programlisting>
<para>
このスクリプトの出力例は以下のようになります。
<screen role="html">
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
</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
文以上のことを行なうコードブロックを作成することができます。
例えば、インターネット・エクスプローラかどうかを調べたい場合は、
以下のようにします。
</para>
<para>
<example>
<title>
<link linkend="language.control-structures">制御構造</link> および
<link linkend="language.functions">関数</link>の使用例
</title>
<programlisting role="php">
<![CDATA[
<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) {
echo 'あなたはInternet Explorerを使用しています<br />';
}
?>
]]>
</programlisting>
<para>
このスクリプトの出力例は以下のようになります。
<screen role="html">
<![CDATA[
あなたはInternet Explorerを使用しています<br />
]]>
</screen>
</para>
</example>
</para>
<para>
ここで、新しい概念をいくつか導入します。
<link linkend="control-structures.if">if</link> 文を使用しています。
C 言語の基本構文を知っているとしたら、理解できると思います。
C 言語や上記の構文を使用する他の言語をあまり知らない場合には、
PHP の入門書を手にとって最初の数章を読むか、このマニュアルの
<link linkend="langref">言語リファレンス</link>の部分を読むべきです。
</para>
<para>
二番目の新しい概念は、<function>strpos</function> 関数のコールです。
<function>strpos</function> は PHP に組み込まれた関数で、
文字列の中である文字列を探します。この場合、
<varname>$_SERVER['HTTP_USER_AGENT']</varname> (いわゆる干し草の山
【haystack】) の中で
<literal>"MSIE"</literal> (いわゆる針【needle】) を探しています。
この文字列が見つかった場合、
この関数はこの関数は文字列の相対的な位置を返し、
見つからなかった場合には &false; を返します。
この関数が &false; を返さなければ、
<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 (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) {
?>
<h3>strposが非falseを返しました</h3>
<center><b>あなたはInternet Explorerを使用しています</b></center>
<?php
} else {
?>
<h3>strposがfalseを返しました</h3>
<center><b>あなたはInternet Explorerを使用していません</b></center>
<?php
}
?>
]]>
</programlisting>
<para>
この例の出力は以下のようになります。
<screen role="html">
<![CDATA[
<h3>strposが非falseを返しました</h3>
<center><b>あなたはInternet Explorerを使用しています</b></center>
]]>
</screen>
</para>
</example>
</para>
<para>
何かを出力する際に PHP の echo 文を使用する代わりに、PHP
モードを抜けて通常の HTML を送信しています。ここで注意すべき重要で強力な点は、
スクリプトの論理フローが損なわれないということです。
<function>strpos</function>&true; または &false;
のどちらを返すか、言い換えると<literal>MSIE</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">
名前: <input type="text" name="name" />
年齢: <input type="text" name="age" />
<input type="submit" />
</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>integer</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>
<para>
XForms の入力を PHP で扱うことも可能ですが、たいていの場合は
HTML フォームのほうが快適に使用できるでしょう。
XForms は初心者向けのものではありませんが、気になる人もいるかもしれません。
機能概要の節にある <link linkend="features.xforms">
XForm から受信したデータの処理方法</link> を参照ください。
</para>
</sect1>
<sect1 xml:id="tutorial.oldcode">
<title>新しいバージョンの PHP で古いコードを使用する</title>
<para>
今や PHP は有名なスクリプト言語となってきており、
各自のスクリプトで再利用可能なコードとして、
多くのリソースが公開されています。PHP 言語の開発者の大部分は、
過去のバージョンとの互換性を保とうとしており、
過去のバージョン用に書かれたスクリプトは (理想的には)
より新しいバージョンの PHP で変更せずに動作するはずです。
しかし、実際には、通常いくつかの変更が必要となります。
</para>
<para>
古いコードに影響を与える最近の重要な二つの変更点を以下に示します。
<itemizedlist>
<listitem>
<simpara>
古い形式の配列 <varname>$HTTP_*_VARS</varname> は、PHP 5.4.0 以降使えなくなりました。
以下の
<link linkend="language.variables.superglobals">スーパーグローバル
配列</link><link xlink:href="&url.php.release4.1.0;">4.1.0</link>
で導入されました。これらを以下に示します。
<varname>$_GET</varname>, <varname>$_POST</varname>,
<varname>$_COOKIE</varname>, <varname>$_SERVER</varname>,
<varname>$_ENV</varname>, <varname>$_REQUEST</varname>,
<varname>$_SESSION</varname>.
</simpara>
</listitem>
<listitem>
<simpara>
外部変数は、もはやデフォルトでグローバルスコープに登録されません。
言い換えると、PHP <link xlink:href="&url.php.release4.2.0;">4.2.0</link>
以降、PHP ディレクティブ
<link linkend="ini.register-globals">register_globals</link> は、
&php.ini; においてデフォルトで <emphasis>off</emphasis> となっています。
外部変数の値にアクセスするときには、
先ほど説明したスーパーグローバル配列を使うことを推奨します。
古いスクリプトや本、
チュートリアルはこのディレクティブに依存している可能性があります。
このディレクティブが <literal>on</literal> の場合、
例えば、URL <literal>http://www.example.com/foo.php?id=42</literal>
から <varname>$id</varname> を使用することができます。
on、off によらず <varname>$_GET['id']</varname> は利用可能です。
</simpara>
</listitem>
</itemizedlist>
これらの変更に関する詳細は、
<link linkend="language.variables.predefined">定義済みの変数</link>
のセクションおよびそこにあるリンクを参照してください。
</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
-->