PHP

PHP (PHP: Hypertext Preprocessor) はオープンソースのスクリプト言語です。Web 開発に適しており、HTML に埋め込むことができます。

PHPのインストール

Windows版PHPのインストール

Microsoft WindowsでPHPをインストールする手順を示す。

  1. PHPのダウンロードサイトを開く。
    http://www.php.net/downloads.php
  2. 「Windows (バージョン) binaries and source」のリンクをクリックする。
  3. 32ビット版/64ビット版、マルチスレッド対応版/マルチスレッド非対応版があるので、任意のインストーラを選択する。
  4. zipファイルのダウンロードが始まる。
  5. ダウンロードしたzipファイルを解凍する。
  6. 環境変数PATHにzipファイルを解凍したフォルダを追加する。

MSVCR110.dllが存在しないエラーが発生した場合、Microsoft Visual C++ RedistributableをMicrosoftのサイトからダウンロードする。

XAMPP for Windowsのインストール

XAMPPはApache、MySQL、PHP及びPerlのパッケージである。ここでは、XAMPP for Windowsをインストールする手順を示す。

  1. XAMPPのサイトを開く。
    https://www.apachefriends.org/jp/
  2. 「XAMPP for Windows」のリンクをクリックする。
  3. インストーラ形式(exe形式)やzip形式などがあるので、任意のファイルをダウンロードする。

PHPコマンド

php [option...] [-f] file [--] [arg...]
php [option...] -r code [--] [arg...]
php [option...] [-B begin_code] -R code [-E end_code] [--] [arg...]
php [option...] [-B begin_code] -F file [-E end_code] [--] [arg...]
php [option...] -S addr:port [-t docroot]
php [option...] -- [arg...]
php [option...] -a

optionにはPHPの実行オプションを指定する。

-a
対話的に実行する。
-c path|file
php.iniファイルの場所を指定する。
-n
php.iniファイルを使用しない。
-d foo[=bar]
INIエントリfooの値にbarを設定する。
-e
デバッガ及びプロファイラのために拡張情報を生成する。
-f file
fileで指定したファイルをパース及び実行する。
-h
ヘルプを表示する。
-i
PHPの情報を表示する。
-l
文法チェックのみ行う。
-m
モジュール内のコンパイルを表示する。
-v
バージョン番号を表示する。

PEAR

PEAR (PHP Extension and Application Repository)は、PHPで利用するライブラリ(パッケージ)を提供するサービスである。pearコマンドでPEARのライブラリをインストール、アンインストール、アップグレード及び作成することができる。

インストール済みパッケージ一覧の表示

pear list

パッケージのインストール

pear install [options] [channel/]package...
-a
--alldeps
必要な依存パッケージもインストールする。

パッケージのアンインストール

pear uninstall [options] [channel/]package...

チャンネルの登録

pear channel-discover [channel.xml|channel]

PHPDoc

PHPDocはPHPのソースファイルからHTML形式のリファレンスを作成するツールである。Javaの javadoc に相当する。

phpdoc -d [input-path] -t [output-path] [-o template]
input-path
PHPソースファイルのパスを指定する。
output-path
HTMLを出力するパスを指定する。
-o template

ドキュメントテンプレートを指定する。

テンプレート説明
HTML:frames:defaultJavaDocライクなフレームありのHTML
HTML:Smarty:defaultCSSを使ったフレームなしのHTML

PhpDocumentorのインストール

  1. チャンネルを登録する
    pear channel-discover pear.phpdoc.org
  2. PhpDocumentorをインストールする。
    pear install -a phpdoc/phpDocumentor
  3. Graphvizをインストールする。Graphviz (Graph Visualization Software)とは、DOT言語で記述されたスクリプトからグラフを描画した画像を生成するツールである。
  4. GraphvizのWebサイトをWebブラウザで開く。
    http://www.graphviz.org/
  5. ダウンロードページからインストーラをダウンロードする。
  6. 実行形式のインストーラを実行する。又は圧縮形式のインストーラを解凍する。

キャスト

キャストとは、データ型を明示的に変換する機能である。

PHPのキャスト
キャスト説明
(int) 整数に変換
(integer)
(bool) ブール値に変換
(boolean)
(float) 実数に変換
(double)
(real)
(string) 文字列に変換
(array) 配列に変換
(object) オブジェクトに変換
(unset) NULLに変換

