php:PDFファイルの出力とダウンロード

phpPDFファイルをブラウザで出力させる方法と
PDFファイルダウンロードさせる方法をメモします。

出力とダウンロードするには、phpのheader()関数を使用して出力します


phpでPDFファイルをブラウザで出力

// 読み込むPDFファイルを指定
$file = 'hoge.pdf';

// PDFを出力する
header("Content-Type: application/pdf");

// ファイルを読み込んで出力
readfile($file);

exit();

ブラウザで指定したPDFファイルの内容を出力します。


phpでPDFファイルをダウンロード

// 読み込むPDFファイルを指定
$file = 'hoge.pdf';

// ダウンロードするダイアログを出力
header("Content-Disposition: attachment; filename=download.pdf");

// ファイルを読み込んで出力
readfile($file);

exit();

download.pdfをダウンロードするダイアログが表示され、
ダウンロードすることができます。


php:XMLファイルのデータを取得し、配列に変換する

phpXMLファイルのデータを取得し、配列に変換する方法を行いました。
あまり頻繁には使用しないと思うのでメモします。

今回は下記のphpの関数を使用しています。

simplexml_load_file()
simplexml_load_string()
get_object_vars()

XMLファイルのデータが下記のような場合

<?xml version="1.0" encoding="UTF-8"?>
<test>
    <title>raining</title>
    <link>http://raining.bear-life.com/</link>
    <description>日常で感じたこと、覚えたことの記録</description>
    <language>ja</language>
</test>

XMLファイルから配列に変換

simplexml_load_file()」関数を使用し、「test.xml」のデータを取得します

$object = simplexml_load_file('test.xml');

simplexml_load_file()」で取得した値はオブジェクトで取得されます。
取得した値は下記のようになります。

SimpleXMLElement Object
(
    [title] => raining
    [link] => http://raining.bear-life.com/
    [description] => 日常で感じたこと、覚えたことの記録
    [language] => ja
)

上記で取得した$objectを「get_object_vars()」関数を使用し、
配列に変換します。

$arr = get_object_vars($object);

get_object_vars()」で取得した値は下記のように配列で取得されます。

Array
(
    [title] => raining
    [link] => http://raining.bear-life.com/
    [description] => 日常で感じたこと、覚えたことの記録
    [language] => ja
)

XMLデータ文字列から配列に変換

simplexml_load_string()」関数を使用し、XMLデータ文字列をオブジェクトに変換します。

$str = '<?xml version="1.0" encoding="UTF-8"?>
<test>
<title>raining</title>
<link>http://raining.bear-life.com/</link>
<description>日常で感じたこと、覚えたことの記録</description>
<language>ja</language>
</test>';

$object = simplexml_load_string($str);

取得したオブジェクトを「get_object_vars()」関数を使用し、
配列に変換します。

$arr = get_object_vars($object);

get_object_vars()」で取得した値は下記のように配列で取得されます。

Array
(
    [title] => raining
    [link] => http://raining.bear-life.com/
    [description] => 日常で感じたこと、覚えたことの記録
    [language] => ja
)

※「get_object_vars()」で配列に変換できるのは1階層までしか変換できないみたいです。

php:文字列の先頭、末尾の半角全角スペース削除

phpで入力された文字列などの前後のスペースを除去する場合のメモです。

phpでは「trim()」という関数がありますが、半角のスペースは削除してくれるのですが、
全角のスペースは削除されません。
半角のスペースのみ削除する場合はtrim()でいいと思います。

なので、今回は文字列先頭、末尾にある半角・全角スペース
正規表現を使用し削除する方法をメモします。


先頭、末尾の半角・全角スペース削除

・先頭の半角・全角スペース削除

$str = preg_replace('/^[  ]+/u', '', $str);

“^[  ]”で行頭が半角スペース、または全角スペースで始まる文字に一致させます。
“+”で直前の文字の1回以上の繰り返しに一致させます。
上記で一致した値を空文字で置換しています。


