PHP
PHP (PHP: Hypertext Preprocessor) はオープンソースのスクリプト言語です。Web 開発に適しており、HTML に埋め込むことができます。
PHPのインストール
Windows版PHPのインストール
Microsoft WindowsでPHPをインストールする手順を示す。
- PHPのダウンロードサイトを開く。
http://www.php.net/downloads.php - 「Windows (バージョン) binaries and source」のリンクをクリックする。
- 32ビット版/64ビット版、マルチスレッド対応版/マルチスレッド非対応版があるので、任意のインストーラを選択する。
- zipファイルのダウンロードが始まる。
- ダウンロードしたzipファイルを解凍する。
- 環境変数PATHにzipファイルを解凍したフォルダを追加する。
MSVCR110.dllが存在しないエラーが発生した場合、Microsoft Visual C++ RedistributableをMicrosoftのサイトからダウンロードする。
XAMPP for Windowsのインストール
XAMPPはApache、MySQL、PHP及びPerlのパッケージである。ここでは、XAMPP for Windowsをインストールする手順を示す。
- XAMPPのサイトを開く。
https://www.apachefriends.org/jp/ - 「XAMPP for Windows」のリンクをクリックする。
- インストーラ形式(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:default JavaDocライクなフレームありのHTML HTML:Smarty:default CSSを使ったフレームなしのHTML
PhpDocumentorのインストール
- チャンネルを登録する
pear channel-discover pear.phpdoc.org
- PhpDocumentorをインストールする。
pear install -a phpdoc/phpDocumentor
- Graphvizをインストールする。Graphviz (Graph Visualization Software)とは、DOT言語で記述されたスクリプトからグラフを描画した画像を生成するツールである。
- GraphvizのWebサイトをWebブラウザで開く。
http://www.graphviz.org/ - ダウンロードページからインストーラをダウンロードする。
- 実行形式のインストーラを実行する。又は圧縮形式のインストーラを解凍する。
キャスト
キャストとは、データ型を明示的に変換する機能である。
キャスト | 説明 |
---|---|
(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 |
リクエストヘッダ、又はサーバ固有の変数情報 |
$_COOKIE
クッキー経由で渡された情報
$_ENV
サーバ側で定義された情報
$_FILES
$_FILES
は、アップロードされたファイルに関する情報を取得するためのスーパーグローバル変数である。
$_FILES['name']['info']
- name
<input type="file">
タグのname
属性の値- info
- 以下の情報のうちいずれかを指定する。
値 説明 name
オリジナルのファイル名 type
アップロードファイルのコンテンツタイプ size
アップロードされたファイルのサイズ(バイト単位) type_name
サーバ上に仮保存された時の一時ファイル名 error
アップロードされたエラーのコード
エラーコード一覧を次に示す。
値 | 定数 | 説明 |
---|---|---|
0 | UPLOAD_ERR_OK | アップロード成功 |
1 | UPLOAD_ERR_INI_SIZE | upload_max_filesizeパラメータの指定サイズを超過 |
2 | UPLOAD_ERR_FORM_SIZE | HTMLフォームで指定されたサイズを超過 |
3 | UPLOAD_ERR_PARTIAL | ファイルが途中で途切れている |
4 | UPLOAD_ERR_NO_FILE | ファイルが存在しない |
5 | UPLOAD_ERR_NO_TMP_DIR | 一時保存のためのディレクトリが存在しない |
6 | UPLOAD_ERR_CANT_WARITE | ディスクへの書き込みに失敗した |
7 | UPLOAD_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を返す。次のような値は空であるとみなされる。
- 値が設定されていない変数
- "" (空文字)
- 0 (整数)
- 0.0 (浮動小数点数)
- "0" (文字列)
- NULL
- FALSE
- array() (空の配列)
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...])
指定した変数を破棄する。
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;
}
}
ファイルのダウンロード
ファイルをダウンロードするには、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()
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
- 値に英数字以外を含める場合はダブルクォーテーション(
"
)で括る - キーとして
null
、yes
、no
、true
及びfalse
は使用できない - iniファイルはUTF-8で記述する
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のインストール手順
- PHPExcelのWebサイトをWebブラウザで開く。
https://phpexcel.codeplex.com/ - ダウンロードページからzipファイルをダウンロードする。
- zipファイルを任意のディレクトリに展開する。
PHPExcelの使用方法
PHPExcelを使用するPHPファイルでパスを通す。「htdocs/Classes/
」にPHPExcelを配置した場合の例を示す。
set_include_path(get_include_path(), PATH_SEPARATOR . $_SERVER['DOCUMENT_ROOT'] . '/Classes/');
ライブラリを読み込む。
include_once 'PHPExcel.php';