PHPでデータを取得する6つの方法
1.「スーパーグローバル変数」から受け取る
2.「ファイル」から受け取る
3.「データベース」から受け取る
4.インターネット上の「外部URL」から受け取る
5.「メモリ」から受け取る
6.「標準関数」から受け取る
「スーパーグローバル変数」から受け取る
PHPの主なスーパーグローバル変数
$_GET
$_POST
$_SERVER
$_COOKIE
$_FILES
$_SESSION
$_GET
$_POST
php.sample
<?php
/* GET送信の受取 */
//$value には「名前」が入っている
$value = isset($_GET['name']) ? $_GET['name']: '';//三項演算子
?>
<form method="get">
<input type="text" name="name" value="名前">
<input type="submit" value="送信">
</form>
php.sample
<?php
/* POST送信の受取 */
//$value には「名前」が入っている
$value = isset($_POST['name']) ? $_POST['name']: '';//三項演算子
?>
<form method="post">
<input type="text" name="name" value="名前">
<input type="submit" value="送信">
</form>
スーパーグローバル変数は連想配列なので、キーとなる文字列で値を取り出せます。 連想配列からキーで取得する時、キーが存在しないとエラーが出るためisset()、empty()などでチェックする必要があります。
*「スーパーグローバル変数」- すべてのスコープで使用できる組み込みの変数
$_SERVER
$_SERVERにはサーバ情報やページアクセス時の環境情報が入っています。/* ユーザのIPアドレス */
$ip = $_SERVER['REMOTE_ADDR'];
/* メソッド名 GET POST など */
$method = $_SERVER['REQUEST_METHOD'];
/* URLの?以降 */
$query = $_SERVER['QUERY_STRING'];
/* ブラウザ情報 */
$ua = $_SERVER['HTTP_USER_AGENT'];
/* スクリプトのパスと名前 */
$script_path = $_SERVER['SCRIPT_NAME'];
/* 動作サーバのIPアドレス */
$sip = $_SERVER['SERVER_ADDR'];
$_SESSION
session_start()でセッションを開始した場合にのみ、入力されています。<?php
/* セッション開始 */
session_start();
/* POST送信の時 */
if ($_SERVER['REQUEST_METHOD']=='POST') {
/* POSTデータをセッションデータに */
$_SESSION['post'] = $_POST;
} else {
/* セッションにあるPOSTデータを受け取り */
$post = $_SESSION['post'];
}
「ファイル」から受け取る
<?php
/* 入力元となるデータファイル */
define('FILE_DATA','bbs.dat');
/* 代入する変数 */
$lines = array();
/* ファイルからデータを一行ずつ受け取る */
$fp = fopen(FILE_DATA,'r');
while($line = fgets($fp)){
$lines[] = $line;
}
fclose($fp);
/* ファイルからデータを一括で受け取る */
$data = file_get_content(FILE_DATA);
/* ファイルからデータを配列で受け取る */
$lines = file(FILE_DATA);
「データベース」から受け取る
PHPで開発されたWebアプリケーションでは、主にMySQL、PostgreSQL、SQLiteなどのデータベースが 利用されています。
<?php
/* MySQLに接続 */
/* ホスト名設定 */
define('DB_HOST', 'localhost');
/* データベース名 */
define('DB_NAME', '');
/* 接続ユーザー名 */
define('DB_USER', '');
/* 接続パスワード */
define('DB_PASS', '');
/* エラーを代入する変数 */
$ERROR = array();
/* 接続エラーを取得するための記述 */
try {
/* データベース操作用のオブジェクトを作成 */
$db = new PDO('mysql:dbname='.DB_NAME.';host='.DB_HOST.';charset=utf8', DB_USER, DB_PASS);
/* データベースを操作するSQL文 */
$sql = 'SELECT * FROM posts WHERE category_id=?';
/* SQL文として渡す入力データ */
$q = array('100');
/* SQL文を実行するための準備 */
$sth = $db->prepare($sql);
/* SQL文を実行 */
$sth->execute($q);
/* データベースからの結果を連想配列の配列で受け取る */
$r = $sth->fetchAll(PDO::FETCH_ASSOC);
/* 接続エラーの例外を処理 */
} catch(PDOException $e) {
$ERROR[] = $e->getMessage();
}
やっている事
・define() で接続に必要なデータベース設定を定義・try{}catch(){} で例外を処理
・new PDO() でMySQL接続の設定、操作オブジェクトを作成
・->prepare() でプリペアドステートメントを準備
・->execute() で入力用の配列でSQL文を実行
・->fetchAll(PDO::FETCH_ASSOC) SQL文の実行結果を受け取り
・$e->getMessage() で例外メッセージを取得
インターネット上の「外部URL」から受け取る
<?php
/* URL情報 */
$url = '';
/* URLにGETアクセス */
$data = file_get_contents($url);
/* アクセス時の設定を行ってアクセス */
$opts = array(
'http'=>array(
'method'=>'POST',
'header'=>"Cookie: key=val\r\n",
)
);
$data = file_get_contents($url, false, stream_context_create($opts));
/* レスポンスのヘッダー確認 */
print_r($http_response_header);
「メモリ」から受け取る
<?php
/* 識別ID URLなどの一意の文字列 */
$id = '';
/* データの存在確認 */
if (apc_exists($id)) {
/* キャッシュから取得 */
$data = unserialize( apc_fetch($id) );
} else {
/* ここで重い処理を行う */
/* 重い処理の結果、$dataの連想配列にデータが入っている想定 */
$data = array();
/* 変数を有効期限までキャッシュ */
apc_store($id, serialize($data), 3600);
}
/* ここで $data の表示処理 */
/* 共有メモリの状態を確認する場合 */
print_r(apc_sma_info());
/* キャッシュをすべてクリアする場合 */
apc_clear_cache();
/* 特定のキャッシュを削除する場合 */
apc_delete($id);
/* ファイルを作成せず、メモリ上で処理したい場合 */
$fp = fopen('php://memory','r+');
/* ファイルデータとして処理 */
/* メモリが解放される */
fclose($fp);
「標準関数」から受け取る
<?php
/* タイムゾーンを設定 */
date_default_timezone_set('Asia/Tokyo');
/* 日時の受け取り */
$date = date('Y/m/d H:i:s');//年/月/日 時:分:秒
/* Unixタイムスタンプを取得 */
$time = time();
/* Unixタイムスタンプをマイクロ秒まで取得 */
list($msec, $sec) = explode(' ', microtime());//$msec にマイクロ秒
/* ファイルの更新日時 */
$mtime = filemtime($f);
/* ファイルサイズ */
$size = filesize($f);
/* ファイルタイプ */
$ftype = mime_content_type($f);
/* ファイルのmd5ハッシュ値を取得 */
$md5 = md5_file($f);
/* 一意の英数字を取得 */
$id = uniqid();
/* 文字列の長さ バイト数 */
$len = strlen($txt);
/* 文字列の長さ 文字数 */
$len = mb_strlen($txt);
/* 文字列のmd5ハッシュ値を取得 */
$md5 = md5($str);
/* ランダムな数値 1-100 */
$r = mt_rand(1, 100);
/* コマンドの実行結果 例として df は空き容量確認 */
exec('df -h', $o);
/* 実行結果の確認 */
print_r($o);
/* 指定ディレクトリ内のファイル一覧 */
$files = scandir($dir);
参考文献: