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のサイトを開く。
    http://www.apachefriends.org/jp/xampp.html
  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
バージョン番号を表示する。

変数

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

PHPの文字列リテラル

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'

キャスト

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

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

PHPのコメント

単一行コメント

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

複数行コメント

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

スーパーグローバル変数

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

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

$_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"を指定する必要がある。

可変変数

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

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

関数

ユーザ定義関数

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

メンバ変数の参照

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

object->member

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

ClassName::staticMember

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

$this->member

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

self::staticMember

メソッドの呼び出し

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

object->method()

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

ClassName::staticMethod()

php.ini

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

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

string ini_get(string $varname)

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

抽象クラス

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

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

インタフェース

インタフェースの定義

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

インタフェースの実装

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

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

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

クッキー

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

setcookie

クッキーを送信する。

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('ログインに失敗しました。');

isset

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

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

unset

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

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

header

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;
    }
}

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

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

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

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

file_exists

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

bool file_exists(string $filename)

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

parse_ini_file iniファイルの読み出し

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);

ファイルのダウンロード

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

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

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日に変換する場合も同様である。

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 -d [input-path] -t [output-path] [-o template]

-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. 実行形式のインストーラを実行する。又は圧縮形式のインストーラを解凍する。

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';

スポンサーリンク