<?php
/*:::::::::::::::::::::::::::::::::::
 GMS_PHP Ver 1.623 サブライブラリ
 Copyright(C) by でいゆ工房
 http://www.deiyu-studio.net/
:::::::::::::::::::::::::::::::::::*/
//ファイル入出力クラス
class File
{
	var $fp;	//ファイルポインタ
	var $Size = NULL;	//ファイルサイズ

	//コンストラクタ
	function File ($file_name,$open_mode)
	{
		if($open_mode == 'r') $this->Size = filesize ($file_name) + 1;
		if($this->Size == FALSE) $this->Size = NULL;
		$this->fp = @fopen ($file_name,$open_mode) or Error_Msg("Open Error : $file_name");
	}

	//ポインタを閉じる
	function close ()
	{
		return @fclose($this->fp);
	}

	//一行読み込む
	function gets ($max_size)
	{
		return is_null($max_size)?@fgets($this->fp,$this->Size):@fgets($this->fp,$max_size);
	}

	//書き込む
	function puts ($dat)
	{
		return @fwrite($this->fp,$dat);
	}

	//EOFに達したかチェック
	function eof ()
	{
		return @feof($this->fp);
	}

	//ファイルロック
	function lock ($lock_type)
	{
		return ($lock_type > 2)?0:@flock($this->fp,$lock_type);
	}

	//ファイルアンック
	function unlock ()
	{
		return @flock($this->fp,3);
	}
}

//登録人数取得
//$FileName : メンバー数取得するログファイル
//戻り値	: メンバー数
function Get_Count_List ($FileName)
{
	$list = Read_File($FileName);
	$counter = 0;
	while (list($key, $val) = each ($list))
	{
		list(,,,,$flg) = explode("<>", $val);
		if($flg) $counter++;
	}
	return $counter;
}

//メインスキンから表スキン取得
//$FileName : メインスキンファイル
//$skin_type: 表スキンタイプ
//戻り値	: 表スキン
function Get_Main_Skin ($FileName,$skin_type)
{
	$skin_html = "";
	$main_skin = Read_File($FileName);

	if($skin_type == "List" || $skin_type == "ListNo"){
		$main_skin = split("<MAINLIST>|<\/MAINLIST>",implode("",$main_skin));
		if(count($main_skin) > 2) $skin_html = $main_skin[1];
	}else if($skin_type == "Report"){
		$main_skin = split("<REPORTLIST>|<\/REPORTLIST>",implode("",$main_skin));
		if(count($main_skin) > 2) $skin_html = $main_skin[1];
	}

	return $skin_html;
}

//ファイル読み込み
//$FileName : 読み込むファイル名
//戻り値	: 読み込んだデータの配列
function Read_File ($FileName)
{
	if(!file_exists($FileName)) Error_Msg("Open Error : $FileName");
	$file_data = file($FileName);

	return $file_data;
}

//ファイル1行読み込み
//$FileName : 読み込むファイル名
//戻り値	: 読み込んだデータ
function Read_File2 ($FileName)
{
	if(!file_exists($FileName)) Error_Msg("Open Error : $FileName");
	$file = new File($FileName,'r');
	$Buf = $file->gets(NULL);
	$file->close;

	return $Buf;
}

//ファイル書き込み
//$FileName : 書き込みファイル名
//$buf		: 書き込むデータ
//戻り値	: 
function Write_File ($FileName,$buf)
{
	$file = new File($FileName,'w');
	$file->lock(2);
	$ret = $file->puts($buf);
	$file->unlock();
	$file->close();

	return $ret;
}

//ファイル追加書き込み
//$FileName : 書き込みファイル名
//$buf		: 書き込むデータ
//戻り値	: 
function Add_File ($FileName,$buf)
{
	$file = new File($FileName,'a');
	$file->lock(2);
	$ret = $file->puts($buf);
	$file->unlock();
	$file->close();

	return $ret;
}

//パスワード暗号化
//$Pass 	: 暗号化するパスワード
//戻り値	: 暗号化したパスワード
function Encrypt ($Pass)
{
	mt_srand(microtime()*5846);
	$salt = md5(uniqid(mt_rand(),1));
	$salt2 = substr($salt,mt_rand(0,strlen($salt)),1);
	$salt = md5(uniqid(mt_rand(),1));
	$salt2 .= substr($salt,mt_rand(0,strlen($salt)),1);

	return crypt($Pass,$salt2);
}

//パスワード複合化
//$Pass 	: 暗号化されたパスワード
//戻り値	: 1:パスワード同じ 0:パスワードが違う
function Decrypt ($Pass,$EncPass)
{
	if(strcmp(crypt($Pass,substr($EncPass,0,2)),$EncPass) == 0) return TRUE;
	else return FALSE;
}

//時間取得
//戻り値	: 2004/01/26 形式の日付が返される
function Get_Time ()
{
	return date("Y/m/d");
}