・末尾の半角・全角スペース削除

$str = preg_replace('/[  ]+$/u', '', $str);

“[  ]+”で半角スペース、または全角スペースの1回以上の繰り返しに一致させます。
“$”で末尾を示すので末尾が半角全角スペースの場合に一致します。
上記で一致した値を空文字で置換しています。


上記の両方を行うことで先頭、末尾の半角・全角スペースを削除することができます。

$str = preg_replace('/^[  ]+/u', '', $str);
$str = preg_replace('/[  ]+$/u', '', $str);

上記を関数にした場合

対象の文字列を作成した関数の引数で渡し、
スペースを削除した値をリターンします。

function space_trim ($str) {
	// 行頭の半角、全角スペースを、空文字に置き換える
	$str = preg_replace('/^[  ]+/u', '', $str);

	// 末尾の半角、全角スペースを、空文字に置き換える
	$str = preg_replace('/[  ]+$/u', '', $str);

	return $str;
}

php:文字列から配列、配列から文字列にする方法

phpで文字列を指定した区切り文字で配列に格納したり、配列の中身を連結文字で連結させて文字列にしたい場合があります。
phpでは「explode()」、「implode()」関数を使用すると文字列から配列配列から文字列に変換できます。

explode()

文字列を指定した区切り文字で分割し、配列に格納した値を返します。

explode('区切り文字', '文字列')

implode()

配列の中身を連結文字で連結した値を返します。

implode('連結文字', '配列')

文字列から配列にする場合(explode)

$str = '1,2,3';
var_dump(explode(',', $str));
array(3) { [0]=> string(1) "1" [1]=> string(1) "2" [2]=> string(1) "3" }

配列から文字列にする場合(implode)

$arr = array('1', '2', '3');
var_dump(implode(',', $arr));
string(5) "1,2,3"

チェックボックスなどで取得した配列の値を文字列にし、データベースに格納したり、その値を取り出す場合に区切り文字で配列にしたりなど色々な用途で使用してます。

php:phpで正規表現を使った英数字チェック

phpでフォームを作成する場合、バリデーションの処理は必要だと思います。
数字チェック、英字チェック、英数字チェックなど色々なパターンのチェックがあります。
いつも忘れてしまうので、php正規表現で「preg_match()」を使用した英数字チェックをする方法をメモします。


※変数内の全ての文字を判定しています。
※半角英数字の場合です。

数値チェック

	// 数字チェック
	if (preg_match('/^[0-9]+$/', $data)) {
		// 数字の場合
	}
	else {
		// 数字ではない場合
	}

英字チェック

	// 英字チェック
	if (preg_match('/^[a-zA-Z]+$/', $data)) {
		// 英字の場合
	}
	else {
		// 英字ではない場合
	}

英数字チェック

	// 英数字チェック
	if (preg_match('/^[a-zA-Z0-9]+$/', $data)) {
		// 英数字の場合
	}
	else {
		// 英数字ではない場合
	}

また、関数にしておくと値を渡すだけなので簡単に使えると思います。

上記のチェックを関数にした場合

	// 数字チェック
	function is_num($data) {
		if (preg_match('/^[0-9]+$/', $data)) {
			// 数字の場合
			return true;
		}
		else {
			// 数字ではない場合
			return false;
		}
	}

	// 英字チェック
	function is_alpha($data) {
		if (preg_match('/^[a-zA-Z]+$/', $data)) {
			// 英字の場合
			return true;
		}
		else {
			// 英字ではない場合
			return false;
		}
	}

	// 英数字チェック
	function is_alphanum($data) {
		if (preg_match('/^[a-zA-Z0-9]+$/', $data)) {
			// 英数字の場合
			return true;
		}
		else {
			// 英数字ではない場合
			return false;
		}
	}

他にも色々なパターンを組み合わせることができるので、自由にチェック内容を作成できると思います。