初心者による初心者のためのPHP講座 第1回 PHPとは

初心者による初心者のためのPHP講座 第1回 PHPとはWordPressのカスタマイズやプラグインを作成する事を目的に、2011年の4月から独学で「PHP」について勉強を始めた。

「PHP」は、簡単とは言われているが、私の場合は、海外在住のため日本語の書籍も簡単に手に入るわけではなく、インターネットの情報や既存のプログラムのソースコードを元に学んだため、苦労は無かったとは言えないが、最初の作品となるWordPress用プラグイン「Add attrib for LightBox」を意外と簡単に完成させられたこともあり、その後もPHPでの開発を継続している。

実際、最初につまずくと、先へ進めないものである。

そこで「初心者による初心者のためのPHP講座」と題して、私の経験を交えた「PHP入門書」をブログ上で作成してみることにした。

これは、私の勉強にもなる。

私がPHPを勉強し始めたきっかけが「WordPress」であり、PHPを使って作成しているものが「WordPress」用のプラグインであるため、一般的なPHPの話と言うよりは「WordPress」寄りの内容になるだろう。

どこまで出来るか分からないが、これからPHPを学ぼうとする方の手助けになれば幸いである。

なお、「初心者による初心者のためのPHP入門」の投稿は、不定期に行う。

PHPとは

PHP」は、「PHP: Hypertext Preprocessor」の略で、動的にHTMLを生成することが出来る開発言語である。

要は、PHPを使えば、HTMLだけで記述した場合と比較して、より高機能なHPを簡単に構築することが出来る。

・PHPの特徴

  • ウェブサイト、ウェブアプリケーションの開発に特化。
  • サーバー上で実行される。
  • C言語の影響を受けた構文で、平易な文法。
  • データベースとの連携が容易。
  • スクリプト言語なので大げさな開発環境が不要。

PHPは、1995年にバージョン1.0が登場しており、開発言語としては歴史はそれほど古くない。

にも関わらず、文法が易しいこともあり、広く普及している。

ユーザーが多いということは、書籍やインターネットを通じて情報を得やすいと言う利点もある。

PHPは、ウェブサイト、ウェブアプリケーションの構築に特化した開発言語であり、「PHP」同様に動的なサイトの構築に用いられる事が多い「Perl」とはこの点で異なる。

ウェブサイト上の掲示板、お問い合せフォームなどはPHPで記述できるウェブアプリケーションの例である。

PHPで記述されたアプリケーションの中でも比較的、大規模なものの例を挙げると、「WordPress」やWikipediaで使われている「MediaWiki」、ショッピングカートの「Zen Cart」、「EC CUBE」などがある。

データベースとの連携が容易であることも特徴で、データを「MySQL」などのデータベースという外部の入れ物に保存し、必要に応じて取り出して利用することが出来る。

HTMLでは、表示する内容は全てHTML上に含める必要があるが、PHPの場合は、本文をデータベースに格納し、サイトにアクセスがあった際に、データベースから取り出し、必要に応じて加工した上でブラウザに送信することも可能である。

実際、多くのPHPプログラムがデータベースと連携している。

・PHPで出来ることの例

  • コメントを受け取り、表示する。しかし、危険な部分は、不適切な部分は削除して表示したい。 ⇒ HTMLでは、データを受け取れないし、処理できない。
  • フォームから入力されたデータを整形して管理者にメールで送信する。 ⇒ HTMLでは、データを処理できないし、メールも送信できない。
  • ユーザーの環境に合わせて、自動的に異なる言語のページを表示する。 ⇒ HTMLでは、リンクなどで対応するしかない。

必要な予備知識

PHPは、比較的、敷居の低い開発言語かとは思うが、全くの予備知識なしに学べるものではない。

参考までに私のケースを挙げておくが、PHPを勉強し始める以前にも、HTMLとCSSは、それなりに書け、PerlとJavaスクリプトも少し書けたが、Perlの方は、長い間使っていないので、かなり忘れてしまっていた。

・必要な予備知識

  • HTML
  • CSS
  • 英語(必須ではないが、開発の幅広がる。)

PHPは、ウェブアプリケーションを構築する言語であるため、「HTML」や「CSS」に関する知識は不可欠である。

テキストエディターを使って、HTMLで構造を記述し、CSSでレイアウトして、HPを作ることが出来る方なら全く問題ないだろう。

予備知識として「英語」を上げたのは、PHPに限らず、情報を公開する上での標準言語になっているからだ。

PHPやその他の言語で記述された数多くのプログラムがオープンソースの形で公開されており、自身が作るPHPプログラムに、それらを機能の一部として取り込む事も可能である。

実際に、他にプログラムとの連携を目的とした「ライブラリ」と呼ばれるプログラムも数多く存在する。

それらを利用したいとと思った場合、仕様の解説文を読む必要がある。

しかし、これらは英語で記述されていることが多い。

