Tag Archives: PHP

初心者による初心者のためのPHP講座 第9回 関数の定義

この講座でも、echo()を始めとして、date()、define()、array()、explode()、extract()などの様々な関数が登場している。(厳密には関数でないものも含まれるが・・・。) これらは、PHPが標準で備えている関数であり、構文と並んでPHPでのプログラミングの基本となる要素であるが、「ユーザー定義関数」として自身で関数を定義することも出来る。 関数については「初心者による初心者のためのPHP講座 第2回 PHPの基本構造」で触れているので、もう一度おさらいして欲しい。 ユーザー定義関数は、比較的小規模な処理を1つにまとめたもので、PHPのプログラムは、複数の「ユーザー定義関数」を組み合わせて実行させることで成立しているとも言える。 他の言語では、PHPの関数のような、ひとまとまりの処理を「サブルーチン」と呼ぶ場合もある。 ユーザー定義関数は、下記のようにfunction文を用いて定義する。 function 関数名() { 処理1; 処理2; 処理3; . . . } 関数は、1つまたは複数の引数を取ることもあるが、その場合は function 関数名(引数1, 引数2, 引数3…) { 処理1; 処理2; 処理3; . . . } となる。 関数名には、英数字、アンダースコアを使用することが出来るが、最初の一文字は、アルファベットかアンダースコアでなければならない。 戻り値を参照渡しする場合に、「&」で始まる関数を定義することがあるが、厳密には「&」は変数名の一部ではなく、「&関数名」となっている。 ユーザー定義関数を実行する場合は、標準の関数を実行する場合と同様に 関数名(); または 関数名(引数1, 引数2, 引数3…); とすれば良い。 また、ユーザー定義関数の戻り値を別の関数の引数として用いることも出来る。 <?php echo my_string(); round(my_value(), 2); // my_string()とmy_value()はユーザー定義関数 ?> このあたりは、PHPの標準関数と同じである。 下記の例では、get_date_yesterday()という関数を定義しているが、これは昨日が何曜日だったかを求め、それを戻り値として返す関数である。 <?php echo get_date_yesterday(); function get_date_yesterday() { $yesterday = time() + (60 * 60 * 9) – (60 * 60 * 24 * 1); // $yesterday = time() + (60秒 * 60分 * 9時間) – (60秒 * 60分 * 24時間 * 1日); $date_yesterday = date('l', $yesterday); return $date_yesterday; } ?> time()関数は、現在の時刻が、1970年1月1日0時0分から何秒経過したか求める関数であるが、 GMT基準であるため、日本時間に修正した上で、1日分の秒数を引いている。 こうして補正した秒数をdate()関数で整形し、曜日を求めている。 最後にreturn()を使って、戻り値として変数$date_yesterdayの値を返している。 return()は、処理を中断し、その引数を戻り値として返すが、echo()などと同様に厳密には関数ではないため、通常は、()は使わずに return 引数(戻り値となる値、変数); のように記述する。 戻り値として値を返さず、echo()関数で表示することが前提なら <?php get_date_yesterday(); function … 続きを読む →

Posted in PHP, PHP講座, ネット・PC | Tagged | 2 Comments

初心者による初心者のためのPHP講座 第8回 ループ処理

PHPでは、同じ処理を繰り返し実行するための「ループ処理」を記述出来る。 ループ処理は、PHPでは、出番が多い構文であり、必ずマスターしておくこと。 while構文 while構文はシンプルなループを記述するための構文で、if文と似ている。 while (式) { 処理 } if文の場合は、式が真の場合に処理を実行するが、while文の場合は、式が真である限り、同じ処理を繰り返し実行する。 下記のサンプルは、$countが6未満であれば処理を繰り返す。 $countの初期値は1であり、処理が実行される度に1加算される。 <?php $count = 1; while ($count < 6) { echo $count; $count++; } ?> 従って、上記のサンプルを実行すると「12345」と表示される。 for構文 for構文は、while構文と比較すると複雑な構文で、繰り返しの条件を定義するために3つの式を必要とする。 for (式1; 式3; 式3) { 処理 } 式1は、whileを開始した時に1度だけ実行され、式2は、処理に実行を完了する度に実行される。そして、式3が真であれば処理が繰り返される。 複雑ではあるが、以下のように読み替えると理解しやすい。 for (初期値; 条件式; 増減) { 処理 } 式1で変数の初期値を定義し、式3で変数の増減を定義しておけば、式2の条件式で変数を評価することで意図した回数ループを繰り返すことが出来る。 <?php for ($count = 1; $count < 6; $count++) { echo $count; } ?> 上記のサンプルでは、$countの初期値が1で、処理の度に1増える。 そして、$countが6未満なら処理が繰り返されるため、実行すると「12345」と表示される。 次のサンプルでは、複数の変数の初期値と増減を記述している。 <?php for ($count = 1, $value = 5; $count < 6; $count++, $value–) { echo "\$count:".$count." \$value:".$value."<br />"; } ?> 複数の変数の初期値と増減を記述する場合は、それらをカンマで区切ること。 for構文は、次のように記述しても良い。 for (式1; 式2; 式3): 処理 endfor; do~while構文 while構文やfor構文が、まず条件式を評価した上で、条件式が真であれば処理を繰り返すのに対して、do~while構文は、まず処理を実行してから、条件式の評価が行われる。 つまり、条件を満たしているか否かに関係なく、少なくとも1回の処理が実行され、2回目以降は、条件式が真である場合のみ繰り返される。 do { 処理スクリプト } while(式); 条件評価と処理の順序が逆であるが、基本的にはwhile構文と似ている。 次にサンプルは、$valの初期値が既に条件を満たしていない。 <?php $val = -1; do { echo $val; } … 続きを読む →

