코드이그나이터2014. 5. 28. 11:26

( /application/system/helper/text_helper.php 파일에 추가 )
// UTF-8 한글자르기 함수
function hc( $str, $n = 50, $end_char = ' ...' )
{
    $CI =& get_instance();
    $charset = $CI->config->item('charset');

    if ( mb_strlen( $str , $charset) < $n ) {
        return $str ;
    }

    $str = preg_replace( "/\s+/iu", ' ', str_replace( array( "\r\n", "\r", "\n" ), ' ', $str ) );

        if ( mb_strlen( $str , $charset) <= $n ) {
            return $str;
        }
        return mb_substr(trim($str), 0, $n ,$charset) . $end_char;
}



[controlloer]
$this->load->helper('text');
$str = '일이삼사오육칠팔구십';

[view]
hc($str, 5);

Posted by 다오나무
iOS2013. 12. 1. 16:01

일반적으로 cURL을 이용하여 HTTP 프로토콜 데이터를 POST 방식으로 보내는 PHP 함수는 다음과 같습니다.

  1. function https_post($uri$postdata)  
  2. {  
  3.     $ch = curl_init($uri);  
  4.     curl_setopt($ch, CURLOPT_POST, true);  
  5.     curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);  
  6.     $result = curl_exec($ch);  
  7.     curl_close($ch);  
  8.     return $result;  
  9. }  

하지만, 이 방식은 결과값이 전달 될 때 까지 블럭(block) 된다는 것이 문제입니다. 따라서 결과값이 불필요한 경우에는 요청을 보내고 잊어버리면 그만입니다. 아쉽게도 PHP의 cURL 라이브러리는 비동기 처리를 지원하지 않습니다. 따라서 직접 소켓을 오픈하여 요청을 보내야 합니다.

  1. function curl_request_async($url$params$type='POST')  
  2. {  
  3.     foreach ($params as $key => &$val)  
  4.     {  
  5.         if (is_array($val))  
  6.             $val = implode(','$val);  
  7.         $post_params[] = $key.'='.urlencode($val);  
  8.     }  
  9.     $post_string = implode('&'$post_params);  
  10.   
  11.     $parts=parse_url($url);  
  12.   
  13.     if ($parts['scheme'] == 'http')  
  14.     {  
  15.         $fp = fsockopen($parts['host'], isset($parts['port'])?$parts['port']:80, $errno$errstr, 30);  
  16.     }  
  17.     else if ($parts['scheme'] == 'https')  
  18.     {  
  19.         $fp = fsockopen("ssl://" . $parts['host'], isset($parts['port'])?$parts['port']:443, $errno$errstr, 30);  
  20.     }  
  21.   
  22.     // Data goes in the path for a GET request  
  23.     if('GET' == $type)  
  24.         $parts['path'] .= '?'.$post_string;  
  25.   
  26.     $out = "$type ".$parts['path']." HTTP/1.1\r\n";  
  27.     $out.= "Host: ".$parts['host']."\r\n";  
  28.     $out.= "Content-Type: application/x-www-form-urlencoded\r\n";  
  29.     $out.= "Content-Length: ".strlen($post_string)."\r\n";  
  30.     $out.= "Connection: Close\r\n\r\n";  
  31.     // Data goes in the request body for a POST request  
  32.     if ('POST' == $type && isset($post_string))  
  33.         $out.= $post_string;  
  34.   
  35.     fwrite($fp$out);  
  36.     fclose($fp);  
  37. }  

위 코드는 인터넷에 부유 중인 것을 HTTPS (HTTP Secure) 프로토콜도 지원하도록 수정 한 것입니다. 이 방법을 이용하면 전송 할 데이터를 소켓으로 방출 한 후에 곧바로 함수가 리턴됩니다. 즉, 데이터를 받기 위한 추가적인 처리를 프로세스가 감당 할 필요가 없다는 것을 의미합니다.

만약 빠른 응답 속도를 보장 받는 것이 최우선 과제라면 다음과 같이 프로세스를 백그라운드로 실행 하게 만들 수도 있겠습니다. 단, 아래 코드는 POSIX 계열에서만 사용 가능합니다.

  1. function curl_post_async($uri$params)  
  2. {  
  3.         $command = "curl ";  
  4.         foreach ($params as $key => &$val)  
  5.                 $command .= "-F '$key=$val' ";  
  6.         $command .= "$uri -s > /dev/null 2>&1 &";  
  7.         passthru($command);  
  8. }  