逆に英語以外の言語で仕様をまとめると、そのプログラムは、世に広まり難いといえるので、ネイティブでない開発者であっても英語で記述している場合が多い。

つまり有名なもの、実績があり、安心できるものを求める場合は、英語は避けて通れない。

「WordPress」のように多言語に翻訳されているものばかりなら良いのだが、実際には、そのようなケースは稀である。

また、自身で開発したプログラムを公開する場合も、仕様や解説文を英語で書いた方が、利用者が獲得しやすく、フィードバックも得られやすい。

プログラミングとは

さて、プログラムを初めて経験する方にとっては、プログラムとは何かすら分からな状況かもしれない。

プログラムは、基本的に「文章」である。

「俳句を作る」、「Twitterにつぶやく」事と、本質的には変わらない。

「俳句」は定型文であり、ルールがある。

また、Twitterにも文字数制限があり、RT、ハッシュなどの流儀がある。

プログラムをこれと全く同じであり、一定のルールに従って文章を作れば良い。

「俳句」、「Twitterのつぶやき」は、ルールに従った上で、人間が理解出来る言葉で書けばよいが、プログラムは、誰に理解できる言葉で記述すべきであろうか?

答えは、PCなどの内蔵されている中核の処理装置「CPU」である。

CPUの理解できる言葉は、マシン語と呼ばれ、0と1と組み合わせである2進数(通常は、16進数で表記)である。

しかし、マシン語で記述されたプログラムなど理解が容易なはずがない。

小規模なアプリケーションが主流だった、古き良き時代には、個人が作るアプリケーションであってもマシン語で記述していたこともあるが、現在の大規模なアプリケーションでは、それも困難である。

また、マシン語は、1つではなく方言があり、CPUの種類毎に異なるため、1つのCPUのマシン語を覚えたからといって、別のCPUのマシン語が簡単に書けるわけではない。

ちなみに私は、インターネットもまだ無く、キャプテンシステムとか騒いでいた古き良き時代にマシン語(アセンブリ言語)を勉強しようとして挫折した。

実際の開発では、C言語のような、より人間が話す言葉に近く、CPUの差を吸収してくれる高級言語(中級言語)と呼ばれる開発言語が使われることが多い。

しかし、C言語は、あくまで人間寄りの言葉であって、C言語で記述されたファイルは、CPUには理解出来ないので、そのままでは実行する事も出来ない。

そこで、C言語で記述されたプログラムは、「コンパイラ」と呼ばれるプログラムを用いてCPUが理解出来る実行形式に変換する作業(コンパイル)を行う必要がある。

※開発言語で書かれた元のファイルをソースファイル、その中の記述をソースコード、コンパイル後のファイルをバイナリと呼ぶ。

通常、プログラムは、ソースコードのままで提供されるのではなく、コンパイルされ、実行形式に変換されて提供、販売されるため、私たちも簡単に利用することが出来る。

それに対してPHPの場合は、バイナリと言った概念は存在しない。

人間寄りの言葉で書かれたソースコードをそのまま実行させる。

では、どのように実行しているかと言うと、実行する際にインタプリタと呼ばれる翻訳機を通すことで、CPUが理解できる言葉に変換し、実行を可能としている。

この方法は、通訳を通して会話するようなものであるため、コンパイルされたバイナリに比べて実行速度が落ちると言う欠点もある。

プラグラムは、コンパイルやインタプリタによる翻訳が必要であるため、プログラミング言語には、一定のルールが必要となる。

翻訳を考えれば、柔軟な人間の言葉よりも、人間寄りの言葉ではあるが、人間の言葉とは異なったシンプルなものの方が都合が良い。

人間の言葉では、同じような意味の事柄を異なった言い回しで表現出来る。

つまり、「画面を表示して頂けますか?」、「画面を表示して下さい。」、「画面を表示しろ!」よりもプログラム言語では、「表示 画面」などの方が遥かに都合が良い。

また、構文も人間の話す言葉に準じるよりも、効率的にプログラムを書く事を優先した方が良い。

その辺りがプログラム言語を難しく見せている理由ではあるかとは思うが、より柔軟な言語である「英語」を学ぶことよりも遥かに易しいとも言える。

開発環境の準備

C言語での開発の場合、コンパイラを必要とし、コンパイルという余計な作業が発生するのに対して、PHPでは、コンパイラは不要であり、コンパイルが不要な分、楽であるとも言える。

つまり、PHPの場合は、特別な開発環境は不要である。

PHPのプログラムは、テキスト形式のファイルで保存する必要があるため、文章を書くための紙に相当するテキストエディタ(シンプルなワープロ)さえあれば良い。

これから、PHPによるプログラミングを始めるなら、必ず、テキストエディタの準備が必要になるが、お金を必要はなく、フリーのもので十分である。

ただし、文字コード、改行コードが選択できるもの使うこと、例えば、Windowsのメモ帳は不可である。

