PHPの覚書

文字化け対策をとして、PHP.iniの設定をutf8にする

文字化け対策はいくつも存在するが、PHP.iniを修正する方法も対策の一つである。
php.iniに以下を記述する。
	mbstring.http_input = UTF-8
	mbstring.encoding_translation = On
	mbstring.internal_encoding = UTF-8
	mbstring.substitute_character = "?"
	default_charset = UTF-8
	
参照

覚書:php:配列の先頭と最後を取得 | end,reset

	//サンプル配列
	$ary=array('neko'=>'猫','yagi'=>'山羊','kani'=>'蟹','same'=>'鮫');
	
	//配列の末尾要素を取得
	$last = end($ary);//  $last→鮫
	
	//配列の先頭用をを取得
	$first = reset($ary):// $first→猫
	
類似関数表
関数説明
current() 現在の要素を返す。配列を値込で宣言した場合、内部インデックスは先頭である。
配列に値を追加した場合、内部インデックスは末尾となる。
$v=current($ary);
each() 現在の要素とキーを返す。 $res=each($ary);
$resのダンプ例
array(
	(int) 1 => '鷲',
	'value' => '鷲',
	(int) 0 => 'wasi',
	'key' => 'wasi'
)
					
reset() 先頭の要素を返す。また内部インデックスを先頭にする。 $v=reset($ary);
end() 末尾の要素を返す。また内部インデックスを末尾にする。 $v=end($ary);
next() 次の要素を返す。また内部インデックスを1進める。内部インデックスが末尾である場合falseを返す。 $v=next($ary);
prev() 前の要素を返す。また内部インデックスを1戻す。内部インデックスが先頭である場合falseを返す。 $v=prev($ary);
参考サイト

PHPのエラー

そのようなファイル、又はディレクトリはありません

failed to open stream: No such file or directory'
ファイルのOPEN処理やinclude関数、require関数、unlink関数などで起こるエラー。ファイルが存在しないときに起こる。
参考サイト

一意なハッシュコードを生成 | 照合用のハッシュに・・・

ユニーク(一意)なハッシュコードを作成します。
登録確認にメールを介するシステムなど、照合用のハッシュコードとして使えます。
$hash=md5(uniqid(rand(),1));
例:$hash→437af5c55e1f5b697845578e37b74f01

その他の例


	$test = uniqid(rand(1, 1000)); // 例→ 51360a6084ec3f02
	$test = uniqid(); // 例→ 60a6084ec3f42
	

サーバー名またはホスト名を取得 | $_SERVER['SERVER_NAME']

	$server_name=$_SERVER['SERVER_NAME'];
	
ローカル環境である場合、localhostが取得される。

ローカル環境である場合の処理(サーバー名にlocalhostが含まれる場合)

	// ローカル環境である場合の処理(サーバー名にlocalhostが含まれる場合)
	if(strpos($_SERVER['SERVER_NAME'], 'localhost') !== false){
		echo('ローカル環境');
	}
	
	// ローカル環境ではない場合
	if(strpos($_SERVER['SERVER_NAME'], 'localhost') === false){
		echo('ローカル環境ではない');
	}
	

Proxyサーバー経由のアクセス元IPアドレスを取得する

$_SERVERでProxyサーバーに関する情報を取得できる。
$_SERVERのREMOTE_ADDRにプロキシサーバーのIPアドレスが入る。 プロキシサーバーを使用していないのであるならアクセス元のIPアドレスが入っている。

多くのプロキシサーバソフトはHTTP_X_FORWARDED_FORとHTTP_CLIENT_IPにアクセス元のIPアドレスをセットしている。

HTTP_X_FORWARDED_FORはあくまで正規のプロキシサーバー用なので、 攻撃的なプロキシについて考える場合、$_SERVERの情報をまるごとログとして保存したほうが良いかもしれない。

Proxyサーバーに関する情報

コード説明
$_SERVER['REMOTE_ADDR']ProxyサーバーのIPアドレス。プロキシサーバーを使用していない場合はアクセス元IPアドレスが取得できる。
$_SERVER['SERVER_ADDR']WebサーバーのIPアドレス
$_SERVER['HTTP_X_FORWARDED_FOR']多くのプロキシサーバーソフトは、ここにアクセス元のIPアドレスをセットする。webProxyの場合は取得できない。
$_SERVER['HTTP_SP_HOST']
$_SERVER['HTTP_VIA']
$_SERVER['HTTP_CLIENT_IP']一部のプロキシサーバーソフトはこちらを利用する。偽装されることもあるらしい。
$_SERVER['HTTP_FORWARDED']
$_SERVER['HTTP_FROM']

参考サイト一覧


プロキシサーバーが設定している値を取得する

多くのプロキシサーバーが設定している値を取得する。
ただし合法的なプロキシサーバーのみ。

getValueByProxy()関数のソースコード



サンプル
参考サイト

ユーザーエージェントの取得

ユーザーエージェントはアクセス元のブラウザや端末情報である。
PC、スマホ、モバイルで振り分けに利用できる。
ユーザーエージェントは偽装できるようなので過信は禁物である。

最大文字数は512文字とのこと。

ソースコード

$user_agent = $_SERVER['HTTP_USER_AGENT'];

取得値の例

Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36

ob_startとob_end_cleanによる出力バッファのクリア

「ob_start」と「ob_end_clean」に囲まれた範囲は出力されなくなります。

検証

source code

<?php 
echo 'ねこ<br>';
ob_start();
echo 'やぎ<br>';←出力されない
ob_end_clean();
echo 'かに<br>';
?>
	

出力

ねこ
かに

サンプル ドキュメント

文字の一致率 | レーベンシュタイン距離 | similar_text

2つの類似する文字列がどのくらい一致しているか、「similar_text」関数により一致率を算出できます。

sorce code

	$str1="お問い合わせ番号";
	$str2="問合番号";
	$percent=null;//一致率
	similar_text($str1,$str2,$percent);//一致率ポインタを渡す。
	echo $percent;// → 66.67...	
	
完全の一致の場合、一致率($percent)は100になります。

サンプル
文字の一致率測定ツール | similar_text