1. PHP の概要
PHP は、習得と使用が簡単なサーバーサイド スクリプト言語です。プログラミングの知識がほとんどなくても、PHP を使用して真にインタラクティブな WEB サイトを構築できます。このチュートリアルは、言語を完全に理解することを目的としたものではなく、動的な Web サイトの開発をできるだけ早く開始できるようにすることを目的としています。 HTML (または HTML エディター) の基本的な知識とプログラミングのアイデアがあることを前提としています。
1. はじめに
PHP は、動的な Web ページを生成できるツールの 1 つです。 PHP Web ファイルは通常の HTML Web ファイルとして扱われ、編集する場合は、HTML を編集するのと同じ方法で PHP を作成できます。
PHP は、ハイパーテキスト プリプロセッサ (PHP: Hypertext Preprocessor) の略です。 PHP は完全に無料で、お金を費やす必要はなく、PHP 公式サイト (http://www.php.net) から自由にダウンロードできます。 PHP は GNU Public License (GPL) に準拠しており、これに基づいて Linux や Emacs などの多くの人気ソフトウェアが誕生しました。ソース コードに無制限にアクセスでき、必要な機能を追加することもできます。 PHP は、ほとんどの Unix プラットフォーム、GUN/Linux、および Microsoft Windows プラットフォームで実行できます。 Windows PC または Unix マシンに PHP をインストールする方法については、PHP 公式サイトを参照してください。インストールプロセスは簡単です。
あなたのマシンが 2000 年問題を解決すれば、PHP には 2000 年問題も発生しません。
1.1 歴史
3 年前、Rasmus Lerdorf はオンライン履歴書を作成するために個人ホームページ ツールを作成しました。とてもシンプルな言語です。それ以来、ますます多くの人がこの言語に注目し、その拡張についてさまざまな提案を行うようになりました。多くの人々の献身と言語自体のソースフリーの性質を通じて、この言語は機能豊富な言語に進化し、今も成長を続けています。
PHP は習得が簡単ですが、mod_perl (Web サーバーに埋め込まれた Perl モジュール) よりも遅くなります。現在、mod_perl と同じくらい高速な Zend という新しいエンジンがあり、PHP4 はこのエンジンを最大限に活用できます。 PHP4 はまだベータ版のテスト段階にあります。 Andy Gutmans と Zeev Suraki が Zend の主な著者です。詳細については、Zend サイト (http://www.zend.com) にアクセスしてください。
PHP のアプリケーションは個人の Web プロジェクトで大幅に成長しました。 1999 年 10 月の Netcraft レポートによると、PHP テクノロジを使用しているドメインは 931,122 個、IP アドレスは 321,128 個ありました。
1.2 PHP の進歩
PHP を適用すると多くの利点があります。もちろん、既知の欠点は、PHP はオープンソース プロジェクトであるため商用サポートがなく、その結果として実行速度が遅くなる (PHP4 まで) ことです。しかし、PHP のメーリング リストは非常に便利で、Yahoo! や Amazon.com などの非常に人気のあるサイトを実行していない限り、PHP の速度の違いに気づくことはありません。少なくとも私は感じませんでした!さて、PHP の利点を見てみましょう:
-学習プロセス
私は個人的には PHP の非常にシンプルな学習プロセスを好みます。 Java や Perl とは異なり、まともなプログラムを書くために 100 ページを超えるドキュメントに頭を埋める必要はありません。いくつかの基本的な構文と言語機能を理解していれば、PHP コーディングの旅を始めることができます。後でコーディング プロセス中に問題が発生した場合は、関連ドキュメントをもう一度読むことができます。
PHP の構文は C、Perl、ASP、または JSP と同じです。上記の言語のいずれかに精通している人にとって、PHP は単純すぎます。逆に、PHP について詳しく知っていれば、他のいくつかの言語を学ぶのは簡単になります。
PHP のコア言語機能をすべてマスターするには 30 分しかかかりません。あなたはすでに HTML についてよく知っているかもしれませんし、編集およびデザイン ソフトウェアを使用したり、手動で美しい WEB サイトを作成する方法さえ知っているかもしれません。 PHP コードはサイトに簡単に追加できるため、サイトを設計および保守するときに、PHP を簡単に追加してサイトをより動的にすることができます。
- データベース接続
PHP は、多くのデータベースに接続する関数を使用してコンパイルできます。 PHP と MySQL は現時点では優れた組み合わせです。データベースに間接的にアクセスする独自の周辺関数を作成することもできます。このようにして、使用するデータベースを変更するときに、そのような変更に適応するようにコーディングを簡単に変更できます。 PHPLIB は、一般的なトランザクションのニーズを提供できる最も一般的に使用される基本ライブラリのシリーズです。
- スケーラビリティ
前に述べたように、PHP は急速な発展期に入っています。プログラマーではない人が PHP に追加機能を拡張するのは難しいかもしれませんが、PHP プログラマーにとっては難しくありません。
- オブジェクト指向プログラミング
PHP はクラスとオブジェクトを提供します。 Web ベースのプログラミング作業には、オブジェクト指向プログラミングのスキルが必要です。 PHP はコンストラクター、抽出されたクラスなどをサポートします。
- スケーラビリティ
従来、Web ページの対話は CGI を通じて実現されていました。 CGI プログラムのスケーラビリティは、実行中の CGI プログラムごとに個別のプロセスを開くため、理想的ではありません。解決策は、CGI プログラムを Web サーバーに書き込むために一般的に使用される言語 (mod_perl、JSP など) のインタープリターをコンパイルすることです。 PHP はこの方法でインストールできますが、CGI をこの方法でインストールしようとする人はほとんどいません。埋め込み PHP はよりスケーラビリティが高くなります。
- さらなる機能
Web プログラミングにより適したものにするために、PHP 開発者は、使いやすいレイヤーを含む多くの周辺機器の人気のある基本ライブラリを開発しました。 PHP を使用して、Oracle、MS-Access、Mysql などのほとんどのデータベースに接続できます。ハエに絵を描いたり、電子メールをダウンロードまたは表示するプログラムを作成したりできます。ネットワーク関連の機能も実行できます。何よりも、PHP インストールに必要な機能を選択できます。 Nissan の Xterra の言葉を借りれば、PHP はやりたいことはすべて実行でき、万能です!
1.3 競合他社: ASP、mod_perl、JSP
ASP/JSP で何ができるのかは確かにわかりません。しかし、明らかなことは、そのようなコードを書くのがどれほど簡単であるか、それらを購入するとどれほど高価になるか、そしてどれほど高価で強力なハードウェアが必要になるかということです。中立的な意見(例えば、SUN や Microsoft の数百万ドルの影響を受けていないなど)があれば、ついでに教えてください。
私の知る限り、JSP は Java に基づいているため、Java プログラマーは簡単にコーディングを始めることができます。 ASP は複数の言語をサポートする機能を備えた一般的なエンジンですが、デフォルトで最も一般的に使用されているのは VBScript です。
mod_perl は Perl と同じくらい強力ですが、より高速です。
2. PHP 入門
PHP サイトのオンライン チュートリアルはすでに優れています。他のチュートリアルへのリンクもあります。記事のこの部分では、PHP について詳しく説明します。私の目的は、あなたがすぐに PHP プログラミングを始められるようにすることだけです。
2.1 最初の要件
まず、PHP をサポートする動作する Web サーバーが必要です。サーバー上のすべての PHP ファイルの拡張子は .php3 であると仮定します。
2.2 PHP のインストール
次の内容を含む test.php3 という名前のファイルを生成します:
> 次に、このファイルをブラウザで開きます。このページを参照して、PHP インストールで使用されるオプションを確認してください。
2.3 構文
前に述べたように、PHP コードと HTML コードを混在させることができます。したがって、この 2 つを区別する方法が必要です。以下にいくつかの方法を示します。最も使いやすいものを選択して、それを使い続けることができます。
HTML から分離します
使用できるメソッドは次のとおりです:
. .
ステートメント
PHP ではステートメントは (;) で区切られます。 HTML から分離されたこれらのタグは、ステートメントの終わりも示します。
コメント
PHP は C、C++、Unix スタイルのコメントをサポートしています:
/* C、C++ スタイルの複数行コメント*/
// C++ スタイルの単一行コメント
# Unix スタイルの単一行コメント
Hello, World!
これまでに学んだ知識を使えば、おそらくプログラミングの世界で最も有名な単語の 1 つを出力する最も簡単なプログラムを作成できます。
でも、すぐにもっと増えることを願っています。
;/HTML>
3.2 HTML から PHP へ
上からわかるように、すべてのページに同じヘッダーとフッターがあります。作業負荷が軽い場合は、上記のように各ページに同じ情報を書き込むのは問題ありませんが、100 ページを超えるページがあり、すべてのページのヘッダーまたは下部を変更する必要がある場合、どれだけの労力を費やさなければならないかを想像してみてください。ページごとに手動で変更するのは、何と退屈で退屈な作業でしょう。したがって、これらのページの PHP ヘッダー ファイルと下部ファイルを作成し、すべての HTML ページでそれらを参照するだけで済みます。これらのインクルード ファイルは、include というサブディレクトリに配置します。以下では、これらのサイトに共通するコンテンツをファイルに書き込みます。
サイト全体の変数設定: common.inc
//サイト全体の変数
$MyEmail = "phptalk@tnc.org";
$MyEmailLink = "$MyEmail";
$MyName = "PHP Talk";
$MySiteName = $MyName." のホームページ";
?>
一般的なページ ヘッダー: header.inc
< ;?
// 一般的なページヘッダーを定義します
SMALL>
によって "$MyName ($MyEmailLink)"
.inc");
?>
私のささやかな住居へようこそ、ここにはまだ何もありませんが。
でも、すぐにもっと増えることを願っています。
include("include/common.inc");
新しい cont.php3:
$title = "連絡先情報";
?> 1-800-PHP-INFO までご連絡ください
< ;?
include("include/footer.inc");
これで、この配置の利点が推測できます。ページのヘッダーまたは下部を変更したい場合は、対応するファイルを変更するだけで済みます。電子メール アドレスや名前を変更したい場合は、common.inc ファイルを変更するだけです。任意のファイル名またはファイル拡張子のファイルをファイルに含めることができ、他のサイトのファイルを含めることもできることにも注目してください。
3.3 カウンター
ホームページにカウンターを追加しましょう。この例は何度も説明されていますが、ファイルの読み取りと書き込み、および独自の関数の作成方法を示すのに依然として役立ちます。 counter.inc には次のコードが含まれています:
/*
|| 単純なカウンター
*/
function get_hitcount($counter_file)
{
/* カウンターがゼロに戻っていない場合は、このようにします。使用されている場合、初期値は 1 になります
もちろん、人々を騙すために初期値を 20000 に設定することもできます
*/
$count=0;
// カウンターを保存するファイルが既に存在する場合は、その内容を読み取ります
if ( file_exists($counter_file ) )
{
$fp=fopen($counter_file,"r");// 上位 20 件だけを取り上げました。あなたのサイトがあまり人気にならないことを願っています
$count=0+fgets($fp,20)
// 関数 fgets() は文字列を返すため、メソッドを 0 個追加できます。自動的に整数に変換します
fclose($fp);
// ファイル操作が完了しました
}
// カウント値を 1 回増加します
$count++;
// 新しいカウント値をファイルに書き込みます
$fp= fopen($counter_file) ,"w");
fputs($fp,$count);
# カウント値を返します
}
?>このカウンターを表示するファイル:
include("include/counter.inc");
// ファイル counter.txt にカウンター値を入れ、それを読み出して出力します
printf ("
n",
get_hitcount("counter.txt"));
include("include/footer.inc");
?>
新しい Front.php3 をチェックしてください
3.4 フィードバック フォーム
視聴者が記入して電子メールで送信できるように、別のフィードバック フォームを追加しましょう。たとえば、非常に単純なメソッドを使用して実装します。1 つはビューアに入力フォームを提供するページ、もう 1 つはフォーム データを取得して処理し、メールで送信するページです。
PHP でフォームデータを取得するのは非常に簡単です。フォームが送信されると、フォームに含まれる各要素に対応する値が割り当てられ、一般変数への参照のように使用できます。
if ( ! empty($searchstr) )
{
// empty() はクエリ文字列が空かどうかを確認するために使用されます
// 空でない場合は grep クエリ
echo "
n" を呼び出します
// grep を呼び出し、大文字と小文字を区別しないモードですべてのファイルをクエリします
$cmdstr = "grep -i $searchstr *";
$fp = Popen( $cmdstr, "r" ) // コマンドを実行し、パイプを出力します
$myresult = array (); // クエリ結果を保存します
while( $buffer = fgetss ($fp, 4096))
{
// grep は次の形式を返します: ファイル名: 一致する文字列の行数
// したがって、関数split( ) データを分離して処理します
list($fname, $fline) = split(":",$buffer, 2);
// 最初に一致した結果のみを出力します
if ( !define($ myresult[$fname] ))
$myresult[$fname] = $fline;
}
// 結果を配列に保存し、処理して出力できます
if ( count($myresult) )
{
echo "< OL>n";
while(list($fname,$fline) = each($myresult))
echo "
n";
echo "n";
}
else
{
// クエリ結果がない場合
echo "申し訳ありませんが、 $searchstr
include("include/footer.inc");
? >
注:
PHP_SELF は PHP の組み込み変数です。現在のファイル名が含まれます。
fgets() は、最大 4096 (指定された) 文字長までファイルを 1 行ずつ読み取ります。
fgetss() は、出力 HTML タグを解析する点を除いて、fgets() に似ています。
split() のパラメータは 2 です。これは、出力を 2 つの部分に分割するだけでよいためです。 「:」も省略する必要があります。
each() は配列操作関数であり、配列全体をより簡単に走査するために使用されます。
popen()、pclose() は、パイプライン処理が追加されていることを除いて、fopen()、fclose() と非常によく似た機能を持っています。
上記のコードは検索エンジンを実装するための良い方法ではないことに注意してください。これは、PHP をより良く学習するための単なる例です。理想的には、キーワードを含むデータベースを構築してから検索する必要があります
4. データベースへのリンク
PHP を使用すると、データベースに簡単に接続し、データを要求して Web サイトに表示したり、データベース内のデータを変更したりすることができます。 MySQL は非常に人気のあるデータベースであり、インターネット上には PHP と MySQL に関するチュートリアルが多数あります。 MySQL は無料なので、多くの人を魅了するかもしれません。 MySQL は幅広い用途に使用できるため、ここでは MySQL の使用法について詳しく説明しません。 Oracle はエンタープライズ アプリケーションで広く使用されているため、Oracle を使用して PHP とデータベースの接続を紹介します。 Oracle データベースの設計原則については、議論の範囲を超えているため、言及しません。
PHP は、Oracle に接続するための 2 つの関数セット、つまり ORA_ 関数と OCI 関数を提供します。 ORA_ 関数は少し古いです。 OCI機能のアップデートにより改善されたとのこと。 2 つの使用構文はほぼ同じです。前に述べたように、PHP インストール オプションは両方の使用をサポートする必要があります。
Microsoft Windows プラットフォームへの PHP3 対応 Apache サーバーのインストールに関する詳細および Oracle データベースに関する詳細については、次の URL を参照してください: www.csoft.net/~vsbabu/articles/oraphp.html。
4.1 接続
if ($conn=Ora_Logon("user@TNSNAME","password"))
{
echo "SUCCESS ! データベースn";
else
{
echo "Failed :-( データベースnに接続できませんでした";
}
Ora_Logoff($conn);
phpinfo();
?>
上記のコードはTNSNAMEを使用しています( tnsnames.ora ファイルで指定された Oracle データベース名、ユーザー名、およびパスワードを使用してデータベースに接続します。接続に成功すると、ora_logon 関数はゼロ以外の接続 ID を返し、それを変数 $conn に保存します。
4.2.お問い合わせ
データベースへの接続の準備ができたと仮定して、実際にデータベースにクエリを適用してみましょう。次のコードは、接続とクエリの典型的な例を示しています:
/*
* データベースに接続してクエリを実行します
*/
function printoraerr($in_cur)
{
// Oracle にエラーがあるかどうかを確認します
// If エラーがある場合、それが表示されます
// ポインタがアクティブ化されると、Oracle への各リクエストの後にこの関数が呼び出されます
if(ora_errorcode($in_cur))
echo "Oracle code - ".ora_error ($in_cur)."n";
return;
/**メインプログラム*/
if (!($conn=ora_logon("user@TNSNAME","password")))
{
echo "データベースへの接続に失敗しましたn";
終了;
}
echo "接続として接続しました - $conngt;
n";
echo "カーソルを開いています...
n";
$cursor=ora_open($conn); printoraerr( $cursor);
echo "開いたカーソル - $cursor
n"; ";
echo "クエリを解析しています $qry ...
n";
ora_parse($cursor,$qry,0); printoraerr($cursor);
echo "クエリparsed
n";
echo "カーソルを実行しています...
n";
ora_exec($cursor); printoraerr($cursor);
echo "カーソル
nを実行しました";
echo "カーソルをフェッチしています ...
n";
while(ora_fetch($cursor))
{
$user=ora_getcolumn($cursor,0); printoraerr($cursor);
$sysdate=ora_getcolumn($cursor, 1); printoraerr($cursor);
echo " row = $user, $sysdate
n";
}
echo "すべてのレコードを取得しました"; echo "カーソルを閉じています...
n ";
ora_close($cursor);
echo "カーソルを閉じています
n"; ora_logoff($conn);
echo "Oracle
n からログオフしました"
?> (翻訳者注: 上記のコード部分にはコメントがありません。PHP マニュアルの Oracle データベース関数のセクションを参照してください)
4.3 結果を表示する
次のコードは、データベースにクエリを実行して結果を出力する方法を示しています:
function printoraerr($in_cur, $conn)
{
// Oracle がエラーを起こしたかどうかを確認します
// Ifエラーがあるので表示します
// ポインタがアクティブ化されている場合、Oracle 関数へのリクエストのたびにこれを呼び出します
// エラーが発生した場合は、すぐに終了します
if(ora_errorcode($in_cur))
{
echo " Oracle コード - ".ora_error($in_cur)."
n";
ora_logoff($ conn);
exit;
}
return;
}
function exequery($w_qry,$conn)
{
$cursor=ora_open($conn);
ora_parse($cursor,$conn); ,$conn);
$numcols=ora_numcols($cursor);
/ / ヘッダーを表示
n" n"; n";
for ($i=0; $i<$w_numcols;$i++)
{
$align=(ora_columntype($cursor,$i)=="NUMBER ")?"RIGHT":"LEFT";
echo "t".ora_columnname($cursor,$i)." n";
}
echo "
while(ora_fetch($cursor))
{
echo " n"; n";
for ($i=0;$i<$w_numcols;$i++)
{
$ align=(ora_columntype($cursor,$i)=="NUMBER")?"RIGHT": "LEFT"
if(ora_columntype($cursor,$i)=="LONG")
echo " n"; ". <br>ora_getcolumn($cursor,$i) ."
else
echo "".ora_getcolumn($cursor,$i)." n" ;
printoraerr($cursor,$conn);
}
$numrows++;
echo "
}
if ($numrows==0)
echo " n"; クエリはレコードを返しませんでした
else
{
echo "n"; n";
echo "Count n"
echo "$numrows n";
echo "
echo "
}
// メインプログラム
if(!($conn= ora_logon("user@SID","password")))
{
echo "エラー: データベースに接続できません"
終了;
$qry="SELECT
deptno "Dept"
,empno "Emp"
,empnm "名前"
,salary "給与"
FROM
employee
ORDER BY 1,2";
exequery($qry);
ora_logoff($conn);
?>
(翻訳者注: 上記のコード スニペット)コメントが不足している場合は、PHP マニュアルの Oracle データベース機能セクションを参照してください)
4.4 HTTP に基づく Oracle ログイン
Oracle ログインを確認するために、PHP ページのコードの前に次のコードを追加します。 $SID を正しく設定する必要があることに注意してください。
if(!isset($PHP_AUTH_USER))
{
Header("WWW-authenticate: Basic realm="$SID"");
$title= "ログイン手順";
echo "
n"
終了
}
else
{
if (!($conn=ora_logon(") $PHP_AUTH_USER@$SID",$PHP_AUTH_PW)))
{
Header("WWW-authenticate: Basic realm="$SID"");
Header("HTTP/1.0 401 Unauthorized");
$title="ログイン手順";
echo "
n";
サイトに入る権限がありません
exit;
}
}
?>
5. その他の機能
5.1 画像の生成
PHP は画像を操作できます。 GD ライブラリがインストールされている場合は、PHP を使用してイメージを生成することもできます。
Header("Content-type: image/gif");
$string=implode($argv," ");
$im = imagecreatefromgif("images/button1.gif"); ImageColorAllocate($im, 220, 210, 60);
$px = (imagesx($im)-7.5*strlen($string))/2;
ImageString($im,3,$px,9,$string,
他のページでは、次のタグ を通じて呼び出され、上記の button.php3 コードがテキスト値を取得し、その値を別途取得した画像ファイルに追加します。上記のコード内の画像ファイルは、images/button1.gif です。最終的にブラウザに出力されます。フォーム フィールドで画像ボタンを使用したいが、ボタン上のテキストが変更されるたびに新しい画像を再生成する必要がない場合は、この簡単な方法を使用して画像ファイルを動的に生成できます。
5.2 Cookie
PHP は HTTP ベースの Cookie をサポートします。必要に応じて、通常の変数と同じように簡単に Cookie を使用できます。 Cookie はブラウザがクライアントに保存する情報であり、特定の PC 上の誰かがサイトを訪問したかどうか、訪問者のサイト上での軌跡などを知ることができます。 Cookie の使用の典型的な例は、ブラウザの設定のスクリーニングです。 Cookie は関数 setcookie() によって設定されます。 HTTP ヘッダーを出力する関数 header() と同様に、実際のコンテンツがブラウザーに出力される前に setcookie() を呼び出す必要があります。以下は簡単な例です:
if (empty($VisitedBefore))
{
// Cookie が設定されていない場合は、現在の時刻値を Cookie に割り当てます
// 関数の最後のパラメータは次のように宣言しますCookie 保存された時間
// この例では 1 年です
// time() 関数は、1970 年 1 月 1 日からの時間を秒単位で返します
SetCookie("VisitedBefore", time(), time() +(60 *60*24*365));
}
else
{
// 訪問者様、また来てください
echo "こんにちは、おかえりなさい
// クッキーを読んで判断してください
if ( (time(; ) - $VisitedBefore) >= "(60*60*24*7)" )
echo "なぜ戻ってくるのに 1 週間もかかったのですか。もっと頻繁に来るべきです
}
?
5.3 HTTP検証に基づく
PHP が CGI モードで実行されている場合、HTTP ベースの認証はできません。関数 header() を使用して HTTP ヘッダーを送信して認証を強制すると、クライアント ブラウザーにユーザー名とパスワードを入力するためのダイアログ ボックスが表示されます。これら 2 つの変数は $PHP_AUTH_USER と $PHP_AUTH_PW に保存されており、これらの 2 つの変数を使用して正当性を検証し、エントリを許可できます。次の例では、ユーザー名とパスワードのペアを使用して tnc/nature へのユーザーのログインを認証します。
if(!isset($PHP_AUTH_USER))
{
Header("WWW-Authenticate: Basic realm="My Realm"") );
Header("HTTP/1.0 401 Unauthorized");
echo "ユーザーがキャンセルボタンを押した場合に送信するテキスト"
}
else
if ( !($PHP_AUTH_USER=="tnc " && $ PHP_AUTH_PW=="nature") )
{
// ユーザー名とパスワードの組み合わせが間違っている場合は、再認証を強制します
Header("WWW-Authenticate: Basic realm="My Realm"")
Header( "HTTP /1.0 401 Unauthorized");
echo "エラー: $PHP_AUTH_USER/$PHP_AUTH_PW が無効です。";
exit;
}
else
{
echo "ようこそ tnc!";
}
?>
実際 実際参照すると、上記のコード スニペットでは明らかなユーザー名とパスワードのペアは使用されない可能性が高く、代わりにデータベースまたは暗号化されたパスワード ファイルを使用してアクセスします。
5.4 ファイルのアップロード
ファイル機能を実装するには、PHP を使用できます。クライアントのブラウザは Netscape3 以降または IE3 以降である必要があることに注意してください。以下はこの関数の簡単なデモです:
ENCTYPE="multipart/form-data" METHOD=POST>
NAME="MAX_FILE_SIZE" VALUE="2000000"> INPUT TYPE ="FILE"
NAME="uploadfile" SIZE="24" MAXLENGTH="80">
(ファイルのアップロード中にわずかな
遅延が発生する場合があります。)