이 방식은 지체 없이 curl 프로세스를 백그라운드로 구동하기 때문에 소요 시간이 거의 없다고 볼 수 있습니다.

'iOS' 카테고리의 다른 글

apple push notification 쉽고 간단하게 구축하는 easy apns  (0) 2013.07.10
셀 높이 조절  (0) 2013.06.25
앱 정보 가져오기 (앱이름, 버전)  (0) 2013.06.19
스토리보드 커스텀 셀 (공개)  (0) 2013.06.12
유니코드 출력  (0) 2013.02.01
Posted by 다오나무
iOS2013. 7. 10. 15:08

PHP로 혹시 apple push notification service를 구축하려고 하시나요?

아마도 여러분께 이 포스팅이 유용할지도 모르겠네요.



최근 아이폰 어플리케이션을 런칭하면서 php로

apple push notification service를 구축하는 경험을 했습니다.


APNS(Apple Push Notification Service)는 애플 푸시 노티피케이션 서비스입니다.




아이폰에서 흔히 경험할 수 있는

어플리케이션에서 마치 문자메시지처럼 새로운 소식이나 메시지를 알려주는 서비스입니다.



대략적인 작동방식에 대한 설명을 드리자면

애플의 푸시 서버로 특정 애플 기기에 대한 token과 메시지 내용을 전달하면

애플의 푸시서버는 이를 받아 해당 token에 해당하는 기기로

푸시 메시지를 쏩니다.




APNS에 대한 애플의 문서를 번역한 자료입니다. 구축전에 한번 가볍게 읽어보시면 좋을것 같습니다.




자 그럼 이제 PHP버전의 APNS 라이브러리를 소개합니다.



1. Esay APNS




2. APNS-PHP




3. PHP-APNS





PHP의 APNS 라이브러리는 위의 3가지로 크게 나뉩니다.

그중에서도 제가 가장 강추하는 라이브러리는 1번에 소개된 EASY APNS 입니다.


추천하는 이유는 구축하기 가장 쉽고, 메뉴얼도 가장 깔끔합니다.


EASY APNS의 설치는 크게 4단계로 구분됩니다.


1. PHP 소스코드 업로드하기

2. mysql 테이블 생성하기

3. 노티피케이션 전송을 위한 cron job 설정하기

4. 아이폰 어플리케이션 소스코드에 APNS 적용하기



각각의 설치 방법은 웹사이트에 방문하시면 아주 친절하게 소개가 되어있습니다.

EASY APNS는 개발버전과 배포버전을 구분하여 push 보내기가 가능하며

사용자가 해당 어플리케이션을 삭제하였는지 feedback에 대한 처리도 하기 때문에

매우 유용합니다.


다만 이것을 구현하실 여러분들이 조금 더 수고해주셔야 하는부분은


EASY APNS의 매뉴얼대로 구축을 마치고 테스트를 하시면

EASY APNS는 사용자의 push 요청을 "큐"로 쌓아두고 있다가

cron job이 실행될때 이 쌓였던 push에 대한 요청들을 한꺼번에 처리합니다.


즉 cron job 설정을 한시간으로 해놓으면 push 가 매시각 한번씩 보내지는 것이고

1일단위로 설정해놓으셨다면 push가 일단위로 보내집니다.


그래서 혹시 즉시성을 요구하는 푸시 서비스를 구현하실때는

APNS 객체의 _pushMessage 메소드를 직접 호출하셔야 합니다.

이는 아마 소스코드 보시면 왠만한 PHP개발자 분들이라면 알수 있기에 자세한 설명은 넘어가겠습니다.



개발자분들의 칼퇴를 기원하며....


출처 : http://trend21c.tistory.com/1049

'iOS' 카테고리의 다른 글

PHP - cURL 비동기 통신  (0) 2013.12.01
셀 높이 조절  (0) 2013.06.25
앱 정보 가져오기 (앱이름, 버전)  (0) 2013.06.19
스토리보드 커스텀 셀 (공개)  (0) 2013.06.12
유니코드 출력  (0) 2013.02.01
Posted by 다오나무
php2012. 10. 14. 20:42

FTP함수의  종류와  사용법  

(1)  ftp_connect  :  FTP서버에  연결한다.  
-----------------------------------------------  
int  ftp_connect  (string  host  [,  int  port])  
$ftp=ftp_connect("서버주소  또는  도메인명",21);  
-----------------------------------------------  