Posted in PHP, PHP講座, ネット・PC | Tagged | 1 Comment

PDFファイルを生成するためのPHPライブラリ「TCPDF」

昨年末にWordPressの投稿や固定ページをPDF形式でダウンロード出来るようにするプラグイン、「POST2PDF Converter」をリリースしたところ、予想外に反響があった。 そもそも、同様の機能を持つプラグインは既に複数存在しており、「POST2PDF Converter」は、特に目新しいプラグインではないのであるが・・・。 投稿や固定ページをPDFへ変換するプラグインのうち、人気のものは外部のオンラインサービスを利用してPDFファイルの変換している。 例えば、「Print Friendly and PDF Button」は、「printfriendly」と言うサービスを利用してPDFに変換している。 また、「PDF24 Article To PDF」は、「PDF24」というサービスを利用しており、「PDF & Print Button Joliprint」は、「joliprint」を利用している。 これらのサービスは、PDF変換以外の機能も提供しているケースが多く、概ね高機能である。 対して「POST2PDF Converter」は、「TCPDF」というオープンソースのPHPライブラリを利用しており、外部サービスに依存せず、サーバー上で変換を行う。 もっとも、「TCPDF」を利用したプラグインは、以前から他にも存在しており、この点でも「POST2PDF Converter」が特に目新しいものでは無いのであるが・・・。 どちらかと言えば、「TCPDF」を利用したプラグインは、WordPressのプラグインの中ではマイナーな部類になるが、それは「TCPDF」が機能的に劣ると言うことではなく、UTF-8のWordPressコンテンツとも基本的に相性が良い。 「TCPDF」は、イタリア人のNicola Asuni氏(Tecnick.com S.r.l)によって開発されたPHPライブラリであり、「FPDF」の派生である。 このライブラリを使用するには、PHP 5が必要であるが、PHP 4用のパッケージも用意されている。 PHPのライブラリであるが故に、WordPressとの相性も良く、簡単な記述でDBからHTML形式のコンテンツ取得し、それを「TCPDF」に渡してPDF形式に変換することが出来る。 また、グラフやQRコードなどのバーコードの描画も可能であり、工夫次第で、かなり凝ったPDFを生成できるようになっている。 APIは単純とは言えないが、僅かなコードの追加でHTMLをPDFに変換するための処理を記述できる。 WordPressのようにコンテンツをHTML形式で取得し易いシステムであれば、導入に苦はないはずである。 PDFへの変換処理に関しては「TCPDF Examples」でサンプルが用意されているので、これを真似て書くと手っ取り早いだろう。 少し版は古いが「MONZEN.ORG」で日本語ドキュメントが用意されているので、これも参考になる。 TCPDFについて TCPDF マニュアル 日本語版 ディレクトリパス、フォント、フォントサイズと言った設定パラメーターは「/config/tcpdf_config.php」で定数として設定する形になっており、必要に応じてこれを編集する。 「/config/lang」ディレクトリには、各言語用の設定ファイルが格納されている。 バージョン5.9.145からは日本語用の設定ファイル「jpn.php」が同行されているので、これを使えば良いが、設定ファイルの記述自体は単純であり、足りない言語の設定ファイルも簡単に自作することが出来る。 $l['a_meta_charset'] で文字コード、$l['a_meta_dir']で記述方向(左から右ならltr、右から左ならrtl)、$l['a_meta_language']で言語コード定義する。 そして、$l['w_page']では、「page」の訳を定義する。 下記は、UTF-8、日本語の場合の記述例である。 // Japanese global $l; $l = Array(); // PAGE META DESCRIPTORS ————————————– $l['a_meta_charset'] = 'UTF-8'; $l['a_meta_dir'] = 'ltr'; $l['a_meta_language'] = 'ja'; // TRANSLATIONS ————————————– $l['w_page'] = 'ページ'; //============================================================+ // END OF FILE //============================================================+ この設定ファイルは、最初にrequire_once()で読みこめば良い。 更にもう1つ、言語によって変更すべき要素があり、それがフォントである。 フォントは、setHeaderFont、setFooterFont、SetFont、SetDefaultMonospacedFontメソッドで指定する。 なお、SetDefaultMonospacedFontでは、プロポーショナルフォントを指定することは出来ず、等幅フォントを指定する必要がある。 標準の日本語フォントは、 cid0jp(ArialUnicodeMS) kozgopromedium(Kozuka Gothic Pro) kozminproregular(Kozuka Mincho Pro) の3つであるが、残念ながら文字化け等が発生するケースがある。 場合によっては、オープンソースのTrueType日本語フォントなどをTCPDF用に変換して、それを使った方が良いかもしれない。 バージョン5.9.123からは、TrueTypeフォントをTCPDF用に変換するためのメソッド、addTTFfont()が追加されたので、フォントの変換の際にはこれを利用する。 また、5.9.122以前に同梱されていたツールを使っても良い。 なお、このサイトでもオープンソースのIPAフォントと梅フォントをTCPDF用に変換したものを公開している。 TCPDFは、HTMLタグを解釈し、タグに従ってレイアウトを行った上でPDFに変換するが、全てのタグや属性を正しく解釈できる訳ではない。 また、通常ウェブサイトは、別途CSSを読み込んでレイアウトを行なっているが、このCSSがPDFに反映される訳でもない。(あくまでHTMLのみ解釈する。) そのため、生成したPDFは、実際のウェブサイトとレイアウトが異なってしまう場合が多い。 必要であれば、HTMLにstyle属性を付加するなどして、微調整する必要がある。 PDFに変換される事を意識してHTMLを書くのも良いし、HTMLをそのままTCPDFに渡すのではなく、その前の段階で、HTMLをTCPDFに最適化させる処理を入れても良い。 拘れば、ここが最も面倒な作業になるだろう。