//改行を<BR>変換
//$line 	: 改行を<BR>に変換する文字列
//戻り値	: <BR>に変換された文字列
function Tag2Br ($line)
{
	$line = preg_replace('/\r\n/','<BR>',$line);
	$line = preg_replace('/\n/','<BR>',$line);
	return $line;
}

//<BR>を改行変換
//$line 	: <BR>を改行に変換する文字列
//戻り値	: 改行に変換された文字列
function Br2Tag ($line)
{
	return preg_replace('/<BR>/i',"\n",$line);
}

//カウンター
//$FileName	: カウンターログファイル
//戻り値	: カウント数
function Set_Counter($FileName,$con_c)
{
	$cout = Read_File2($FileName);
	$counter = 0;

	if($cout != "") list($counter,$ip) = explode("<>",$cout);

	if($_SERVER[REMOTE_ADDR] != $ip){
		$counter++; //カウンターを増やす
		Write_File($FileName,"$counter<>$_SERVER[REMOTE_ADDR]<>");
	}
	return sprintf(sprintf("%%0%dld",$con_c),$counter);
}

//'<','>','&','"'を特殊文字に変換
//$line 	: 変換する文字列
//戻り値	: 変換された文字列
function html2Spchar ($line)
{
	return htmlspecialchars($line,1);
}

//比較
function str_val_cmp ($str1,$str2)
{
	if(preg_match('/[^0-9\+\-]/',$str1) || preg_match('/[^0-9\+\-]/',$str2)){
		return strcmp($str1,$str2);
	}else{
		if($str1 == $str2) return 0;
		if($str1 > $str2) return 1;
		if($str1 < $str2) return -1;
	}
}

//ファイルアップ関数
function upload_ifile($i_kname,$fname,$width,$height)
{
	global $CONFIG,$FORM;

	//アップチェック
	if(empty($_FILES[$i_kname][name])) return array("","",0,0);
	if(phpversion() >= "4.2.0"){
		//画像サイズエラー
		if($_FILES[$i_kname][error] == 2 || $_FILES[$i_kname][error] == 1) return array(-3,"",0,0);
		//アップロードエラー
		if($_FILES[$i_kname][error] == 3 || $_FILES[$i_kname][error] == 4) return array(-2,"",0,0);
	}
	if(!file_exists($_FILES[$i_kname][tmp_name])) return array(-2,"",0,0);

	//ファイル形式を認識
	$Flg = 0;
	if(preg_match('/image\/gif/i',$_FILES[$i_kname][type])){ $type = ".gif"; $Flg=1; }
	elseif(preg_match('/image\/jpeg/i',$_FILES[$i_kname][type])){ $type = ".jpg"; $Flg=1; }
	elseif(preg_match('/image\/(x-)?png/i',$_FILES[$i_kname][type])){ $type = ".png"; $Flg=1; }

	if (!$Flg) {
		if(preg_match('/\.gif$/i',$_FILES[$i_kname][name])){ $type = ".gif"; $Flg=1; }
		elseif(preg_match('/\.jpe?g$/i',$_FILES[$i_kname][name])){ $type = ".jpg"; $Flg=1; }
		elseif(preg_match('/\.png$/i',$_FILES[$i_kname][name])){ $type = ".png"; $Flg=1; }
	}

	//対応以外の形式の場合
	if (!$Flg) return array(-1,"",0,0);

	//サイズ取得
	$Image_Info = getimagesize($_FILES[$i_kname][tmp_name]);

	//サイズが取得できなかった場合
	if ($Image_Info[0] == 0 || $Image_Info[1] == 0) return array(-1,"",0,0);

	//画像サイズチェック
	if ($Image_Info[0] > $width || $Image_Info[1] > $height) return array(-3,"",0,0);

	//画像ファイル名の生成
	$Img_File = "$fname$type";

	if (!move_uploaded_file($_FILES[$i_kname][tmp_name],$Img_File)) return array(-2,"",0,0);
	if (!is_file($Img_File)) return array(-2,"",0,0);

	//画像のパーミッション変更
	if((file_exists($Img_File) && !chmod($Img_File,0644))) return array(-4,"",0,0);

	//前画像ファイル削除処理
	$del_f1 = $del_f2 = "$fname";
	switch($type)
	{
		case '.jpg':
			$del_f1 .= ".gif"; $del_f2 .= ".png";
			break;
		case '.gif':
			$del_f1 .= ".jpg"; $del_f2 .= ".png";
			break;
		case '.png':
			$del_f1 .= ".gif"; $del_f2 .= ".jpg";
			break;
	}
	if(file_exists($del_f1)) unlink($del_f1);
	if(file_exists($del_f2)) unlink($del_f2);

	return array($type,$fname,$Image_Info[0],$Image_Info[1]);
}


?>