PHP (PHP: Hypertext Preprocessor) はオープンソースのスクリプト言語です。Web 開発に適しており、HTML に埋め込むことができます。
Microsoft WindowsでPHPをインストールする手順を示す。
MSVCR110.dllが存在しないエラーが発生した場合、Microsoft Visual C++ RedistributableをMicrosoftのサイトからダウンロードする。
XAMPPはApache、MySQL、PHP及びPerlのパッケージである。ここでは、XAMPP for Windowsをインストールする手順を示す。
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の実行オプションを指定する。
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はPHPのソースファイルからHTML形式のリファレンスを作成するツールである。Javaの javadoc に相当する。
phpdoc -d [input-path] -t [output-path] [-o template]
ドキュメントテンプレートを指定する。
テンプレート | 説明 |
---|---|
HTML:frames:default | JavaDocライクなフレームありのHTML |
HTML:Smarty:default | CSSを使ったフレームなしのHTML |
pear channel-discover pear.phpdoc.org
pear install -a phpdoc/phpDocumentor
キャストとは、データ型を明示的に変換する機能である。
キャスト | 説明 |
---|---|
(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'
PHPの変数名は$
を先頭に付ける。変数名の大文字と小文字は区別される。PHPでは変数の宣言はしない。
$var = 'foo';
可変変数とは、変数名を変数の値により動的に決めることができる変数である。変数名の先頭に$$
を付けることにより、変数名を別の変数の値で動的に決定する。
$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 'example.php';
指定したファイルが見つからなかった場合は Warning(警告)を発生させ、スクリプトの処理は継続する。
インクルードするファイルが既に読み込まれている場合であっても、ファイルを再度インクルードする。
PHP において外部ファイルをインクルードするには、4種類の方法がある。
制御構造 | ファイルが見つからなかった場合 | 既に読み込まれている場合 |
---|---|---|
include | E_WARNING | 再度読み込む |
include_once | E_WARNING | 再度読み込まない |
require | E_ERROR | 再度読み込む |
require_once | E_ERROR | 再度読み込まない |
ファイルをインクルードする。
include_once 'example.php';
指定したファイルが見つからなかった場合は Warning(警告)を発生させ、スクリプトの処理は継続する。
インクルードするファイルが既に読み込まれている場合は、ファイルを読み込まない。
ファイルをインクルードする。
require 'example.php';
指定したファイルが見つからなかった場合は Fatal Error(致命的なエラー)を発生させ、その場でスクリプトの処理を中断する。
インクルードするファイルが既に読み込まれている場合であっても、ファイルを再度インクルードする。
ファイルをインクルードする。
require_once 'example.php';
指定したファイルが見つからなかった場合は Fatal Error(致命的なエラー)を発生させ、その場でスクリプトの処理を中断する。
インクルードするファイルが既に読み込まれている場合は、ファイルを読み込まない。
function name([&]arg[=value] [,[&]arg[=value]]...)
{
// 処理
}
スーパーグローバル変数とは、リクエスト情報を取得・操作するための変数であり、PHPが自動的にリクエスト情報などを解析し、必要な情報を設定する。
変数名 | 説明 |
---|---|
$_COOKIE | クッキー経由で渡された情報 |
$_ENV | サーバ側で定義された情報 |
$_FILES | アップロードされたファイルに関する情報 |
$_GET |
クエリ情報経由で渡された情報 |
$_POST |
POST形式のHTMLフォームから渡された情報 |
$_REQUEST | $_GET、$_POST及び$_COOKIEの値をまとめたもの |
$_SERVER |
リクエストヘッダ、又はサーバ固有の変数情報 |
クッキー経由で渡された情報
サーバ側で定義された情報
$_FILES
は、アップロードされたファイルに関する情報を取得するためのスーパーグローバル変数である。
$_FILES['name']['info']
<input type="file">
タグのname
属性の値値 | 説明 |
---|---|
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"
を指定する必要がある。
$_GET、$_POST及び$_COOKIEの値をまとめたもの
メンバ変数を参照するには、以下の形式で行う。
object->member
静的メンバ変数を参照するには、以下の形式で行う。
ClassName::staticMember
メソッドから自クラスのメンバ変数を参照するには、以下の形式で行う。
$this->member
静的メソッドから自クラスの静的メンバ変数を参照するには、以下の形式で行う。
self::staticMember
メソッドを呼び出すには、以下の形式で行う。
object->method()
静的メソッドを呼び出すには、以下の形式で行う。
ClassName::staticMethod()
抽象クラスとは、抽象メソッドを含んだクラスである。抽象クラスはインスタンス化することができない。抽象クラスを継承したサブクラスはインスタンス化できる。ただし、すべての抽象メソッドをオーバライドする必要がある。
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サーバはクライアント上のファイル読み書きすることはできないが、クッキーは例外である。
クッキーを送信する。
bool setcookie(
string $name
[,string $value
[,int $expire = 0
[,string $path
[,string $domain
[,bool $secure = false
[,bool $httponly = false]]]]]]
)
変数が空であるかどうかを検査する。
bool empty(mixed $var)
$varが空であればTRUE、空でなければFALSEを返す。次のような値は空であるとみなされる。
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('ログインに失敗しました。');
現在のインクルードパスを取得する。
string get_include_path(void)
インクルードパスを設定する。
string set_include_path(string $new_include_path)
インクルードパスの設定に成功したらTRUE、失敗したらFALSEを戻り値として返す。
bool isset(mixed $var1 [,mixed $var2...])
指定した変数がすべて存在し、それらの値がすべてNULL以外の場合、TRUEを返す。指定した変数のうち、ひとつでも変数が存在しなかったり、値がNULLだった場合、FALSEを返す。
void unset(mixed $var1 [,mixed $var2...])
指定した変数を破棄する。
HTTPヘッダを送信する。header
関数は、HTML出力の前に呼び出す必要がある。
void header(string $string [,bool $replace = true [,int $http_response_code]])
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関数は、外部プログラムを実行して、出力を表示する。
string system(string command[, int return_var])
exec関数は、外部プログラムを実行する。
exec(string command[, array &output[, int return_var]])
日付の妥当性をチェックする。日付が有効な場合はtrue、無効な場合はfalseを返す。
bool checkdate(int $month, int $day, int $year)
strtotimeは英文形式の日付をUnixタイムスタンプ(UTC 1970年1月1日0時0分0秒からの経過秒数)に変換する関数である。
int strtotime(string $time [, $now = time()])
$time
$now
$time
に相対値("+1 day"
や"-1 week"
)を指定した場合、基準となる日時のタイムスタンプを指定する。$time
を省略した場合、現在日時を基準とする。resource fopen(string $filename, string $mode [,bool $use_include_path = false [,resource $context]])
unlinkはファイルを削除する関数である。
bool unlink(string $filename[, resource $context])
成功した場合、TRUEを返す。
file_existsは、ファイルまたはディレクトリが存在すかどうかを調べる関数である。
bool file_exists(string $filename)
ファイル又はディレクトリが存在すればTRUEを返す。
php.iniは、PHPに関する全体的な動作や環境を設定するファイルである。php.iniファイルの場所はphpinfo()
関数で調べることができる。
ini_get
設定オプションの値を取得
string ini_get(string $varname)
戻り値:成功した場合は、設定オプションの値。null値の場合は、空の文字列。設定オプションが存在しない場合はFALSE
を返す。
parse_ini_fileは指定したiniファイルを読み出して、連想配列としてその設定値を返す。iniファイルの構造はphp.iniの構造と同じである。
array parse_ini_file(
string $filename
[,bool $process_sections = false
[,int $scanner_mode = INI_SCANNER_NORMAL]]
)
$filename
$process_sections
成功した場合、設定を連想配列で返す。失敗した場合、FALSEを返す。
iniファイルは次のような構造を持つファイルである。
[section_name]
name = value
;comment
"
)で括るnull
、yes
、no
、true
及びfalse
は使用できない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は、文字列を固定長の文字列で埋める関数である。
string str_pad(
string $input
,int $pad_length
[,string $pad_string = " "
[,int $pad_type = STR_PAD_RIGHT]]
)
$input
ob_end_flushは、出力用バッファをフラッシュ(送信)して、出力のバッファリングをオフにする関数である。
bool ob_end_flush(void)
ob_flushは、出力バッファをフラッシュ(送信)する関数である。
void ob_flush(void)
ob_startは、出力のバッファリングを有効にする関数である。
bool ob_start(
[callable $output_call
[,int $chunk_size = 0
[,bool $erase = true]]]
)
mb_output_handlerは、ob_start関数のコールバック関数である。出力バッファの文字を内部文字エンコーディングからHTTP出力文字エンコーディングに変換する。
string mb_output_handler(string $contents, int $status)
システムログのメッセージを生成する。
bool syslog(int $priority, string $message)
定数 | 説明 |
---|---|
LOG_EMERG | システムは使用不可 |
LOG_ALART | アクションを直ちに起こす必要がある |
LOG_CRIT | 致命的 |
LOG_ERR | エラー |
LOG_WARNING | 警告 |
LOG_NOTICE | 注意 |
LOG_INFO | 情報 |
LOG_DEBUG | デバッグ用 |
%m
はerrnoの値に対応するエラーメッセージ文字列に置き換えられる。date関数は、タイムスタンプを指定した書式でフォーマットした文字列を返す。
string date(string $format, int $timestamp = time())
文字 | 説明 |
---|---|
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を付ける) |
'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はPHPからMicrosoft Excel文書の読み書きを行うライブラリである。
PHPExcelのインストール手順
PHPExcelの使用方法
PHPExcelを使用するPHPファイルでパスを通す。「htdocs/Classes/
」にPHPExcelを配置した場合の例を示す。
set_include_path(get_include_path(), PATH_SEPARATOR . $_SERVER['DOCUMENT_ROOT'] . '/Classes/');
ライブラリを読み込む。
include_once 'PHPExcel.php';