개발시 유용한 함수 라이브러리

//
// Author : Spectator(Kim Kwan Joong)
//

// require나 include시 중복선언 방지를 위한 부분
if( !$__FUNC_PHP__ )
{
$__FUNC_PHP__ = 1;

// 처음 몇개는 자바스크립트를 처리하는 함수입니다.
// 실제로 가장 자주 사용되는 함수들이죠.
// (일일이 입력하는 노가다란…-_-;)

// GoBack() : 이전페이지로 바로 갑니다.
// GoBack($msg) : $msg를 경고메시지로 출력하고 갑니다.

function GoBack($msg = “”)
{
echo “
“;
}

// CloseWin() : 현재 윈도우창을 닫습니다.
// CloseWin($msg) : $msg를 경고메시지로 출력하고 닫습니다.
// CloseWin($msg,1) :
// $msg를 경고메시지로 출력하고 원래 자신을 연 부모윈도우를
// Reload시킵니다. (바뀐 내용을 적용시킬때 사용)

function CloseWin($msg = “”, $refresh = 0)
{
echo “
“;
}

// GoTo($url) : 현재 페이지를 $url로 대치시킵니다.
// 현재 페이지는 history상에 남지 않습니다.
// (입력받은 정보를 DB등에 저장하고 난 뒤에 다른 페이지로 이동할때
// 저장하는 페이지가 히스토리에 남으면 “뒤로”를 눌렀을 때 좋지
// 않은 일이 발생하겠죠…)
// GoTo($url, $msg) : $msg를 경고메시지로 출력하고 이동합니다.
// GoTo($url, $msg, $target) : $msg를 경고메시지로 출력하고
// $target에 해당하는 프레임을 $url로 대치시킵니다.

function GoTo($url, $msg = “”, $target = “”)
{
echo “
“;
}

// Alert($msg) : 단순히 $msg를 경고메시지로 출력합니다.
// (확인을 누르면 계속 그 뒤의 처리를 계속합니다)

function Alert($msg)
{
echo “
“;
}

// FreadAll($filename) : $filename에 해당하는 파일내용 전체를 읽어서
// 문자열로 리턴해줍니다. (비슷한 readfile()이나 file()함수가 있지만
// readfile()은 무조건 표준출력으로 가고 file()은 각 행이 배열로
// 읽혀지기 때문에 전체파일을 지정한 변수로 읽어들일 때는 이 함수를
// 사용합니다.)

function FreadAll($filename)
{
if( !file_exists($filename) )
return “”;

$fp = fopen($filename, “r”);
$text = fread($fp, filesize($filename));
fclose($fp);

return $text;
}

// FwriteAll($filename, $text) : FreadAll()과 반대로 $text 문자열
// 전체를 $filename으로 된 파일로 저장합니다.

function FwriteAll($filename, $text)
{
$fp = fopen($filename, “w”);
$ret = fwrite($fp, $text);
fclose($fp);

return $ret;
}

// html_format($text) : 본문의 일부로 나오는 내용이 전체 html에
// 영향을 미치는 것을 막거나 특정태그의 사용을 방지하기 위해
// 화면에 출력하기 전에 태그를 무효화시킬 때 사용하는 함수입니다.
// (Daum에서 특정태그를 방지하는 것을 보고 만들어봤습니다.)
// 기본적으로 nl2br()로 행구분을
로 처리합니다.
// html_format($text, 0) : nl2br()처리만 하지 않습니다.

function html_format($text, $break = 1)
{
$text = stripslashes($text);
$text = ereg_replace(“ $text = ereg_replace(“?>”, “?>”, $text);
$text = eregi_replace(“ $text = eregi_replace(“ $text = eregi_replace(“ $text = eregi_replace(“ $text = eregi_replace(“ $text = eregi_replace(“ $text = eregi_replace(“ $text = eregi_replace(“ $text = eregi_replace(“ $text = eregi_replace(“ $text = eregi_replace(“ $text = eregi_replace(“ $text = eregi_replace(“ $text = eregi_replace(“ $text = eregi_replace(“ $text = eregi_replace(“ $text = eregi_replace(“ // ereg_replace(” “,” “, $text)처럼 사용하게 되면
// 브라우저에서 자동 행구분을 못해주기 때문에 문자열의 길이만큼
// 표의 폭이 늘어나거나 하는 부작용이 생길 수 있습니다.
// 이 부분은 필요에 따라 사용하시면 됩니다.
$text = ereg_replace(” “,” “,$text);

if( $break )
$text = nl2br($text);

return $text;
}

// LongCut($s, $l) : 문자열 $s를 $l만큼 잘라내고 “…”을 뒤에
// 붙여줍니다. 게시판 리스트 등에서 긴 문자열을 짧게 보여줄 때
// 사용합니다. 무조건 잘라내면 한글이 중간에 걸렸을 때 “?”로
// 처리되기 때문에 뒤에서부터 스캔해서 잘리지 않도록 처리했습니다.

function LongCut($s, $l)
{
if( strlen($s) <= ($l+3) )
return $s;

if( ord($s[$l-1]) > 127 )
{
$nc = 2;
while( ord($s[$l-$nc]) > 127 )
$nc++;
$l -= !($nc & 1);
}

return substr($s, 0, $l) . “…”;
}

// ParseSession($sess) : $sess로 받은 세션값(서버상에 저장되는 파일)
// 을 name => value로 이루어진 array로 리턴합니다.
// 회원인증을 세션으로 처리한다고 해도 현재 접속해 있는 회원들이
// 누가 있는지 알아보려고 하면 서버에 저장되어 있는 세션파일들을
// 직접 읽어들여 처리하지 않으면 알 길이 없어서 세션파일을 분석한
// 끝에 만들어봤습니다. 왜 이 함수가 제공되지 않는지 궁금하군요.
// 만약 $sess가 ‘id|s:5:”guest”;name|s:6:”방문자”;’ 이렇게 돼있을때
// $buf = ParseSession($sess);
// => $buf[id] = “guest”; $buf[name] = “방문자”; 이렇게 됩니다.

function ParseSession($sess)
{
$p = explode(“;”, $sess);
$m = count($p);

for($i=0; $i < ($m-1); $i++)
{
for($k=$i; !strstr($p[$i+1], “|”) && (($i+1) < $m); $i++)
$p[$k] .= “;” . $p[$i+1];

$t[] = $p[$k];
}

$n = count($t);

for($i=0; $i < $n; $i++)
{
$t1 = explode(“|”, $t[$i]);
$t2 = explode(“:”, $t1[1]);
$buf[$t1[0]] = substr($t2[2], 1, $t2[1]);
}

return $buf;
}

// GetExtension($filename) : $filename에서 마지막 “.”이후의
// 확장자만 잘라서 소문자로 리턴한다.

function GetExtension($filename)
{
$filename = trim($filename);
$right = strrchr($filename, “.”);

return strtolower(substr($right,1));
}

// GetOtherName($filename) : $filename이 “name.ext” 일 경우
// “name1.ext”를 리턴해줍니다. 업로드된 파일을 저장하려고 할 때
// 동일한 파일이 있을 경우 이런 식으로 이름부분에만 1을 붙여서
// 저장함으로써 확장자가 그대로 적용되도록 할 수 있습니다.

function GetOtherName($filename)
{
$filename = trim($filename);
$l_all = strlen($filename);
$right = strrchr($filename, “.”);
$l_left = $l_all – strlen($right);

return substr($filename,0,$l_left) . “1” . $right;
}

} // End of if( !$__FUNC_PHP__ )

실행 속도 체크하기

아래 소스는 기본적으로 적수네 게시판 소스에서 속도 체크 알고리즘만
뽑아서 정리한 것임
아래 소스를 그냥 실행하면 0.00 이라고 출력이 되니
꼭 게시판등의 Mysql과 연동하는 소스와 같이 쓰기 바랍니다.

//맨첨에 씀//
$c_time[] = microtime();
function get_microtime($old, $new)
{
// 주어진 문자열을 나눔 (sec, msec으로 나누어짐)
$old = explode(” “, $old);
$new = explode(” “, $new);

$time[msec] = $new[0] – $old[0];
$time[sec] = $new[1] – $old[1];

if($time[msec] < 0) {
$time[msec] = 1.0 + $time[msec];
$time[sec]–;
}

$time = sprintf(“%.2f”, $time[sec] + $time[msec]);

return $time;
}

//Sql문을 다 샐행하고 그담에 씀//
$c_time[] = microtime();
$time = get_microtime($c_time[0], $c_time[1]);
echo “$time”;
?>

브라우저 자동 체크하여, 한글이름 파일 다운로드 시키기

phplove@phplove.co.kr
http://phplove.co.kr

———————————————————————-

$filename = “$row[filename]”; //실제 파일 이름
$filename_o = “$home_dir/tmp/”.$filename; //임시 파일이름
$down_filename = “$home_dir/upfiles/$row[rfilename]”; //실제로 저장된 디렉토리

/*
파일 업로드시 중복파일을 없애기 위해서…..
파일명을 바꾸어 저장합니다….
예를들면
최초 원본파일 next.gif란 파일을 업로드하면 next.gif.0으로 저장이 됩니다
그다음 사람이 다시 next.gif파일을 업로드하면 next.gif.1로 저장
그렇기 때문에 중복되는 파일이 없습니다.
*/

if(file_exists($down_filename)) {
/* 만약 링크된 원본파일이 있을경우 삭제를 해줍니다..^^; 왜그런지는 아시죠? */
if(file_exists($filename_o)) {
@unlink(filename_o);
}

@exec(“ln -sf $down_filename $filename_o”);
/* next.gif.0으로된 파일명을 다시 원래이름으로 링크를 시켜줍니다 */

$filename = trim($filename);
$file = “$home_dir/tmp/$filename”; // 화일이 실제로 있는 위치를..
$file_size=filesize($file);

// 브라우저 골라서 헤더를 따로 따로 전송 해 준다.(5.5 일때는 다르게 해줘야 함)
if( strstr($HTTP_USER_AGENT,”MSIE 5.5″)){
header(“Content-Type: doesn/matter”);
header(“Content-Disposition: filename=$filename”);
header(“Content-Transfer-Encoding: binary”);
header(“Pragma: no-cache”);
header(“Expires: 0”);
}else{
Header(“Content-type: file/unknown”);
Header(“Content-Disposition: attachment; filename=$filename”);
Header(“Content-Description: PHP3 Generated Data”);
header(“Pragma: no-cache”);
header(“Expires: 0”);
}

if(is_file(“$file”)){
$fp = fopen(“$file”,”r”);
if(!fpassthru($fp)) {
fclose($fp);
}
}
@unlink($file);
/* 요기 위에 링크시켜주었던걸 다시 삭제 해야죠….^^; */

} else { // 만약 파일이 없으면 없다고 메시지를 보여줘야죠…
echo(”

$row[filename] 파일이 없습니다!

“);
}

경매, 공동구매 등에서 실시간으로 남은 시간 출력하기

사용한 예를 보실려면 http://tradei.co.kr 여기 오시면 보실수 있습니다.
위에 사이트에 오셔서.. 상품을 클릭하시면 상세 정보를 보실수 있습니다.
거기에 보면 남은시간이 실시간으로 가는 것이 보일겁니다.
그에 아래에 코드입니다.
필요하신분은 쓰세요…

// php 코드
############### 남은기간을 구하는 부분임다. #################
// $adate2[0] : 데이타 베이스의 timestamp형식으로 되어있는 값을 가지고 옵니다.
$date1=mktime($adate2[0],0,0,$adate[0],$adate[1],$adate1[0]); //end타임의 timestamp값
$date2=mktime();

$total_secs=abs($date1 – $date2);
$diff_in_days = floor($total_secs / 86400);
$rest_hours = $total_secs % 86400;
$diff_in_hours = floor($rest_hours / 3600);
$rest_mins = $rest_hours % 3600;
$diff_in_mins = floor($rest_mins / 60);
$diff_in_secs = floor($rest_mins % 60);
$time_diff = $diff_in_days .”일”. $diff_in_hours .”시간”. $diff_in_mins .”분”. $diff_in_secs .”초”;

######################################################################

// 자바스크립트 코드

// body 부분 아래와 적어준다.