参考:Windows用のテキストエディタを比較

WordPress用のテーマ、プラグインを作成するなら、「UTF-8、BOMなし」で保存できるものにすること。

私は、シェアウェアの「秀丸エディタ」を使っているが、Window用ならフリーの「TeraPad」で十分なので、ダウンロードしてインストールしておくこと。

今後、エディタの操作などは、「TeraPad」を標準して書くようにする。

PHPの実行と実行形態

PHPが翻訳され、実行されることは先に書いたが、つまり、そんための環境が必要となる事を意味している。

では、具体的にどこで翻訳され、実行されるのだろうか?

PHPのプログラムは、ウェブサーバー上で翻訳され、プログラムに従って処理を実行し、実行結果をHTMLとしてブラウザに送信するパターンが基本となる。

ウェブサーバーには、「Apache」などのウェブサーバーアプリケーションがインストールされており、このアプリケーションの働きにより、HPにアクセスがあれば、HTMLで記述されたデータがブラウザに送信され、閲覧者はHPを参照できるが、これだけではPHPの実行までは出来ない。

更にオプションとして「PHP」を加えることで、PHPで記述されたサイトの出力も可能となる。

PHPで記述されたプログラムは、Apacheなどのウェブサーバーアプリケーション自身が実行するか、ウェブサーバーアプリケーションが、PHPを解釈、実行できるPHPプログラムを起動して代わりに実行させている。

前者のようなPHPの実行に仕方は、PHPがウェブサーバーアプリケーションの一部(モジュール)として組み込まれている場合にのみ可能であり、実行が高速である。

後者のような方法は、CGIと呼ばれ、ウェブサーバーが、逐次、PHPプログラムを起動する必要があるため実行が遅くなる。

PHPは、ウェブサーバー上で動作するため、PHPを利用するためには、PHPをサポートするレンタルサーバーの契約が必要となる。(PC上で動作される方法もあるが割愛する。)

これは、一般的なウェブサイトを構築するために借りるレンタルサーバーで問題ない。

PHPをサポートしないレンタルサーバーを探すほうが難しいであろうから、PHPのサポートの有無については、あまり心配はいらないだろう。

PHPと単にいう場合は、PHPで記述されたプログラムを指すことが多いが、ウェブサーバーにインストールされているPHPを実行するためのプログラム(PHPランタイム)を指すこともあり、こちらがPHPのコアとも言える。

ウェブサーバーにインストールされているPHPにもバージョンがあり、できる限り新しいバージョンのものがインストールされているサーバーが好ましいが、レンタルサーバー会社側の都合にもよるので、最新のものが利用できるとは限らない。

新しいバージョンのPHPでは、機能が拡張されており、新しいバージョンで追加された機能を使ったPHPプログラムは、古いバージョンのPHPでは動作しないので注意が必要だ。

例えば、「WordPress 3.2.1」は、「PHP 5.2.4」以上がインストールされたサーバーでなければ正常に動作しない。

CGIとモジュール

一般的な共用レンタルサーバーの場合、PHPは、CGIとして実行されるパターンが多い。

詳しくは書かないが、これはセキュリティ上の問題を考慮してのことだ。

モジュールとして組み込まれているレンタルサーバーもあるが、セキュリティ上の問題で、通常は、PHPをセーフモードで動作させている。

セーフモードには制限があるため、許可されない関数や操作が生じてしまう。

PHPに慣れるまでは、CGIとしてPHPが動作するレンタルサーバーの方が無難かもしれない。

他に勉強すべき事

PHPの知識だけでは、目的とするプログラムを完成させることは難しいかもしれない。

予備知識としてあれば、なお良いが、下記についても並行して学ぶ必要がある。

  • SQL文などSQLに関する基礎的な知識
  • Javaスクリプト
  • セキュリティ

PHPのプログラムは、データベースと連携することが多いため、「SQL」に関する基礎的な知識は欠かせない。

また、現在のウェブサイトは、「Javaスクリプト」は欠かせない技術の1つとなってるため、出来れば並行して勉強したほうが良い。

ちなみに個人的は感想では、「Javaスクリプト」の方が「PHP」より難しい。

最後の「セキュリティ」に関してだが、PHPは、平易な文法であるため、初心者でも掲示板程度のプログラムを書くことは難しくない。

反面、セキュリティ面で脆弱なプログラムを作ってしまいかねないので、どのような攻撃が存在し、どのような対処方法があるかは知っておく必要がある。

具体的には、「クロスサイトスクリプティング(XSS)」、「クロスサイトリクエストフォージェリ(XSRF)」、「SQLインジェクション」、「ディレクトリトラバーサル」などだ。

WordやExcelのようなデスクトップアプリケーションと異なり、掲示板、お問い合せフォームなどのウェブアプリケーションは、不特定多数が利用することが多いので、セキュリティ上も危険であることを忘れていはいけない。



PHP, PHP講座, ネット・PCPermalink