/lib/util.php

https://github.com/tyoro/tiarraMetro · PHP · 199 lines · 85 code · 20 blank · 94 comment · 21 complexity · cc31111047fb23cfeb6cf06c53e248cc MD5 · raw file

  1. <?php
  2. //http://h19e.jugem.jp/?eid=33
  3. /*
  4. class Cookie
  5. {
  6. static $sessionName = 'fitzgerald_session';
  7. static $endExpire = 0;
  8. //Cookieをセットするメソッド
  9. static public function set($name,$value,$pass,$time = 0, $path = '/')
  10. {
  11. $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
  12. //暗号化するためのキーを生成
  13. $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
  14. //closeKeyには、オリジナルの文字列を登録してください。
  15. $closeKey = $pass;
  16. $encryptValue = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $closeKey, $value, MCRYPT_MODE_CBC, $iv);
  17. //ワンタイムパスワードを書き込む
  18. try{
  19. $fp = fopen('/tmp/tM_'.md5($path).'.tmp','w');
  20. fwrite($fp,base64_encode($iv));
  21. fclose($fp);
  22. }catch( Exception $e ){
  23. return;
  24. }
  25. //暗号化された値をCookieに書き込みます。
  26. //DOMAIN_FOR_COOKIEはCookieを使用するサイトのドメインです。
  27. setcookie($name,base64_encode($encryptValue),$time , $path, $_SERVER['SERVER_NAME']);
  28. }
  29. //Cookieを取得するためのメソッド
  30. static public function get($name,$pass)
  31. {
  32. $closeKey = $pass;
  33. if (is_file('/tmp/tM_'.md5($path).'.tmp') && isset($_COOKIE[$name])) {
  34. //ワンタイムパスワードを読み込む
  35. try{
  36. $fp = fopen('/tmp/tM_'.md5($path).'.tmp','r');
  37. $iv = base64_decode(fgets($fp));
  38. fclose($fp);
  39. }catch(Exception $e ){
  40. return false;
  41. }
  42. $encryptValue = base64_decode($_COOKIE[$name]);
  43. //Cookieに保存されていたキーを使用してCookieの値を複合します。
  44. $value = mcrypt_decrypt(MCRYPT_RIJNDAEL_256,$closeKey,$encryptValue,MCRYPT_MODE_CBC,$iv);
  45. return str_replace("\0","",$value);
  46. }
  47. return false;
  48. }
  49. //Cookieを削除する為のメソッド
  50. static public function delete($name,$path){
  51. if (is_file('/tmp/tM_'.md5($path).'.tmp') && isset($_COOKIE[$name])) {
  52. unlink( '/tmp/tM_'.md5($path).'.tmp' );
  53. setcookie( $name, null, Cookie::$endExpire, $path, $_SERVER['SERVER_NAME'] );
  54. }
  55. }
  56. }
  57. */
  58. class Cookie
  59. {
  60. static $sessionName = 'fitzgerald_session';
  61. static $endExpire = 0;
  62. //Cookieをセットするメソッド
  63. static public function set($name,$value,$pass,$time = 0, $path = '/')
  64. {
  65. $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
  66. //暗号化するためのキーを生成
  67. $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
  68. //closeKeyには、オリジナルの文字列を登録してください。
  69. $closeKey = $pass;
  70. $encryptValue = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $closeKey, $value, MCRYPT_MODE_CBC, $iv);
  71. //暗号化された値をCookieに書き込みます。
  72. //DOMAIN_FOR_COOKIEはCookieを使用するサイトのドメインです。
  73. setcookie($name,base64_encode($encryptValue),$time , $path, $_SERVER['SERVER_NAME']);
  74. //暗号化された値を解読するためのキーをCookieに書き込みます。
  75. setcookie("iv_" . $name ,base64_encode($iv),$time , $path, $_SERVER['SERVER_NAME'] );
  76. }
  77. //Cookieを取得するためのメソッド
  78. static public function get($name,$pass)
  79. {
  80. $closeKey = $pass;
  81. if (isset($_COOKIE['iv_' . $name]) && isset($_COOKIE[$name])) {
  82. $iv = base64_decode($_COOKIE['iv_' . $name]);
  83. $encryptValue = base64_decode($_COOKIE[$name]);
  84. //Cookieに保存されていたキーを使用してCookieの値を複合します。
  85. $value = mcrypt_decrypt(MCRYPT_RIJNDAEL_256,$closeKey,$encryptValue,MCRYPT_MODE_CBC,$iv);
  86. return str_replace("\0","",$value);
  87. }
  88. return false;
  89. }
  90. //Cookieを削除する為のメソッド
  91. static public function delete($name,$path){
  92. if (isset($_COOKIE['iv_' . $name]) && isset($_COOKIE[$name])) {
  93. setcookie( $name, null, Cookie::$endExpire, $path, $_SERVER['SERVER_NAME'] );
  94. setcookie( 'iv_'.$name, null, Cookie::$endExpire, $path, $_SERVER['SERVER_NAME'] );
  95. }
  96. }
  97. }
  98. class ArrayUtil {
  99. static public function isHash( $target ){
  100. if (!is_array($target)) return false;
  101. $result = true;
  102. foreach ($target as $key => $value){
  103. if(is_numeric($key)) {
  104. $result = false;
  105. break;
  106. }
  107. }
  108. return $result;
  109. }
  110. static public function getWithKey($from, $key = 0){
  111. $result = array();
  112. foreach ((array)$from as $value){
  113. if (is_array($value) && !empty($value[$key])) {
  114. $result[] = $value[$key];
  115. }
  116. }
  117. return $result;
  118. }
  119. }
  120. //FROM Ethna
  121. // {{{ file_exists_ex
  122. /**
  123. * グローバルユーティリティ関数: include_pathを検索しつつfile_exists()する *
  124. * @param string $path ファイル名
  125. * @param bool $use_include_path include_pathをチェックするかどうか
  126. * @return bool true:有り false:無し
  127. */
  128. function file_exists_ex($path, $use_include_path = true)
  129. {
  130. if ($use_include_path == false) {
  131. return file_exists($path);
  132. }
  133. // check if absolute
  134. if (is_absolute_path($path)) {
  135. return file_exists($path);
  136. }
  137. $include_path_list = explode(PATH_SEPARATOR, get_include_path());
  138. if (is_array($include_path_list) == false) {
  139. return file_exists($path);
  140. }
  141. foreach ($include_path_list as $include_path) {
  142. if (file_exists($include_path . DIRECTORY_SEPARATOR . $path)) {
  143. return true;
  144. }
  145. }
  146. return false;
  147. }
  148. // }}}
  149. // {{{ is_absolute_path
  150. /**
  151. * グローバルユーティリティ関数: 絶対パスかどうかを返す
  152. *
  153. * @param string $path ファイル名
  154. * @return bool true:絶対 false:相対
  155. */
  156. function is_absolute_path($path)
  157. {
  158. if (OS_WINDOWS) {
  159. if (preg_match('/^[a-z]:/i', $path) && $path{2} == DIRECTORY_SEPARATOR) {
  160. return true; }
  161. } else {
  162. if ($path{0} == DIRECTORY_SEPARATOR) {
  163. return true;
  164. }
  165. }
  166. return false;
  167. }
  168. // }}}