(2)  ftp_login  :  계정과  패스워드로  서버에  접근한다.  
-----------------------------------------------  
int  ftp_login  (int  ftp_stream,  string  username,  string  password)  
$ftplogin  =  ftp_login($ftp,  "$ftp_user_name",  "$ftp_user_pass");  
-----------------------------------------------  

(3)  ftp_pwd  :  현재  디렉토리  값을  리턴한다.  
-----------------------------------------------  
int  ftp_pwd  (int  ftp_stream)  
$ftp_dir  =  $ftp_pwd($ftp);  
-----------------------------------------------  

(4)  ftp_cdup  :  가장  상위  디렉토리로  이동  
-----------------------------------------------  
int  ftp_cdup  (int  ftp_stream)  
$ftp_dir  =  $ftp_cdup($ftp);  
-----------------------------------------------  

(5)  ftp_chdir  :  FTP  디렉토리의  변경  
-----------------------------------------------  
int  ftp_chdir  (int  ftp_stream,  string  directory)  
$chdir=ftp_chdir  ($ftp,  $ftp_dir);  
-----------------------------------------------  

(6)  ftp_mkdir  :  디렉토리를  만들고  만든  디렉토리명을  반환한다.  
-----------------------------------------------  
string  ftp_mkdir  (int  ftp_stream,  string  directory)  
$mkdir  =  ($ftp,"만들  디렉토리명");  
-----------------------------------------------  

(7)  ftp_rmdir  :  디렉토리를  삭제한다.  
-----------------------------------------------  
int  ftp_rmdir  (int  ftp_stream,  string  directory)  
$mkdir  =  ($ftp,"삭제할  디렉토리명");  
-----------------------------------------------  

(8)  ftp_nlist  :  디렉토리의  파일이름을  배열로  반환한다.  
-----------------------------------------------  
int  ftp_nlist  (int  ftp_stream,  string  directory)  
$contents  =  ftp_nlist(  $ftp,  "디렉토리명");  
-----------------------------------------------  

(9)  ftp_rawlist  :  디렉토리의  파일이름과  읽고  쓰고  실행할  권한을  파일  당  한  줄의  배열로  반환한다.  
-----------------------------------------------  
int  ftp_rawlist  (int  ftp_stream,  string  directory)  
$contents  =  ftp_nlist(  $ftp,  "디렉토리명");  
-----------------------------------------------  

(10)  ftp_systype  :  FTP서버의  타입을  리턴하는데  리눅스는  UNIX로  표시해준다.  
-----------------------------------------------  
int  ftp_systype  (int  ftp_stream)  
echo  ftp_systype($ftp);  
-----------------------------------------------  

(11)  ftp_get  :  FTP로부터  파일을  다운로드  받는다.  
-----------------------------------------------  
int  ftp_get  (int  ftp_stream,  string  local_file,  string  remote_file,  int  mode)  
$download  =  ftp_get($ftp,  "저장할  파일명",  "다운받을  파일명","FTP_ASCII  or  FTP_BINARY");  
-----------------------------------------------  

.pl  또는  .cgi  같은  Perl  CGI인  경우에는  FTP_ASCII로  다운  받고  다른  파일은  FTP_BINARY로  다운  받아야  한다.  

(12)  ftp_fget  :  FTP로부터  파일  포인터를  다운받는다.  
-----------------------------------------------  
int  ftp_fget  (int  ftp_stream,  int  fp,  string  remote_file,  int  mode)  
$download  =  ftp_fget($ftp,  "저장할  파일명",  "다운받을  파일명","FTP_ASCII  or  FTP_BINARY");  
-----------------------------------------------  

(13)  ftp_put  :  FTP서버에  파일을  업로드  한다.  
-----------------------------------------------  
int  ftp_put  (int  ftp_stream,  string  remote_file,  string  local_file,  int  mode)  
$upload  =  ftp_put($ftp,  "업로드할  파일명",  "업로드될  파일명","FTP_ASCII  or  FTP_BINARY");  
-----------------------------------------------  

(14)  ftp_fput  :  FTP서버에  파일  포인터를  업로드한다.  
-----------------------------------------------  
int  ftp_fput  (int  ftp_stream,  string  remote_file,  string  local_file,  int  mode)  
$upload  =  ftp_fput($ftp,  "업로드할  파일명",  "업로드될  파일명","FTP_ASCII  or  FTP_BINARY");  
-----------------------------------------------  

