2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PHPでデータを取得する方法

Last updated at Posted at 2022-04-01

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

参考文献:

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?