'자작소스/PHP'에 해당되는 글 50건
- 2007.09.12 특정 문자열만 추출하는 함수
- 2007.09.12 웹파일(원격)을 로컬에 저장하는 함수
- 2007.09.12 웹페이지 소스 읽어 오는 함수
- 2007.06.29 PEAR Pager Class 간단 메뉴얼
- 2007.06.29 문자열 자르기 함수 v1.0
- 2007.06.29 파일쓰기 함수 v1.0
- 2007.06.29 파일업로드 함수 v1.0
- 2007.06.29 빈 값 체크 함수 v1.0
- 2007.06.29 페이지 이동 함수 v1.0
- 2007.06.29 입력된 시간을 5분 단위로 끈어서 입력
2007. 9. 12. 10:22
특정 문자열만 추출하는 함수
2007. 9. 12. 10:22 in 자작소스/PHP
<?php /** * 문자열중 특정 내용만 추출하는 함수 * $contents 는 되도록이면 참조형으로 넘길것 * USE_STATIC 문자열 추출후 그후에 나오는 문자를 또 추출하려 할때 위치를 기억함 * USE_SKIP 추출할 문자열 이전에 동일 문자열이 있을경우 offset 을 특정문자열까지 건너뛸려고 할때 사용 * USE_RESET _STATIC 모드로 사용중 처음부터 다시 문자열을 찾으려고 할경우 offset을 0으로 리셋 * 옵션을 주지 않고 사용할경우 최초문자열만을 리턴 * * @param text $contents * @param text $start_string * @param text $end_string * @param int $opt (USE_STATIC | USE_SKIP | USE_RESET) * @return mix(text/null) */ define('USE_STATIC',1); define('USE_SKIP',2); define('USE_RESET',4); function parseString($contents, $start_string, $end_string, $opt = NULL) { if($opt & USE_STATIC) { static $pos = 0; if($opt & USE_RESET) { $pos = 0; return NULL; } } else { $pos = 0; } $spos = strpos($contents, $start_string, $pos); if($spos === FALSE) { return NULL; } $spos = $spos + strlen($start_string); $pos = $spos; if($opt & USE_SKIP) { return NULL; } $epos = strpos($contents, $end_string, $pos); if($epos === FALSE) { return NULL; } $pos = $epos; return substr($contents,$spos,$epos-$spos); } ?>
2007. 9. 12. 10:15
웹파일(원격)을 로컬에 저장하는 함수
2007. 9. 12. 10:15 in 자작소스/PHP
<?php /** * 원격파일을 로컬에 저장 * * @param text $url * @param text $savefile */ function getRemoteFile($url,$savefile) { $dirname = dirname($savefile); $url_info = parse_url($url); if(!is_dir($dirname)) { mkdir($dirname,0777); } $fp = fsockopen($url_info['host'], 80); if(!$fp) { return FALSE; } $fp1 = fopen($savefile,'w+'); if(!$fp1) { return FALSE; } fputs($fp,"GET ".$url_info['path'].($url_info['query'] ? '?'.$url_info['query'] : '')." HTTP/1.0\r\n"); fputs($fp,"Host: ".$url_info['host']."\r\n"); fputs($fp,"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)\r\n"); fputs($fp,"Connection: close\r\n\r\n"); while(trim($buf = fgets($fp,1024))) {} //헤더부분 건너뜀 while(!feof($fp)) { fwrite($fp1,fgets($fp,1024)); } fclose($fp1); fclose($fp); return TRUE; } ?>
2007. 9. 12. 10:14
웹페이지 소스 읽어 오는 함수
2007. 9. 12. 10:14 in 자작소스/PHP
<?php /** * 웹페이지 소스 가져오는 함수 * * @param text $url * @param array( * 'method' => 'GET/POST', * 'port' => 80, * 'cookie'=> array ( * 'key' => 'value', * 'key' => 'value' * ), * 'referer' => 'http://domain.com', * ) $opt * @return array */ function getPageSource($url, $opt = array()) { $result = array('',''); if(empty($opt)) { $opt['method'] = 'GET'; $opt['port'] = 80; } else { if(isset($opt['method'])) { $opt['method'] = strtoupper($opt['method']); if($opt['method'] !== 'GET' && $opt['method'] !== 'POST') { exit("FUNCTION getPageSource ERROR : \$opt['method'] is only GET or POST"); } } if(isset($opt['port']) && ctype_digit($port) === FALSE) { exit("FUNCTION getPageSource ERROR : \$opt['port'] is only integer value"); } } $url_info = parse_url($url); $fp = fsockopen($url_info['host'], $opt['port']); if(!$fp) { return array(); } fputs($fp,$opt['method']." ".$url_info['path'].($opt['method'] === 'GET' && $url_info['query'] ? '?'.$url_info['query'] : '')." HTTP/1.0\r\n"); fputs($fp,"Host: ".$url_info['host']."\r\n"); fputs($fp,"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)\r\n"); if(isset($opt['referer'])) { fputs($fp,"Referer: ".$opt['referer']."\r\n"); } if(isset($opt['cookie'])) { foreach($opt['cookie'] as $value => $key) { fputs($fp,"Cookie: ".$key."=".urlencode($value).";\r\n"); } } if($opt['method'] === 'POST') { fputs($fp,"Content-Type: application/x-www-form-urlencoded\r\n"); fputs($fp,"Content-Length: ".strlen($url_info['query'])."\r\n"); fputs($fp,"Connection: close\r\n\r\n"); fputs($fp,$url_info['query']); } else { fputs($fp,"Connection: close\r\n\r\n"); } while(trim($buf = fgets($fp,1024))) { //respose header 부분을 읽어옵니다. $result[0] .= $buf; } while(!feof($fp)) { //response body 를 읽어옵니다. $result[1] .= fgets($fp,1024); } fclose($fp); return $result; } ?>
2007. 6. 29. 15:37
PEAR Pager Class 간단 메뉴얼
2007. 6. 29. 15:37 in 자작소스/PHP
Pager 는 말그대로 페이징 클래스입니다.
설치방법은 php 설치 디렉토리에서
pear install Pager 엔터 하면 설치가 되고
사용은 require_once 'Pager/Pager.php'; 하시고 쓰시면 되겠습니다.
사용방법은 단순히 인스턴스 생성시 파라메타로 설정값을 넘기면
페이징 링크를 생성해서 사용할수 있는 아주~ 간단한 클래스입니다.
사용예제는 아래와 같습니다.
그걸 뿌려주기만 하면 끝이죠. 옵션에 관한 설명은 아는거만 ^^;
itemData [array] -
페이징에 사용할 내용 전체를 배열로 넣을수 있습니다.
그럼 배열의 총수가 total 이 되는거죠.
totalItems [integer]-
itemData 에 내용전체를 넣지않고 페이징될 총 갯수만 설정할수 있습니다.
perPage [integer] -
한페이지에 글이 몇개인지.
delta [integer]-
페이지 번호를 몇개 보여줄지.
mode [string] "Jumping" or "Sliding"
점핑은 보통 사용하는 페이징 방식이고 슬라이딩은 일정페이지 이상이 되면
현재 페이지가 항상 페이지 번호 중간에 나오는 방식입니다.(구글 결과페이지 참고)
httpMethod [string] "get" or "post" -
페이징 변수를 get,post로 넘길건지.
linkClass [string] -
페이징에 걸 스타일 시트
urlVar [string] "pageID" -
페이지 번호로 사용할 변수이름
altFirst [string]
altPrev [string]
altNext [string]
altLast [string]
altPage [string]
- 마우스 올렸을때 나타낼 문자열
prevImg [string] "<<"
nextImg [string] ">>"
- 앞,뒤 링크 문자 혹은 이미지 아이콘으로 설정
separator [string] -
페이지 번호에 특정 문자,이미지를 추가할수 있습니다.
curPageLinkClassName [string]
- 현재페이지 번호에 적용할 스타일 시트
firstPageText [string]
lastPageText [string]
- 맨처음,맨끝 페이지 표시할때 사용할 문자열
extraVars [array]
- 페이징 링크에 추가할 변수들 넣을수 있습니다.
머 대충 이정도구요.
나머지 메소드들도 간단히 아는거만 ^^;
Pager::getCurrentPageID() -- 현재페이지 번호리턴
Pager::getLinks() -- 생성된 링크를 배열로 리턴
Pager::getNextPageID() -- 다음페이지 번호 리턴
Pager::getOffsetByPageId() -- 페이지에 해당하는 limit 리턴
Pager::getPageData() -- itemData에 전체 내용을 배열로 넣었을때 페이지에 해당하는 배열내용을 가져울수 있습니다.
Pager::getPreviousPageID() -- 이전 페이지 번호
Pager::getperpageselectbox ([integer $start = 5 [, integer $end = 30 [, integer $step = 5 [, boolean $showAllData = false [, string $optionText = '%d']]]]]) -- 페이지 바로가기 selectbox html 을 리턴합니다.
대충 이정도구요.
아쉬운 점이라면 이전10개 다음10개 이기능이 없더군요.
페이징관련 소스를 찾고 있으시거나 공부해보실 분이라면
한번 봐두는 것도 좋을듯 하네요.
http://pear.php.net/manual/en/package.html.pager.php
설치방법은 php 설치 디렉토리에서
pear install Pager 엔터 하면 설치가 되고
사용은 require_once 'Pager/Pager.php'; 하시고 쓰시면 되겠습니다.
사용방법은 단순히 인스턴스 생성시 파라메타로 설정값을 넘기면
페이징 링크를 생성해서 사용할수 있는 아주~ 간단한 클래스입니다.
사용예제는 아래와 같습니다.
<?php $params = array( 'mode' => 'Jumping', 'extraVars' => array('sType' => $sType, 'sString' => $sString), 'totalItems' => (int)$total, 'delta' => 10, 'perPage' => 30, 'prevImg' => '[◀]', 'nextImg' => '[▶]', 'firstPageText' => '맨처음', 'lastPageText' => '마지막', 'curPageLinkClassName' => 'pagerStyle' ); $pager =& Pager::factory($params); $page =& $pager->getLinks(); ?>이렇게 만들면 $page에 배열로된 링크가 만들어져 리턴됩니다.
그걸 뿌려주기만 하면 끝이죠. 옵션에 관한 설명은 아는거만 ^^;
itemData [array] -
페이징에 사용할 내용 전체를 배열로 넣을수 있습니다.
그럼 배열의 총수가 total 이 되는거죠.
totalItems [integer]-
itemData 에 내용전체를 넣지않고 페이징될 총 갯수만 설정할수 있습니다.
perPage [integer] -
한페이지에 글이 몇개인지.
delta [integer]-
페이지 번호를 몇개 보여줄지.
mode [string] "Jumping" or "Sliding"
점핑은 보통 사용하는 페이징 방식이고 슬라이딩은 일정페이지 이상이 되면
현재 페이지가 항상 페이지 번호 중간에 나오는 방식입니다.(구글 결과페이지 참고)
httpMethod [string] "get" or "post" -
페이징 변수를 get,post로 넘길건지.
linkClass [string] -
페이징에 걸 스타일 시트
urlVar [string] "pageID" -
페이지 번호로 사용할 변수이름
altFirst [string]
altPrev [string]
altNext [string]
altLast [string]
altPage [string]
- 마우스 올렸을때 나타낼 문자열
prevImg [string] "<<"
nextImg [string] ">>"
- 앞,뒤 링크 문자 혹은 이미지 아이콘으로 설정
separator [string] -
페이지 번호에 특정 문자,이미지를 추가할수 있습니다.
curPageLinkClassName [string]
- 현재페이지 번호에 적용할 스타일 시트
firstPageText [string]
lastPageText [string]
- 맨처음,맨끝 페이지 표시할때 사용할 문자열
extraVars [array]
- 페이징 링크에 추가할 변수들 넣을수 있습니다.
머 대충 이정도구요.
나머지 메소드들도 간단히 아는거만 ^^;
Pager::getCurrentPageID() -- 현재페이지 번호리턴
Pager::getLinks() -- 생성된 링크를 배열로 리턴
Pager::getNextPageID() -- 다음페이지 번호 리턴
Pager::getOffsetByPageId() -- 페이지에 해당하는 limit 리턴
Pager::getPageData() -- itemData에 전체 내용을 배열로 넣었을때 페이지에 해당하는 배열내용을 가져울수 있습니다.
Pager::getPreviousPageID() -- 이전 페이지 번호
Pager::getperpageselectbox ([integer $start = 5 [, integer $end = 30 [, integer $step = 5 [, boolean $showAllData = false [, string $optionText = '%d']]]]]) -- 페이지 바로가기 selectbox html 을 리턴합니다.
대충 이정도구요.
아쉬운 점이라면 이전10개 다음10개 이기능이 없더군요.
페이징관련 소스를 찾고 있으시거나 공부해보실 분이라면
한번 봐두는 것도 좋을듯 하네요.
http://pear.php.net/manual/en/package.html.pager.php
2007. 6. 29. 15:36
문자열 자르기 함수 v1.0
2007. 6. 29. 15:36 in 자작소스/PHP
<?php //문자열 자르기 함수(글자수 기준) function cutstr($string,$num,$tail=""){ if(strlen($string)<$num) return $string; for($i=0;$i<$num;$i++) if(ord($string[$i])>127) $i++; return substr($string,0,$i).$tail; } //문자열 자르기 함수(글자 길이 기준) function cutstr($string,$num,$tail=""){ if(strlen($string)<$num) return $string; while(ord($string[$num])>127) $num--; return substr($string,0,$num).$tail; } ?>
2007. 6. 29. 15:34
파일쓰기 함수 v1.0
2007. 6. 29. 15:34 in 자작소스/PHP
function writeText($filename,$str,$mode='a+') {
$fp=fopen($filename,$mode);
if($fp) {
fwrite($fp,$str);
fclose($fp);
chmod($filename,0707);
}
}
writeText('../test.txt','테스트입니다.','w+');
2007. 6. 29. 15:33
파일업로드 함수 v1.0
2007. 6. 29. 15:33 in 자작소스/PHP
<?php function uploadFile($dir,$upfile="upfile") { if($_FILES[$upfile]['size'] > 2000000) alertPage("업로드는 파일크기 2메가 바이트 이하만 할수 있습니다.","-1"); $fname = strtolower($_FILES[$upfile]['name']); if(strpos($fname,".php") || strpos($fname,".htm")) alertPage("파일명에는 .php, .htm, .html 과 같은 단어가 들어갈수 없습니다.\\n\\n변경후 다시 업로드 해주세요.","-1"); $tmp_nm = explode(".",$fname); $ext = $tmp_nm[(count($tmp_nm)-1)]; if(empty($ext)) alertPage("확장자가 없습니다.","-1"); $filename = $upfile."_".time().".".$ext; if(!move_uploaded_file($_FILES[$upfile]['tmp_name'],$dir.$filename)) alertPage("파일복사 실패\\n\\n다시 시도해주세요.","-1"); return $filename; } ?>
<input type="file" name="upfile">
↓
$filename = uploadFile('경로','upfile');
2007. 6. 29. 15:32
빈 값 체크 함수 v1.0
2007. 6. 29. 15:32 in 자작소스/PHP
<?php function checkVariable() { $var_cnt = func_num_args(); $var_val = func_get_args(); if(in_array('',$var_val)) alertPage('입력값이 잘못되었습니다.\\n\\n다시확인해주세요.'); } //example checkVariable($_GET["val"],$_POST["val1"]); ?>
2007. 6. 29. 15:26
페이지 이동 함수 v1.0
2007. 6. 29. 15:26 in 자작소스/PHP
<?php // 경고창 후 백이동 function alertPage($msg,$step='-1'){ exit('<script language="javascript" type="text/javascript">alert("'.$msg.'");'.($step != null ? 'history.go('.$step.');':'').'</script>'); } // 경고창 후 창닫기 function closePopUp($msg=null) { exit('<script language="javascript" type="text/javascript">'.($msg != null ? 'alert("'.$msg.'");' : '').'top.close();</script>'); } // 경고창 후 페이지 이동 function movePage($url,$msg=null){ exit('<script language="javascript" type="text/javascript">'.($msg != null ? 'alert("'.$msg.'");' : '').'self.location.replace("'.$url.'");</script>'); } //경고창 후 페이지 Replace(history 않남게) function replacePage($url,$msg=null) { exit('<script language="javascript" type="text/javascript">'.($msg != null ? 'alert("'.$msg.'");' : '').'self.location.replace("'.$url.'");</script>'); } ?>
2007. 6. 29. 15:23
입력된 시간을 5분 단위로 끈어서 입력
2007. 6. 29. 15:23 in 자작소스/PHP
입력값이 "2006/12/31/23/56" 이라면 앞의 모든 값들이 시간 규칙에 맞게 +1 이 되어야
하기때문에 따로따로 나눠서 계산을 하면 상당히 구문도 길어지고 복잡해지니까
타임스탬프로 계산하는게 좋을꺼 같구요.
제가 생각한 방법은 이렇습니다.
분의 값을 5 에서 5로 나눈 나머지 값을 빼주면 5의 배수값중에 몇분이 모자라는지 나오겠죠.
분의 값이 7 분일경우 결과값은 3이 되겠져. 5 -(7%5) = 3분
이 값을 타임스탬프로를 생성할때 더해주면 5로 딱 떨어지는 값이 나올꺼구요.
그후에 date() 함수로 입맛에 맞게 형식을 만들면 되겠네요
하기때문에 따로따로 나눠서 계산을 하면 상당히 구문도 길어지고 복잡해지니까
타임스탬프로 계산하는게 좋을꺼 같구요.
제가 생각한 방법은 이렇습니다.
<?php $str = "2006/12/31/23/56"; $tmp = explode("/",$str); $min = ($tmp[4]%5>0)? 5 - ($tmp[4]%5) : 0 ; $time = mktime($tmp[3],$tmp[4]+$min,0,$tmp[1],$tmp[2],$tmp[0]); echo date("Y/m/d/H/i",$time); ?>
분의 값을 5 에서 5로 나눈 나머지 값을 빼주면 5의 배수값중에 몇분이 모자라는지 나오겠죠.
분의 값이 7 분일경우 결과값은 3이 되겠져. 5 -(7%5) = 3분
이 값을 타임스탬프로를 생성할때 더해주면 5로 딱 떨어지는 값이 나올꺼구요.
그후에 date() 함수로 입맛에 맞게 형식을 만들면 되겠네요