(15)  ftp_size  :  파일의  사이즈를  구한다.  
-----------------------------------------------  
int  ftp_size  (int  ftp_stream,  string  remote_file)  
$filesize  =  ftp_size(  $ftp,  $contents[$i]  );  
-----------------------------------------------  
ftp_nlist  나  ftp_rawlist에  의해  구한  파일명에  대한  배열값인  $contents[$i]에는  각  파일명과  속성이  저장되어지는데  이  파일명을  사이즈로  구하면  파일이면  사이즈가  리턴되고  디렉토리이면  -1이  리턴된다.  

(16)  ftp_mdtm  :  파일의  마지막  수정시간을  timestamp  값으로  리턴한다.  
-----------------------------------------------  
int  ftp_mdtm  (int  ftp_stream,  string  remote_file)  
$filemdth  =  ftp_size(  $ftp,  "파읾명");  
-----------------------------------------------  

(17)  ftp_rename  :  파일명을  변경한다.  
-----------------------------------------------  
int  ftp_rename  (int  ftp_stream,  string  from,  string  to)  
$rename  =  ftp_rename(  $ftp,  "바꿀  파일명",  "바뀐  후  파일명");  
-----------------------------------------------  

(18)  ftp_delete  :  해당  파일을  삭제한다.  
-----------------------------------------------  
int  ftp_delete  (int  ftp_stream,  string  path)  
$delfile  =  ftp_delete($ftp,  "지울  파일명");  
-----------------------------------------------  

(19)  ftp_quit  :  연결된  FTP의  접속을  끊는다.  
-----------------------------------------------  
int  ftp_quit  (int  ftp_stream)  
ftp_quit  ($ftp);  
-----------------------------------------------  

Posted by 다오나무
php2012. 10. 11. 17:44

우분투로 APM을 설치하면...php 설정중 오류가 발생하면 에러 내용이 출력되지 않는다.

php.ini 설정 중에 출력할 지 여부를 설정 할 수 있다.(우부투 보통 /etc/php5/apache2/php.ini)

display_errors = On

으로 해주면 에러가 출력된다.

혹시나 Notice가 같이 출력된다면,

error_reporting = E_ALL & ~E_NOTIC 

으로 설정해주면...에러 리포팅이 모든 오류(E_ALL) 와(&) NOTIC을 제외한(~E_NOTIC)으로 정해주면 된다.

php.ini 의 자세한 설정은 아래 사이트에서 ^^ 

http://www.php.net/manual/kr/errorfunc.configuration.php  


설정후!

아파치를 재시작 해주면 된다!

Posted by 다오나무
php2012. 9. 29. 02:52

업로드한 파일이나 이미 저장된 파일을 축소해서 썸네일을 생성하는 방법을 요약하면

1. 원본이미지를 불러온다

2. 새로이 생성될 이미지가 들어갈 집을 만든다

3. 만들어진 집에 원본이미지를 축소하여 붙여 넣는다

4. 저장한다.

예를들어 400*200 인 origin.gif 를 200*100 의 copy.gif 로 만드는 과정을 보자

// 원본 이미지 load

$path = "/images/origin.gif";

$o_img = imagecreatefromgif($path);

// 썸네일 이미지가 들어갈 집 만들기

$n_img = imagecreatetruecolor(200,100);

// 생성한 집에 원본이미지를 축소해서 넣기

imagecopyresampled($n_img,$o_img,0,0,0,0,200,100,400,200);

// 이미지 저장하기

$n_path = "/images/copy.gif";

imagegif($n_img, $n_path);

// 썸네일 생성

imagecopyresampled($n_img, $o_img, 0,0,$offsetX,$offsetY,$w,$h,$cropW,$cropH);

각각의 파라미터들은 썸네일이 될 이미지, 원본 이미지, x좌표 기준점, y좌표 기준점, x좌표, y좌표, 축소할 길이, 축소할 세로길이,

원본에서 잘라낼 가로길이, 원본에서 잘라낼 세로길이..

참 많다..

Posted by 다오나무
php2012. 9. 24. 07:39

http://codeigniter-kr.org


코드이그나이터 한국 포럼

Posted by 다오나무
php2012. 9. 10. 23:08

$name = '홍길동';
$filepath = '그림폴더/이름'. $name .'.gif';
if(file_exists($filepath)) {
echo "이미지 출력 html"; // 경로에 화일이 존재한다면
} else {
echo ""; // 공백처리
}

'php' 카테고리의 다른 글

php 썸네일 이미지 만들기  (0) 2012.09.29
코드이그나이터 한국 포럼  (0) 2012.09.24
페이징 처리  (0) 2012.07.31
[PHP] 정규표현식 - preg_replace, preg_match, str_replace  (0) 2012.07.26
사이트 긁어오기  (0) 2012.07.25
Posted by 다오나무
MYSQL2012. 7. 31. 23:21