Posted in PHP, WordPress, ネット・PC | Tagged , , | Leave a comment

初心者による初心者のためのPHP講座 第7回 配列

「配列」は変数の一種であるが、通常の変数が、1つの変数に1つの値しか格納できないのに対して、「配列」とは、複数の値を格納する変数のことである。 配列は、格納する値同士の紐付けが容易であるため、重宝する場面が多く、出番も多いので必ずマスターしておく必要がある。 私の場合、それほど多用するわけではないが、設定パラメーターを格納する際には、よく配列を用いている。 配列の定義 例えば、年齢を変数に格納するとしよう。 複数の年齢を格納する場合は、今まで学んだ知識の範囲でこれを記述するとなると、 <?php $age1 = 13; $age2 = 25; $age3 = 46; ?> のように複数の変数を定義する必要がある。 値の数が少ない場合は、上記のような定義も悪くはないが、値の数が1,000個、10,000個となると、定義すべき変数の数が膨大になり、非常に効率が悪い。 しかし、配列を用いれば、複数の値を1つの変数に格納することが出来る。 実際に配列を使って定義すると以下のようになる。 <?php $age[0] = 13; $age[1] = 25; $age[2] = 46; ?> 上記の例では、1つの変数と言うことも出来る配列$ageに全ての構成要素が格納されている。 配列と言っても通常の変数と書式に違いはないが、配列に格納される各要素(値)を定義する場合は、角括弧構文を用いて[キー]を指定する必要がある。 <?php $変数名[キー1] = 値1; $変数名[キー2] = 値2; $変数名[キー3] = 値3; ?> 「キー」と「値」は、必ずペアになっており、「キー」に紐付けられた「値」を配列の要素と呼ぶ。 「要素」は「値」が住んでいる部屋で、そのルームナンバーが「キー」と理解すると良いだろう。 配列から値を取り出したい場合も、ルームナンバーである「キー」を使って取り出すことが出来る。 値としては、通常の変数同様に、整数値、浮動小数点、文字列、論理値、NULLが格納できる他、配列を格納することも出来る。 配列を格納する配列を、多次元配列と呼ぶが、これについては後ほど説明する。 以下の例では、配列$ageを定義し、$ageからキー「1」の値を取り出してecho()で表示させている。 <?php $age[0] = 13; $age[1] = 25; $age[2] = 46; echo $age[1]; ?> 以上のように、特定の値を取り出す場合にも角括弧構文を用いて、キーで指定する。 キーに0から始まる整数値を使う場合は、下記のように角括弧構文の中のキーを省略して定義することも出来る。 <?php $age[] = 13; $age[] = 25; $age[] = 46; echo $age[1]; ?> 上記の例では、キーは省略されているもの、各要素には先頭から順に0、1、2・・・と言った整数値がキーとして与えられており、「25」と表示される。 また、配列は角括弧構文以外でも定義でき、配列の定義のために用意されているarray()関数を使って配列を定義することも出来る。 <?php $age = array(13, 25, 46); ?> キーは、省略されているが、この場合も、各要素には0から始まる整数値のキーが自動的に割り当てられる。 明示的にキーを書くならば、下記のようになる。 <?php $age = array(0 => 13, 1 => 25, 2 => 46); ?> array()関数を用いる場合は、演算子「=>」を使って、キーと値の関係を記述し、要素を定義できる。 また、explode()関数を使えば、特定の文字で区切られた文字列を配列に格納することが出来る。 <?php $str_age = "13,25,46"; $age … 続きを読む →