文字列リテラル

PHPで文字列リテラルを表すには、文字列全体をシングルクォート(')又はダブルクォート(")で括る。

$msg1 = "he's John.";
$msg2 = 'He is "John".';

文字列リテラルでシングルクォートとダブルクォートを両方使いたい場合は、エスケープ文字(\)でエスケープする。

$msg1 = "he's \"John\".";
$msg1 = 'he\'s "John".';

シングルクォート文字列とダブルクォート文字列の違い

PHPのダブルクォート文字列リテラルでは、文字列に含まれる変数を解釈し、その値で変数の箇所を置き換える。シングルクォート文字列リテラルでは変数を置き換えない。

$var = 'foo';
$str1 = "$var";
$str2 = '$var';
print $str1; // print 'foo'
print $str2; // print '$var'

$var

PHPの変数名は$を先頭に付ける。変数名の大文字と小文字は区別される。PHPでは変数の宣言はしない。

$var = 'foo';

$$var

可変変数とは、変数名を変数の値により動的に決めることができる変数である。変数名の先頭に$$を付けることにより、変数名を別の変数の値で動的に決定する。

$varname = "variable";
$variable = "value";
print $$varname; // print "value"

単一行コメント

PHPは「//」又は「#」から行末までをコメント(注釈)と見做す。

$varname = "variable"; # variable name
$variable = "value";
print $$varname; // print "value"

複数行コメント

PHPは「/*」から「*/」までをコメントと見做す。間に改行が含まれても構わないが、コメントの入れ子(ネスト)はできない。

$varname = "variable";
$variable = "value";
/*
  print "value"
*/
print $$varname;

include

ファイルをインクルードする。

include 'example.php';

指定したファイルが見つからなかった場合は Warning(警告)を発生させ、スクリプトの処理は継続する。

インクルードするファイルが既に読み込まれている場合であっても、ファイルを再度インクルードする。

PHP において外部ファイルをインクルードするには、4種類の方法がある。

インクルードの違い
制御構造 ファイルが見つからなかった場合 既に読み込まれている場合
include E_WARNING 再度読み込む
include_once E_WARNING 再度読み込まない
require E_ERROR 再度読み込む
require_once E_ERROR 再度読み込まない

include_once

ファイルをインクルードする。

include_once 'example.php';

指定したファイルが見つからなかった場合は Warning(警告)を発生させ、スクリプトの処理は継続する。

インクルードするファイルが既に読み込まれている場合は、ファイルを読み込まない。

require

ファイルをインクルードする。

require 'example.php';

指定したファイルが見つからなかった場合は Fatal Error(致命的なエラー)を発生させ、その場でスクリプトの処理を中断する。

インクルードするファイルが既に読み込まれている場合であっても、ファイルを再度インクルードする。

require_once

ファイルをインクルードする。

require_once 'example.php';

指定したファイルが見つからなかった場合は Fatal Error(致命的なエラー)を発生させ、その場でスクリプトの処理を中断する。

インクルードするファイルが既に読み込まれている場合は、ファイルを読み込まない。

function

function name([&]arg[=value] [,[&]arg[=value]]...)
{
  // 処理
}

スーパーグローバル変数

スーパーグローバル変数とは、リクエスト情報を取得・操作するための変数であり、PHPが自動的にリクエスト情報などを解析し、必要な情報を設定する。

変数名 説明
$_COOKIE クッキー経由で渡された情報
$_ENV サーバ側で定義された情報
$_FILES アップロードされたファイルに関する情報
$_GET クエリ情報経由で渡された情報
$_POST POST形式のHTMLフォームから渡された情報
$_REQUEST $_GET、$_POST及び$_COOKIEの値をまとめたもの
$_SERVER リクエストヘッダ、又はサーバ固有の変数情報

クッキー経由で渡された情報

$_ENV

サーバ側で定義された情報

$_FILES

$_FILESは、アップロードされたファイルに関する情報を取得するためのスーパーグローバル変数である。

$_FILES['name']['info']
name
<input type="file">タグのname属性の値
info
以下の情報のうちいずれかを指定する。
説明
nameオリジナルのファイル名
typeアップロードファイルのコンテンツタイプ
sizeアップロードされたファイルのサイズ(バイト単位)
type_nameサーバ上に仮保存された時の一時ファイル名
errorアップロードされたエラーのコード

エラーコード一覧を次に示す。

定数説明
0UPLOAD_ERR_OKアップロード成功
1UPLOAD_ERR_INI_SIZEupload_max_filesizeパラメータの指定サイズを超過
2UPLOAD_ERR_FORM_SIZEHTMLフォームで指定されたサイズを超過
3UPLOAD_ERR_PARTIALファイルが途中で途切れている
4UPLOAD_ERR_NO_FILEファイルが存在しない
5UPLOAD_ERR_NO_TMP_DIR一時保存のためのディレクトリが存在しない
6UPLOAD_ERR_CANT_WARITEディスクへの書き込みに失敗した
7UPLOAD_ERR_EXTENSION拡張モジュールによってアップロードが中断された

入力フォームの注意点として、form 要素にenctype="multipart/form-data"を指定する必要がある。

$_REQUEST

$_GET、$_POST及び$_COOKIEの値をまとめたもの

メンバ変数の参照

メンバ変数を参照するには、以下の形式で行う。

object->member

静的メンバ変数を参照するには、以下の形式で行う。

ClassName::staticMember

メソッドから自クラスのメンバ変数を参照するには、以下の形式で行う。

$this->member

静的メソッドから自クラスの静的メンバ変数を参照するには、以下の形式で行う。

self::staticMember

メソッドの呼び出し

メソッドを呼び出すには、以下の形式で行う。

object->method()

静的メソッドを呼び出すには、以下の形式で行う。

ClassName::staticMethod()

abstract

抽象クラスとは、抽象メソッドを含んだクラスである。抽象クラスはインスタンス化することができない。抽象クラスを継承したサブクラスはインスタンス化できる。ただし、すべての抽象メソッドをオーバライドする必要がある。

abstract class abstract-class-name
{
  // 抽象メソッドの定義
}
class class-name extends abstract-class-name
{
  // 抽象メソッドのオーバライド
}

interface

interface interface-name
{
  // 定数の定義
  // 抽象メソッドの定義
}

インタフェースの実装

class class-name implements interface-name
{
  // 抽象メソッドのオーバライド
}

インタフェースは継承もできる。

interface sub-interface extends super-interface
{
  // 定数の定義
  // 抽象メソッドの定義
}

setcookie()

クッキー(Cookie)とは、クライアント側に保存できる小さなテキストのことである。Webサーバはクライアント上のファイル読み書きすることはできないが、クッキーは例外である。

クッキーを送信する。

bool setcookie(
  string $name
[,string $value
[,int    $expire   = 0
[,string $path
[,string $domain
[,bool   $secure   = false
[,bool   $httponly = false]]]]]]
)
$name
クッキーの名前
$value
クッキーの値
$expire
クッキーの有効期限(Unixのタイムスタンプ)
$path
クッキーを有効にするパス
$domain
クッキーが有効なドメイン
$secure
SSL環境のみクッキーを送信
$httponly
HTTP経由でのみアクセスできるクッキー

empty()

変数が空であるかどうかを検査する。

bool empty(mixed $var)
$var
検査する変数を指定する。

$varが空であればTRUE、空でなければFALSEを返す。次のような値は空であるとみなされる。

die(), exit()

die及びexitは、PHPスクリプトを強制終了する関数である。

void die([$status])
void exit([$status])

$statusに文字列を指定した場合、終了する前に指定されたメッセージを出力する。$statusに数値を指定した場合、PHPスクリプトの終了コードになる。

die又はexitで日本語のメッセージを出力する場合、文字化けしないようにHTTP応答ヘッダでContent-Typeを指定する。

header('Content-Type: text/plain; charset=UTF-8');

die('ログインに失敗しました。');

get_include_path

現在のインクルードパスを取得する。

string get_include_path(void)

set_include_path

インクルードパスを設定する。

string set_include_path(string $new_include_path)
$new_include_path
新しいインクルードパス

インクルードパスの設定に成功したらTRUE、失敗したらFALSEを戻り値として返す。

isset()

bool isset(mixed $var1 [,mixed $var2...])

指定した変数がすべて存在し、それらの値がすべてNULL以外の場合、TRUEを返す。指定した変数のうち、ひとつでも変数が存在しなかったり、値がNULLだった場合、FALSEを返す。

unset()

void unset(mixed $var1 [,mixed $var2...])

指定した変数を破棄する。

HTTPヘッダを送信する。header関数は、HTML出力の前に呼び出す必要がある。

void header(string $string [,bool $replace = true [,int $http_response_code]])
$string
ヘッダ文字列
$replace
同名のヘッダが出力済みの場合に置き換えるか
$http_response_code
HTTP応答ステータス

PHPによるベーシック認証

if (!isset($_SERVER['PHP_AUTH_USER'])) {
    header('WWW-Authenticate: Basic realm=\"Restricted page\"');
    // キャンセル時
    header('HTTP/1.0 401 Unauthorized');
    echo 'Authorization Required';
    exit;
} else {
    // ユーザ名とパスワードのチェック
    if ($_SERVER['PHP_AUTH_USER'] != $user || $_SERVER['PHP_AUTH_PW'] != $password)
    {
        header('WWW-Authenticate: Basic realm=\"Restricted page\"');
        // キャンセル時
        header('HTTP/1.0 401 Unauthorized');
        echo 'Authorization Required';
        exit;
    }
}

ファイルのダウンロード

ファイルをダウンロードするには、HTTPヘッダに「Content-Type: application/octet-stream」を指定し、読み出したファイルを返す。

header('Content-Type: application/octet-stream');
readfile('foo.zip');

system()

system関数は、外部プログラムを実行して、出力を表示する。

string system(string command[, int return_var])

exec()

exec関数は、外部プログラムを実行する。

exec(string command[, array &output[, int return_var]])

checkdate()

日付の妥当性をチェックする。日付が有効な場合はtrue、無効な場合はfalseを返す。

bool checkdate(int $month, int $day, int $year)

strtotime()

strtotimeは英文形式の日付をUnixタイムスタンプ(UTC 1970年1月1日0時0分0秒からの経過秒数)に変換する関数である。

int strtotime(string $time [, $now = time()])
$time
日付/時刻
$now
$timeに相対値("+1 day""-1 week")を指定した場合、基準となる日時のタイムスタンプを指定する。$timeを省略した場合、現在日時を基準とする。

fopen()

resource fopen(string $filename, string $mode [,bool $use_include_path = false [,resource $context]])

unlinkはファイルを削除する関数である。

bool unlink(string $filename[, resource $context])

成功した場合、TRUEを返す。

file_exists()

file_existsは、ファイルまたはディレクトリが存在すかどうかを調べる関数である。

bool file_exists(string $filename)

ファイル又はディレクトリが存在すればTRUEを返す。

php.ini

php.iniは、PHPに関する全体的な動作や環境を設定するファイルである。php.iniファイルの場所はphpinfo()関数で調べることができる。

ini_get()

ini_get 設定オプションの値を取得

string ini_get(string $varname)

戻り値:成功した場合は、設定オプションの値。null値の場合は、空の文字列。設定オプションが存在しない場合はFALSEを返す。

parse_ini_file()

parse_ini_fileは指定したiniファイルを読み出して、連想配列としてその設定値を返す。iniファイルの構造はphp.iniの構造と同じである。

array parse_ini_file(
    string $filename
  [,bool   $process_sections = false
  [,int    $scanner_mode = INI_SCANNER_NORMAL]]
)
$filename
パースするiniファイルのパス
$process_sections
TRUEを指定すると、セクション名と設定が含まれた多次元の配列を返す。FALSEを指定すると、セクション名は無視する。

成功した場合、設定を連想配列で返す。失敗した場合、FALSEを返す。

iniファイルは次のような構造を持つファイルである。

[section_name]
name = value
;comment

iniファイルの例を示す。

;ユーザ認証
[user_auth]
user_id = horiuchi
password = marina

上記のiniファイルのパスをC:\tmp\sample.iniとすると、このiniファイルを読み出すPHPのソースプログラムは次のようになる。

$config = parse_ini_file("C:\\tmp\\sample.ini", false);
echo $config["user_id"];
echo $config["password"];

INI形式のファイルの書き込み

$ini = parse_ini_file('config.ini');
if ($_POST('foo'))
{
  $ini['foo'] = $_POST['foo'];
}
$fp = fopen('config.ini', 'w');
foreach ($ini as $key => $value)
{
  fputs($fp, "$key=$value\n");
}
fclose($fp);

str_pad()

str_padは、文字列を固定長の文字列で埋める関数である。

string str_pad(
  string $input
 ,int    $pad_length
[,string $pad_string = " "
[,int    $pad_type   = STR_PAD_RIGHT]]
)
$input
入力文字列

ob_end_flush()

ob_end_flushは、出力用バッファをフラッシュ(送信)して、出力のバッファリングをオフにする関数である。

bool ob_end_flush(void)

ob_flush()

ob_flushは、出力バッファをフラッシュ(送信)する関数である。

void ob_flush(void)

ob_start()

ob_startは、出力のバッファリングを有効にする関数である。

bool ob_start(
    [callable $output_call
   [,int      $chunk_size = 0
   [,bool     $erase      = true]]]
)

mb_output_handler

mb_output_handlerは、ob_start関数のコールバック関数である。出力バッファの文字を内部文字エンコーディングからHTTP出力文字エンコーディングに変換する。

string mb_output_handler(string $contents, int $status)

syslog()

システムログのメッセージを生成する。

bool syslog(int $priority, string $message)
$priority
facilityとlevelの組み合わせ
定数説明
LOG_EMERGシステムは使用不可
LOG_ALARTアクションを直ちに起こす必要がある
LOG_CRIT致命的
LOG_ERRエラー
LOG_WARNING警告
LOG_NOTICE注意
LOG_INFO情報
LOG_DEBUGデバッグ用
$message
送信するメッセージ。%mはerrnoの値に対応するエラーメッセージ文字列に置き換えられる。

date()

date関数は、タイムスタンプを指定した書式でフォーマットした文字列を返す。

string date(string $format, int $timestamp = time())
$format
書式
文字説明
Y 年(4桁)
y 年(下2桁)
m 月(1桁の場合は先頭に0を付ける)
n 月(1桁の場合でも先頭に0を付けない)
d 日(1桁の場合は先頭に0を付ける)
j 日(1桁の場合でも先頭に0を付けない)
l 曜日(Sunday, Monday, ..., Saturday)
D 曜日(Sun, Mon, ..., Sat)
w 数値(0~6)で表した曜日
H 24時間制の時(1桁の場合は先頭に0を付ける)
G 24時間制の時(1桁の場合でも先頭に0を付けない)
h 12時間制の時(1桁の場合は先頭に0を付ける)
g 12時間制の時(1桁の場合でも先頭に0を付けない)
A 午前(AM)又は午後(PM)
a 午前(am)又は午後(pm)
i 分(1桁の場合は先頭に0を付ける)
s 秒(1桁の場合は先頭に0を付ける)
$timestamp
タイムスタンプ。省略した場合は、現在の時刻が使われる。

'2014-02-08 19:22:00'という文字列の書式を返還して、2014年2月8日と表示するサンプルを示す。

$timestamp = strtotime('2014-02-08 19:22:00');
echo date('Y年n月j日', $timestamp);

MySQLに格納したDATETIME型日付をPHPで取得、表示すると、2014-02-08 19:22:00のように表示される。これを2014年2月8日に変換する場合も同様である。

PHPExcel

PHPExcelはPHPからMicrosoft Excel文書の読み書きを行うライブラリである。

PHPExcelのインストール手順

  1. PHPExcelのWebサイトをWebブラウザで開く。
    https://phpexcel.codeplex.com/
  2. ダウンロードページからzipファイルをダウンロードする。
  3. zipファイルを任意のディレクトリに展開する。

PHPExcelの使用方法

PHPExcelを使用するPHPファイルでパスを通す。「htdocs/Classes/」にPHPExcelを配置した場合の例を示す。

set_include_path(get_include_path(), PATH_SEPARATOR . $_SERVER['DOCUMENT_ROOT'] . '/Classes/');

ライブラリを読み込む。

include_once 'PHPExcel.php';