mysql 디비에 등록되는 접속자로그 또는 시스템관련 로그는 디비에 쌓이게 되면 용량이 장난아니게 늘어난다.
일정기간이 지나면 도움도 안될뿐더러 용량만 차지하게 된다.
로그는 그때그때 보는게 최고..

mysql 자체적으로는 자동삭제는 불가능하며 php를 이용한 방법과 crontab에 등록해서 사용하는 방법이 있다.
쉘에서 실행하는 명령은 mysql -e "명령" 이렇게 사용한다.

30일이 지난자료 삭제

mysql -u아이디 -p비밀번호 디비명 -e "DELETE FROM  테이블명 WHERE 날짜필드명 < date_add(date_format( now() , '%Y-%m-%d'), interval -30 day)"


-e 옵션에서 mysql query 뒤에 세미콜론 ;는 사용안하며, 큰따옴표가 사용이 안되므로 쿼리명령어 안에는 작은 따옴표를 사용하면 된다.

-e 옵션과 내부적인 명령의 차이 - 따옴표가 변경된걸 확인할수 있다.
#mysql -u아이디 -p비밀번호 디비명 -e "select date_add(date_format( now() , '%Y-%m-%d'), interval -30 day)"

mysql>select date_add(date_format( now() , "%Y-%m-%d"), interval -30 day);


위 명령을 사용하여 크론탭에 등록해서 사용하면 된다.
한꺼번에 디비를 삭제하면 시스템이 다운될수도 있으니 조금씩 조금씩 삭제하는게 좋다.

Posted by 다오나무
php2012. 7. 31. 07:49

$page_line=20; // 페이지당 line 수
 $page_block=10; // 블록당 page 수

 
 
<?php
 // 페이징 처리 시작
  if (!$page) $page=1;
  $pages = ceil($count/$page_line);
  $first = 1;
  if ($count>0) $first = $page_line*($page-1);
  $page_last=$count-$first;
  if($page_last>$page_line) $page_last=$page_line;
  if($count>0) mysql_data_seek($result, $first);
  // 페이지 처리 끝
 
  for ($i=0;$i<$page_last;$i++){
   $rs = mysql_fetch_array($result);
  
 ?>
 
 
-------------------------------------------------------------------------
 
 
<?php
// 블록 처리 시작
$blocks = ceil($pages/$page_block); // 전체 블록수
$block = ceil($page/$page_block); // 현재 블록
$page_s = $page_block * ($block-1); // 현재 페이지
$page_e = $page_block * $block;  // 마지막 페이지
if ($blocks <= $block) $page_e = $pages;
// 블록 처리 끝
?>
<!-- 블록 테이블 시작 -->
<table width="800" border="0" cellpadding="0" cellspacing="0">
 <tr>
  <td height="30" class="cmfont" align="center">
<?php
if ($block > 1) {
$tmp = $page_s;
?> <BR><ahref='product.php?page=<?php echo $tmp;?>&sel1=<?php echo $sel1?>&sel2=<?php echo $sel2?>&sel3=<?php echo $sel3?>&sel4=<?php echo $sel4?>&text1=<?php echo $text1?>'><img src="images/i_prev.gif" align="absmiddle" border="0"></a>&nbsp;
<?php
}
for ($i=$page_s+1; $i<=$page_e;$i++) // 현재 블록의 페이지
{
 if ($page == $i) {
  echo "<font color=\"#FC0504\"><b>$i</b></font>&nbsp;";
 } else{
 echo"<ahref=\"product.php?page=$i&sel1=$sel1&sel2=$sel2&sel3=$sel3&sel4=$sel4&text1=$text1\"><font color=\"#7C7A77\">[$i]</font></a>&nbsp;";
 }
}
?>
<?php
if ($block < $blocks) // 다음 블록으로
{
 $tmp = $page_e+1;
?><BR><ahref='product.php?page=<?php echo $tmp;?>&sel1=<?php echo $sel1?>&sel2=<?php echo $sel2?>&sel3=<?php echo $sel3?>&sel4=<?php echo $sel4?>&text1=<?php echo $text1?>'><img src="images/i_next.gif" align="absmiddle" border="0"></a>&nbsp;
<?php
}
?>
  
  </td>
 </tr>
</table>
<!-- 블록 테이블 끝-->
Posted by 다오나무