Posted in PHP, PHP講座, ネット・PC | Tagged | Leave a comment

初心者による初心者のためのPHP講座 第6回 条件分岐

ここまで学んだ知識でも、変数の定義や関数を記述して簡単なプログラムを作成することは出来るはずである。 しかし、条件分岐やループ処理などの制御構文を記述することで、初めて複雑なプログラミングが可能になる。 今回は「条件分岐」について説明する。 「条件分岐」とは、特定の条件を満たすか否か判定し、その結果に応じて処理を割り当てる制御構文である。 条件分岐には「if文」、「switch文」が使われる。 if文 「if文」とは、「もし~ならば、処理を実行する」といった意味を持つ構文である。 条件式の評価を行い、その条件が真(ture)であれば、処理を実行する。 <?php if (条件式) { 処理; } ?> 下の例では、変数$colorが、「red」であれば、echo()関数が実行され、「Red」と表示される。 <?php if ($color == "red") { echo "Red"; } ?> if文では、「()」内に評価する条件式を記述し、対応する処理は「{}」内に記述する。 条件式の評価の部分で使われている「==」は、比較演算子と呼ばれる構文で、この場合は、左辺と右辺の値が等しいことを意味している。 「$colorがredと等しい」か否かの評価、つまり「$colorがred」であるか否かの評価を行なっている。 上記のif文は、条件式の評価が偽(false)である場合は、何も行わない、単一の条件の評価であるが、「else if文」を使えば、最初の「もし(if) ならば」が偽であれば、「あるいは ならば」といった別の評価を行うことが出来る。 下記の例では「$colorがred」である場合は、「echo “Red”;」実行して、if文を終了するが、「$colorがred」でない場合は、続いて「$colorがblue」か否かの評価が行われる。 <?php if ($color == "red") { echo "Red"; } else if ($color == "blue") { echo "Blue"; } ?> 「else if」文は、下記のように複数回記述することも出来る。 <?php if ($color == "red") { echo "Red"; } else if ($color == "blue") { echo "Blue"; } else if ($color == "black") { echo "Black"; } ?> 「else if」は、空白を空けずに「elseif」と書いても良い。 個人的には、「else if」と書く癖があるが、同様の構文を持つJavaスクリプトで「elseif」と書くべきところを、「else if」と書いて失敗することがある。 そう言った意味では「elseif」で覚えたほうが良いかもしれない。 更に、「else文」を使えば、いずれの条件式評価も偽となった場合の処理を記述することが出来る。 <?php if ($color == "red") { echo "Red"; } else if ($color == "blue") { echo "Blue"; } else if ($color … 続きを読む →

Posted in PHP, PHP講座, ネット・PC | Tagged | Leave a comment

初心者による初心者のためのPHP講座 第5回 演算子

PHPに限らず、プログラムでは、「演算子」と呼ばれる数学的または論理的な演算を行うための記号を使用する事が多い。 この演算子を使えば、足し算、引き算などの四則演算を行ったり、値の代入を行うことが出来る。 また、PHPのプログラムでは、ある条件を満たすか否かの判定、つまりは真偽(true、false)の判定を行うことが多いが、このような判定では「比較演算子」、「論理演算子」が欠かせない。 既に「初心者による初心者のためのPHP講座 第3回 文字列」で「文字列演算子」について触れ、「初心者による初心者のためのPHP講座 第4回 定数と変数」で「代入演算子」と「算術演算子」についても触れており、実際に使用しているが、それら以外にも演算子には様々な種類がある。 とは言え、復習的な部分も少なくない。 演算子は、必ず知っておく必要があるが、演算子だけ取り上げて学習するよりも、プログラムの中で実際に使った方が感覚的にも分かりやすいかもしれない。 具体的な使い方は、実際にプログラミングしながら覚えれば良い。 しかし、演算を行うための演算子という記述があることは、少なくとも覚えておこう。 算術演算子 単純な計算を行うための記述にであり、「5+3」、「2×3」の「+」や「×」に相当するもので、プログラミングの知識が無くとも、馴染みがあり、理解しやすいはずである。 PHPでは、以下の5つの四則演算子が用意されている。 + 足し算 – 引き算 * 掛け算 / 割り算 % 割り算の余りを求める 下記は、算術演算子を使ったサンプルである。 <!doctype html> <?php echo ‘<?xml version=”1.0″ encoding=”utf-8″?>’; ?> <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”> <html xmlns=”http://www.w3.org/1999/xhtml” lang=”ja” xml:lang=”ja”> <head> <meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ /> <title>四則演算子</title> </head> <body> <?php $cal1 = 8 + 3; // 8と3の足し算。$cal1には整数11が代入される。 $cal2 = 8 – 3; // 8から3を引く。$cal2には整数5が代入される。 $cal3 = 8 * 3; // 8に3を掛ける。$cal3には整数24が代入される。 $cal4 = 8 / 3; // 8を3で割る。$cal4には浮動小数点2.66666666667が代入される。 $cal5 = 8 % 3; // 8割る3の余り。$cal3には整数2が代入される。 echo “8 + 3 = “.$cal1.”<br />”; echo “8 - 3 = “.$cal2.”<br />”; echo “8 × 3 = “.$cal3.”<br />”; echo “8 … 続きを読む →

Posted in PHP, PHP講座, ネット・PC | Tagged | Leave a comment

初心者による初心者のためのPHP講座 第4回 定数と変数

多くのプログラミング言語同様に、PHPでも、定数、変数を使うことが出来る。 定数、変数とは、「初心者による初心者のためのPHP講座 第3回 文字列」で学んだ文字列などの値を格納しておく箱のようなもので、命令文の中などで箱から値を取り出して使うことが出来る。 定数 定数とは変わることない不変の値、不変の値を格納する箱を指し、define()関数を使って以下のように定義する。 define(“定数名”, 値); 定数名には、アルファベット、数字、アンダースコアを使うことが出来るが、最初の1文字はアルファベットかアンダースコアである必要がある。 また、特別な引数を設定しない限り、アルファベットの大文字と小文字は区別され、別のものとして扱われる。 定義した定数に格納された値は、定数名で取り出すことが出来る。 難しいことを考えるよりも、実際にサンプルを見たほうが理解が早いだろう。 以下のサンプルでは、echo()関数と組み合わせて定数を使用している。 <!doctype html> <?php echo ‘<?xml version=”1.0″ encoding=”utf-8″?>’; ?> <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”> <html xmlns=”http://www.w3.org/1999/xhtml” lang=”ja” xml:lang=”ja”> <head> <meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ /> <title>定数</title> </head> <body> <?php define(“VALUE1″, 100); define(“VALUE2″, “100″); define(“VALUE3″, “こんにちは”); echo VALUE1.”<br />”; echo VALUE2.”<br />”; echo VALUE3.”<br />”; echo VALUE1.”円”.”<br />”; echo VALUE3.”。 この商品は”.VALUE1.”円です。”; ?> </body> </html> 上記のスクリプトの実行結果を表示 定数に文字列を格納する場合は、前回学んだ通り「”」や「’」で囲む必要がある。 数値を格納する場合は、「”」や「’」で囲む必要はないが、文字列として数字を扱う場合は、「”」や「’」で囲む必要がある。 例えば「”1″」と「1」は、それぞれ文字列と数値であり、プログラミング上では、本来は別物であり、区別されるべきものだが、PHPでも区別はあるものの、その区別が曖昧である。 この事は、変数の説明の際に再度述べる。 定数は、何度でも呼び出して使用することができ、一度、定数を定義してしまえば、後は定数として呼び出すだけで良いので、都度、値を記述するより遥かに楽であるし、ミスも起こりにくくなる。 実際、上記のサンプルでも定数「VALUE1」、「VALUE3」は、2度以上使われている。 文字列の連結同様に「.」を使って、定数や文字列と連結することも出来る。 定数は、不変の値を考えるよりも、一度定義したら変更が効かない値と考えたほうが分かりやすいかもしれない。 つまり、箱の中身を取り出すことは出来ても、入れ替えることは出来ない。 定義した後で値を変更する必要がなく、繰り返し使う可能性がある値は、定数として定義すると良いだろう。 変数 変数とは、変化する可能性がある値を格納する箱のようなものである。 定数が、一度定義したら値の変更が出来ないのに対して、変数は、何度でも値を変更することが許されている。 つまり、箱の中身を自由に入れ替えることが出来る。 変数の定義は、定数と異なり関数を使う必要がなく、非常にシンプルである。 $変数名; $変数名 = 値; 「$」が変数であることを表し、空の変数を定義するなら単に「$変数名」と宣言すれば良いし、何かしらの値を代入した変数を定義するなら「代入演算子」である「=」を使って値を代入した形で変数を定義すれば良い。 値の代入の有無は別として、この要領で変数を宣言をした時点で変数は初期化され、値が格納される。(値を代入していない場合は、空の値が格納される。) このあたりは、数学の代入と要領は同じである。 変数名には、アルファベット、数字、アンダースコアを使うことが出来るが、最初の1文字はアルファベットかアンダースコアである必要がある。 また、アルファベットの大文字と小文字は区別され、別のものとして扱われる。 「$$value」のように変数名に変数を使う使うことも出来るが、ここでは説明を省く。 では実際にサンプルを見てみよう。 <!doctype html> <?php echo ‘<?xml version=”1.0″ encoding=”utf-8″?>’; ?> <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”> <html xmlns=”http://www.w3.org/1999/xhtml” … 続きを読む →

Posted in PHP, PHP講座, ネット・PC | Tagged | 1 Comment

初心者による初心者のためのPHP講座 第3回 文字列

※「\」が「\」に見える場合は、別のPCからアクセスする事をお勧めする。この記事では、意図して「\」を使用しており、「\」と「\」の区別が出来たほうが分かりやすい。 「文字列」とは、文字を集まり、つまりは文字で書かれた単語や文の事を指し、単語、文の長さに関係なく、PHPで文字列を扱う際は、それが文字列である事を表す構文を使う必要がある。 「第2回 PHPの基本構造」でも、echo()関数の引数として文字列を用いている。 例えば「こんにちは」と表示させたい時は、echo()関数を用いて <?php echo “こんにちは”; ?> と命令文を書く必要がある。 「”こんにちは”」の部分が文字列であり、文字列を扱う場合は、文字列を「”」または「’」で囲む方法が良く用いられる。 このルールは、関数の引数として文字列を扱う場合だけでなく、変数に代入したり、条件式で用いる場合なども同様である。(変数と条件式は別の機会に説明する。) 引用符 「’」で文字列を囲む方法は、文字列の始まりと終わりを意味する「’」を文字列に直接書きこむ事が出来ない。 しかし、「’」の前に「\」または「\」を置き、「\’」または「\‘」とすることで、文字列内に「’」を書きこむことが出来る。 ※バックスラッシュ「\」は、多くの日本語フォントでは「\」と表示されるが、同じ意味であり、日本語キボード上でも「\」と表示されているが、入力は「\」で良い。 また、「\」または「\」も同様に直接記述することが出来ず、「\」または「\」を記述する場合は、「\\」または「\\」とする必要がある。 文字列に空白、改行が含まれる場合は、空白と改行は、そのまま文字列に反映される。 <!doctype html> <?php echo ‘<?xml version=”1.0″ encoding=”utf-8″?>’; ?> <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”> <html xmlns=”http://www.w3.org/1999/xhtml” lang=”ja” xml:lang=”ja”> <head> <meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ /> <title>引用符を使った文字列</title> </head> <body> <?php echo ‘\’こんにちは\’<br />’; echo ‘\\こんにちは\\’; ?> </body> </html> 上記のスクリプトの実行結果を表示 以上のような「\」または「\」を使った特殊な記述を「エスケープシーケンス」と言う。 エスケープシーケンスには、「\」または「\」を文字の前に置く以外に、特別なコードで置き換える方法もあり、構文やシステム都合のよる理由で、文字そのままでは不都合が生じる場合や文字で表現できない場合は、特別な文字や機能を特別なコードで置き換えたもの使用することがあり、これら全般をエスケープシーケンスと読んでいる。 ここで言うエスケープシーケンスは、狭義のものであるが、その他のエスケープシーケンスについては、別の機会に説明する。 また、特殊な文字や機能をエスケープシーケンスで置き換えることを「エスケープする」と言う。 なお、ここまでは、「\」と「\」の両方を表記してきたが、以後は「\」をもってエスケープシーケンスを意味し、エスケープされた文字を意味するものとする。 二重引用符 文字列は、「”」で囲む場合は、文字列内でも「’」の使用が許されるが「”」を使用する際は、「\”」とする必要がある。 また引用符「’」の場合と異なり、様々なエスケープシーケンスを文字列中に使用することが出来る。 \n ・・・ UNIX系の改行(LF)を意味する。 \r ・・・ 昔のMacなどの改行(CR)を意味するが、文字列中で改行させたい時は、通常は\nを使う。 \t ・・・ タブ(水平タブ)を意味でする。 \v ・・・ 垂直タブを意味する。PHP 5.2.5以降でサポート。 \f ・・・ フォームフィード(FF)。PHP 5.2.5以降でサポート。 \$ ・・・ ドル記号。 \\ ・・・ バックスラッシュ。 上記以外に(アスキー)文字の8進数表記を「\nnn」、16進数表記を「\xnn」と書くことも出来る。 ※nは、8進数の場合は、0から7の数字で、16進数の場合は、数字の0から9およびアルファベットのaからf。 「\n」での改行は、タグの「<br />」を意味しておらず、あくまでHTMLソース上の改行であるため、ブラウザ上で反映されるわけではない、効果を確認するためにはブラウザでソースを見ること。 例えば、PHPでHTMLタグを含む文字列を表示させる場合、「\n」を使って改行を入れるとソースも見やすくなる。 「\r\n」は「CRLF」、つまりWindowsなどの改行コードとなる。 インターネットプロトコルでは、意外にもUNIX系の「LF」でなく、DEC系の「CRLF」が使われてきた経緯もあり、改行コードとして「CRLF」が必要なケースもあり得るので、使う機会があるかもしれない。 ともかく、改行コードの扱いはシステムによって事なる場合があり、意外に曲者なので、記憶しておくとトラブルの際の助けになるかもしれない。 私の経験では、ダウンロードしたPHPのメールフォームで送信されたメールが、メーラーのよっては正常に表示されず、メールフォーム自体もインターネットの決まりごと(RFC)を順守したものだったが、決まりを順守しない方向に改行コードを変更したら、問題が解消した経験がある。 エスケープシーケンス以外の特徴として、文字列内に変数を直接記述し、変数を使用することが許される。(文字列内で変数が展開される。) 変数の直後に文字が続く場合は、変数の終わりが判断できなくなるため、「{$text}」のように「{}」で囲むと良い。 ちなみに、関数を「{}」で囲むことで、文字列内に関数の戻り値を展開することも出来るのだが、本来、仕様にない事かもしれないので、使わない方が良いかもしれない。 文字列に空白、改行が含まれる場合は、空白と改行は、そのまま文字列に反映される。 以下のサンプルでは「変数」を使用しているが、変数については別の機会に説明する。 <!doctype html> <?php echo ‘<?xml version=”1.0″ encoding=”utf-8″?>’; ?> <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”> <html xmlns=”http://www.w3.org/1999/xhtml” lang=”ja” xml:lang=”ja”> <head> <meta http-equiv=”Content-Type” … 続きを読む →

Posted in PHP, PHP講座, ネット・PC | Tagged | 2 Comments

初心者による初心者のためのPHP講座 第2回 PHPの基本構造

第2回では、PHPプログラムの基本構造について説明する。 プログラミング環境の準備 前回、テキストエディタの準備が必要であることを書いたが、「TeraPad」を例に話を進めてゆく。 インストールが完了したら、まず、文字コードと改行コードの設定しておくと良いだろう。 「TeraPad」の場合は、「表示」メニューから「オプション」を実行し、「文字コード」タブを開くと、ファイルを開いた際の文字コードである「初期文字コード)」保存する際の文字コードである「保存文字コード」の設定が出来るようになっているので、それぞれ設定しておく事。 テキストにマルチバイト文字を含まない限り、文字コードの「自動判別」は効かないので、意識しなくとも意図した文字コードで保存されるようにするためにも必要な設定である。 PHPは、Unix環境で動作させる事が多い事もあり、 文字コード:EUC(EUC-JP)、 改行コード:LF が使われることが多く、これは無難な設定である。 私の場合は、WordPress用のプラグインを作ることが多く、ウェブサイトもUTF-8で記述する事が多いので、 文字コード:UTF-8N(UTF-8、BOMなし)、改行コード:LF に設定しており、この講座は、この設定を前提に話を進めてゆく。 ファイルの拡張子 PHPで記述されたコードを含むファイルの拡張子は、原則として「php」とする必要がある。 ファイル名には、半角英数字を使用し、区切りが必要な場合は「.」や「-」、「_」を使用する。 そして「.php」で終わるようすること。 アップロードと実行 PHPで記述されてファイルは、HTMLで記述されたファイル同様に、ウェブサーバーにアップロードすれば良い。 拡張子は異なるものの、実行もHTMLの場合と全く同じ要領であり、「http://example.com/index.php」のようなURLをブラウザに入力してアクセスすれば良い。 基本構造 PHPは、下記のようにHTMLに簡単に組み込むことが出来る。 <!doctype html> <?php echo ‘<?xml version=”1.0″ encoding=”utf-8″?>’; ?> <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”> <html xmlns=”http://www.w3.org/1999/xhtml” lang=”ja” xml:lang=”ja”> <head> <meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ /> <title>PHPの基本構造</title> </head> <body> <p>PHPで日付を表示します。</p> <p>今日は、<?php echo date(“Y/m/d”); ?> です。</p> </body> </html> 上記のスクリプトの実行結果を表示 PHPによる記述は、 <?php PHPでの記述 ?> の部分であり、PHPのプログラムは、「<?php」で始まり「?>」で終わる必要がある この「<?php」と「?>」に囲まれた間に、PHPで命令文を記述してプログラムを作成する。 複数の命令文を書く事も可能で、「;」が命令文の区切りを表し、各命令文の最後には「;」を付ける必要がある。 例外として「?>」の直前の命令文は「;」を省略することが出来るが、命令文には「;」を付けることを習慣とした方が良い。 また、「<?php」と「?>」で囲まれたPHPプログラムは、1つのファイル内で複数回登場しても良い。 逆に「<?php」と「?>」に囲まれない範囲にあるHTMLによる記述は、そのままHTMLとして処理される。 つまり、HTMLとPHPを、簡単に混在させることが出来る。 サンプルプログラムでは、下記のコードで、現在の日付を動的に表示している。 <?php echo date(“Y/m/d”); ?> ここでは、echo()、date()と言う2つの関数を使用している。 「関数」とは、「与えられた値(引数)を元に処理を行い、結果(戻り値)を返す」という役割を担う命令文で、PHPプログラム内の処理の中心となる構造物である。 関数を電子レンジに例えるなら 引数・・・温める時間。 処理・・・物を温める。 戻り値・・・加熱の終了を知らせる音。 と言ったところだろうか。 シンプルな時計は、引数を必要としないが、時刻の計算処理を実行し、戻り値として現在の時刻を常に返すと言えるかもしれない。 実際、サンプルスクリプトでも使用しているdate()関数は、時計と似ている。 関数は、通常、下記のように記述する。 関数名(引数) サンプルプログラムを見るとechoには「()」が無く、これは関数のルールから外れているように思えるが、echo()の場合は「()」を省略出来る。 「()」が省略できるのは、echo()は厳密には関数ではなく、「言語構造」と呼ばれるものであるためだが、ともかく、echo()は、こう言うものと理解しておこう。 ただし、ここでは便宜上、関数として扱う。 echo()の「()」を省略せずに <?php echo(date(“Y/m/d”)); ?> と書くことも出来るが、通常は、このような書き方はしない。 date()関数は、現在の日付を計算する関数で、引数として日付のフォーマット(Y/m/d)を関数に渡し、戻り値として現在の年月日を返させている。 echo()関数は、引数をブラウザに表示する処理を行う。 この場合、echo()関数の引数は、date()関数の戻り値であり、結果としてブラウザには、現在の年月日が「/」区切りで表示される。 このサンプルプログラムでは、date()関数の引数に文字列(別の機会に詳しく)を使用しているが、文字列は「”」や「’」で囲むなどする必要がある。 関数には、引数、処理、戻り値の3つが必ずしもセットになっているとは限らない。 例えば、echo()関数は、引数を必要とし、引数をブラウザに表示する処理を行うが、戻り値は返さない。 echo()関数と同等の処理を行う関数として、print()関数があるが、こちらは戻り値を返す。 ちなみにprint()も厳密には関数ではなく、言語構造。 echo()関数やdate()関数は、PHPで予め定義された関数で、同様の関数は他にも沢山あり、「関数リファレンス」で見つけることが出来る。 ※関数リファレンスでは、「引数」は「パラメーター」、「戻り値」は「返り値」と表記されている。 このような定義済み関数の他に、自身で関数を定義して使用することも出来る。 サンプルプログラムでは、下記にもPHPを使用している。 <?php echo ‘<?xml … 続きを読む →

Posted in PHP, PHP講座, ネット・PC | Tagged | 1 Comment

初心者による初心者のための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 … 続きを読む →

Posted in PHP, PHP講座, ネット・PC | Tagged | Leave a comment