PHP

【PHP】XMLをパースする際のエラーを極限まで吸収したい。

ということで独自関数のメモ。

function simplexmlLoadString($str,$class_name = "SimpleXMLElement",$options = 0){
	$search = array("\0", "\x01", "\x02", "\x03", "\x04", "\x05", "\x06"
		, "\x07", "\x08", "\x0b", "\x0c", "\x0e", "\x0f");
	$str = str_replace($search, '', $str);
	$str = preg_replace('/[\x00-\x08]/','',$str);
	$str = preg_replace('/[\x0B-\x0C]/','',$str);
	$str = preg_replace('/[\x0E-\x1F]/','',$str);
	$str = mb_convert_encoding($str,'eucjp-win','UTF-8');
	$str = mb_convert_encoding($str,'SJIS-win','eucjp-win');
	$str = mb_convert_encoding($str,'UTF-8','SJIS-win');
	$data = simplexml_load_string($str,$class_name,$options);
	return $data;
}

【PHP】「a」から「z」まで順番に出力するスマートな方法。

面白いことを発見したのでメモ。

for($i = 'a'; $i != 'aa'; $i++) {
	echo "$i\n";
}

なんとこれでa to zが出力される。

大発見。

 

【PHP】ブラウザにPDF出力する際のヘッダーめも。

忘れるのでめも。

header('Content-type: application/pdf');
readfile('/path/to/file.pdf');
die();

 

【PHP】foreach()で参照渡しする際の注意。

PHPのforeachは値を参照で渡すことができるが、ループ後の処理を適切に行わないと落とし穴にはまる。

具体的にはループを抜けた後に、ブロック内で用いていた変数をunsetしてやらなければならない。

foreach ($array as &$value) {
  // 処理
}
unset($value);

上記の例でもし$valueのunsetを忘れると、$valueは配列の最後の要素の参照を保持し続けるため、同じ変数名に値をセットした場合、元配列の最後の要素がその値に書き換わってしまう。

ということで、見落としがちだけど超重要。

 

【PHP】配列の特定キー前後に配列を挿入する。

array_merge()の挿入位置を指定出来る版みたいなやつ。

見つけたのでメモ。

function array_insert($array, $pairs, $key, $position = 'after') {
	$key_pos = array_search($key, array_keys($array));
	if('after' == $position) {
		$key_pos++;
	}
	if(false !== $key_pos) {
		$result = array_slice($array, 0, $key_pos);
		$result = array_merge($result, $pairs);
		$result = array_merge($result, array_slice($array, $key_pos));
	} else {
		$result = array_merge($array, $pairs);
	}
	return $result;
}

 

【CakePHP2.4】テキストを暗号化・復号する。

mcryptエクステンション無しで使えるほうのやつ。

$secret = Security::cipher('text', 'secret_key');
$nosecret = Security::cipher($secret, 'secret_key');

なぜ、これで暗号の復号ができるのか意味不明だけどなぜかできる。

コアメソッドも読んでみたけどやっぱりわからない。

超絶すごいアルゴリズムを使ってるやーつーな気がする。

 

【PHP】PHP5.5環境にmcrypt-phpを追加した時のめも。

超絶自分用。

yum install php55w-mcrypt

 

【PHP】urlencode()セーフなbase64_encode()メソッド。

探してたらいいのを見つけたのでめも。

使わせていただきやす。ありがとうございまっす。

function base64_urlsafe_encode($val) {
	$val = base64_encode($val);
	return str_replace(array('+', '/', '='), array('_', '-', '.'), $val);
}
 
function base64_urlsafe_decode($val) {
	$val = str_replace(array('_','-', '.'), array('+', '/', '='), $val);
	return base64_decode($val);
}