글 작성 배경:갤러리 화면 구성 중 이미지 저장하는 부분이 필요하게 됨

알아두어야 할 내용:$_FILES[][]
 - HTML 폼에서 <input type="file" id="userfile" .....>를 사용한 파일에 대한 정보를 가지고 있음
 - register_globals(php.ini 파일에 들어있는 변수값)가 off일때 꼭 사용해야 함
 - $_FILES['userfile']['tmp_name'] - 웹 서버에 임시로 저장된 파일의 위치.
 $_FILES['userfile']['name'] - 사용자 시스템에 있을 때의 파일 이름.
 $_FILES['userfile']['size'] - 파일의 바이트 크기.
 $_FILES['userfile']['type'] - 파일의 MIME 타입을 가리킴. (예:text/plain이나 image/gif 등)
 $_FILES['userfile']['error'] - 파일 업로드할 때 일어난 오류 코드를 알려줌



예제
input.php(입력폼)
---------------------------------------------------------------------------------------
<form method="post" enctype="multipart/form-data" action="save.php">
........
<div id="pimage"><p>이미지:<input type="file" name="uimg" id="textfield" />(이미지사이즈 : 168 X 115)</div>
.........
</form>
---------------------------------------------------------------------------------------

save.php(저장폼)
---------------------------------------------------------------------------------------
<?php
 $img_dir = $_SERVER['DOCUMENT_ROOT']."/저장할디렉토리명";           //저장 디렉토리
 $img_tmp = $_FILES['uimg']['tmp_name'];             //임시 파일명
 $img_type = $_FILES['uimg']['type'];             //저장가능 이미지 타입
 $img_name = $_FILES['uimg']['name'];             //파일명(ex : xxxx.jpg)

 $filename = explode(".",$img_name);              //파일명 및 확장자를 분리한 배열
 $extension = strtoupper($filename[sizeof($filename)-1]);        //확장자 추출
//타임 및 난수를 이용해서 기존 파일명 대신 사용할려고 함
 srand((double)microtime() * 1000000);             //난수만들기(seed 초기화)
 $random = sprintf('%03d',rand(1,999));             //난수만들기
 $up_filename = time()."_".$random.".".strtolower($extension);  //DB저장 파일명       
 $save_name = $img_dir."/".$up_filename;             //copy시 전체경로 및 파일명

 //파일 확장자로 올릴 수 있는 파일 체크함
 if($extension == "JPG" || $extension == "GIF") {
 } else {
  echo("
   <script>
   window.alert('지원 가능하지 않는 파일입니다. \\n이미지를 입력하여 주세요.');
   history.go(-1);
   </script>
  ");
  exit;
 }

 if(copy($img_tmp, $save_name)) {     //파일 업로드
  unlink($img_tmp);        //임시파일삭제
 }
 else {
  unlink($img_tmp);
  echo("
    <script>
    window.alert('파일 저장시 오류가 발생하였습니다.\\n감사합니다.');
    history.go(-1);
    </script>
   ");
  exit;
 }
.....
DB저장부분 삽입
.....
?>
---------------------------------------------------------------------------------------

이상으로 간단한 예제를 적습니다.

공부시에 많은 도움되면 좋겠습니다.


개발중에 가장 유용하게 쓰이는 시간 관련 함수를 정리해 보았습니다.

우선 간단한 예제인데요..개발중에 더 유용한 정보가 올리면 덧붙여서 올리겠습니다.

오늘도 즐거운 하루 되십시오.

1.time함수
  int time(void)
  설명 : 현재 시간을 반환한다.
  반환값 : timestamp로 반환한다.

2. strtotime함수
  int strtotime ( string $time [, int $now = time() ] )
  설명 : string값을 통해 timestamp값으로 반환한다.
  인수 :
  time(date 및 time 포맷)
  now(날짜 계산을 위해 기본적으로 사용되어지는 timestamp)
  반환값 : timestamp로 반환한다.

3. date함수
  string date ( string $format [, int $timestamp ] )
  설명 : 정수형으로 주어지는 timestamp나, timestamp가 주어지지 않았을 경우에는 현재 로컬 시간을 사용하여, 주어진 포맷 문자열에 따라 형식화한 문자열을 반환합니다. 즉 timestamp는 선택적이고, 기본값은 time()의 값입니다.
  인자 :
  format(출력하는 날짜 string의 형식) - 자주 쓰이는 format 정리(매뉴얼 참조)
     d -> 일, 앞에 0이 붙는 2 숫자(01에서 31)
     D -> 요일 글자 표현, 3문자(Mon에서 Sun)
     j -> 앞에 0이 붙지 않는 일(1에서 31)
     l -> 요일의 완전한 글자 표현(Sunday에서 Saturday)
     N -> 요일의 ISO-8601 숫자 표현(1(월요일)에서 7(일요일))
     w -> 요일 숫자 표현(0(일요일)에서 6(토요일))
     W -> ISO-8601 주차, 주는 월요이에 시작(42(그 해의 42번째 주))
     F -> January나 March 같은 월의 완전한 글자 표현(Januray에서 December)
     m -> 0이 붙는 월 숫자 표현(01에서 12)
     M -> 월의 축약 글자 표현, 3문자(Jan에서 Dec)
     n -> 0이 붙지 않는 월 숫자 표현(1에서 12)
     t -> 주어진 월의 일 수(28에서 31)
     L -> 윤년 여부(윤년엔 1, 그 외엔 0)
     Y -> 연도의 완전한 숫자 표현, 4 숫자(1999나 2012)
     y -> 연도의 두 숫자 표현(99나 12)
     a -> 오전과 오후의 소문자(am 또는 pm)
     A -> 오전과 오후의 대문자(AM 또는 PM)
     g -> 0이 붙지 않는 12시간 형식 시(1에서 12)
     G -> 0이 붙지 않는 24시간 형식 시(1에서 24)
     h -> 0이 붙는 12시간 형식 시(01에서 12)
     H -> 0이 붙는 24시간 형식 시(00에서 24)
     i -> 0이 붙는 분(00에서 59)
     s -> 초, 0이 붙음(00에서 59)
  timestamp(선택적인 timestamp 인수는 timestamp가 주어지지 않았을 경우, 현재 로컬 시간을 기본값으로 가지는 integer 유닉스 타임스탬프입니다. 즉, 기본값은 time() 값입니다.)

4. mktime함수
  int mktime ([ int $hour = date("H") [, int $minute = date("i") [, int $second = date("s") [, int $month = date("n") [, int $day = date("j") [, int $year = date("Y") [, int $is_dst = -1 ]]]]]]] )
  설명 : timestamp형태로 만들어준다.
  인자 :
  hour : 시간
  minute : 분
  second : 초
  month : 월
  day : 일
  year : 년도



예시1)날짜 표출

<?php
$nextWeek = time() + (7 * 24 * 60 * 60); // 7 days; 24 hours; 60 mins; 60secs (현재시간에 7일에 해당하는 시간을 더한다)
echo 'Now:       '. date('Y-m-d') ."\n";
echo 'Next Week: '. date('Y-m-d', $nextWeek) ."\n";
// or using strtotime():
echo 'Next Week: '. date('Y-m-d', strtotime('+1 week')) ."\n";
?>

결과값 :
Now:        2012-02-06
Next Week : 2012-02-13
Next Week : 2012-02-13

 

예시2)날짜 표출

<?php
$recentdate= mktime(0,0,0,2,6,2012); //오늘날짜

$year=date('Y',$recentdate);
$month=date('m',$recentdate);
$day=date('d',$recentdate);

echo 'Now:       '.$year."월 ".$month."일 ".$day."일"."\n";
?>

결과값:
Now:        2012-02-06

 

예시3)strtotime 함수 사용

<?php
echo 'Now:       '.date('Y-m-d', strtotime("now"))."\n";
echo '날짜:      '.date('Y-m-d', strtotime("10 September 2000"))."\n";
echo '날짜:      '.date('Y-m-d', strtotime("+1 day"))."\n";
echo '날짜:      '.date('Y-m-d', strtotime("+1 week"))."\n";
echo '날짜:      '.date('Y-m-d', strtotime("+1 week 2 days"))."\n";
echo '날짜:      '.date('Y-m-d', strtotime("next Thursday"))."\n";
echo '날짜:      '.date('Y-m-d', strtotime("last Monday"))."\n";
?>

결과값
Now:        2012-02-06
날짜:       2000-09-10
날짜:       2012-02-17
날짜:       2012-02-13
날짜:       2012-02-15
날짜:       2012-02-16
날짜:       2012-01-30
 

러닝 PHP : PHP 입문에서 프레임워크를 활용한 실전 프로그래밍까지(PHP 7 기반)

COUPANG

www.coupang.com

 

참 오랫만에 글을 올리는 것 같습니다..

제가 좀 회사에 적응한다고 나름 바뻐서 이렇게 주말에 올리게 되었습니다..

오늘은 php를 개발한다면 그래도 mysql에 대한 함수를 알아야 할 것 같아서 정리해 보았습니다.

역시 PHP 매뉴얼을 참조해서 내용을 적어보았습니다. 많은 도움이 되었으면 합니다.

1. resource mysql_connect ([ string $server [, string $username [, string $password [, bool $new_link [, int $client_flags ]]]]] )
설명 : MySQL 서버에 접속을 생성하거나 기존 접속을 재사용한다.
인수 :
server(MySQL 서버명을 입력하며, 포트번호가 포함될 수 있다. 예) "hostname:port" 또는, 로컬호스트를 위해 로컬 소켓 경로가 될 수도 있다. 예) ":/path/to/socket" , PHP 지시어 mysql.default_host를 지정하지 않았다면(기본값), 'localhost:3306'입니다. SQL 안전 모드에서는, 이 인수를 무시하고 항상 'localhost:3306' 값을 사용합니다.)
username(사용자명. 기본값은 mysql.default_user로 지정합니다. SQL 안전 모드에서는, 이 인수를 무시하고 사용중인 서버 프로세스를 소유하는 사용자 이름을 사용합니다.)
password(비밀번호. 기본값은 mysql.default_password로 지정합니다. SQL 안전 모드에서는, 이 인수를 무시하고 빈 비밀번호를 사용합니다.)
new_link(동일한 인수로 mysql_connect()을 다시 호출하면, 새로운 link가 생성되는 것이 아니라, 이미 생성된 link 식별자 값을 돌려받게 된다. 단, new_link 로 mysql_connect()를 호출하면 동일한 인수로 mysql_connect()를 이미 호출하였다 하더라도 항상 새로운 접속을 생성한다. SQL 안전 모드에서는, 이 인수를 무시합니다.)
client_flags(client_flags 인수는 다음 상수들을 조합하여 사용할 수 있습니다: 128 (LOAD DATA LOCAL 핸들링 활성화), MYSQL_CLIENT_SSL, MYSQL_CLIENT_COMPRESS, MYSQL_CLIENT_IGNORE_SPACE, MYSQL_CLIENT_INTERACTIVE. 자세한 정보는 예약 상수를 읽어보십시오. SQL 안전 모드에서는, 이 인수를 무시합니다.)
반환값 : 접속 성공시 MySQL link 식별자를 반환하고, 실패시에는 FALSE를 반환한다.

2. bool mysql_select_db ( string $database_name [, resource $link_identifier ] )
설명 : 접속 지시자와 연관된 서버에서 현재 활성화할 데이터베이스를 선택한다. 모든 수반되는 mysql_query() 호출은 활성 데이터베이스에서 처리될 것이다. 
인수 :
database_name(선택할 데이터베이스의 이름.)
link_identifier(MySQL 연결. 지정하지 않으면 mysql_connect()로 연 마지막 연결을 사용합니다. 연결이 없으면, 인수 없이 mysql_connect()를 호출하여 연결을 만듭니다. 연결이 성립되지 않으면 E_WARNING 등급의 오류를 생성합니다.)
반환값 : 성공할 경우 TRUE를, 실패할 경우 FALSE를 반환합니다.

3. resource mysql_query ( string $query [, resource $link_identifier ] )
설명 : mysql_query()는 link_identifier 로 지정한 데이터베이스 서버에 하나의 질의를 전송합니다. (다중 질의는 지원하지 않습니다)
인수 :
query(SQL 질의 -> 질의 문자열은 세미콜론으로 끝나지 않아야 합니다.)
link_identifier(MySQL 연결. 지정하지 않으면 mysql_connect()로 연 마지막 연결을 사용합니다. 연결이 없으면, 인수 없이 mysql_connect()를 호출하여 연결을 만듭니다. 연결이 성립되지 않으면 E_WARNING 등급의 오류를 생성합니다.)
반환값 : mysql_query()는 SELECT, SHOW, DESCRIBE, EXPLAIN, 결과셋을 반환하는 기타 구문에서 성공시 resource를, 오류시 FALSE를 반환합니다. mysql_query()는 다른 형식의 SQL 구문, INSERT, UPDATE, DELETE, DROP 등에서 성공하면 TRUE를, 실패하면 FALSE를 반환합니다. 반환되는 결과 리소스는 mysql_fetch_array()와 같은 결과 테이블을 다루는 함수들에 전달하여 데이터에 접근할 수 있다. SELECT 구문으로 부터 얼마나 많은 행이 있는지 알기 위해서는 mysql_num_rows()를, DELETE, INSERT, REPLACE, UPDATE 구문으로 변경된 행의 개수를 알기 위해서는 mysql_affected_rows()를 사용한다. 질의에 의해 참조되는 테이블에 접근을 허용되지 않은 사용자에 의해 mysql_query()가 실패하면 FALSE를 반환한다.

4. array mysql_fetch_array ( resource $result [, int $result_type ] )
설명 : 인출된 행을 배열로 반환하고, 앞으로 내부 데이터 포인터를 이동한다.
인수 :
result(mysql_query() 호출을 통한 결과 resource.)
result_type(인출될 배열의 형태. 배열의 형태는 다음과 같은 상수가 올 수 있다: MYSQL_ASSOC, MYSQL_NUM, MYSQL_BOTH. 기본값은 MYSQL_BOTH이다.)
반환값 : 인출된 문자열의 배열을 반환하거나 더 이상 인출할 행이 없을 경우에는 FALSE를 반환한다. 인출되는 배열은 result_type 에 따라 결정이 된다. 기본값인 MYSQL_BOTH는 연관 색인과 숫자형 색인 모두 반환할 것이다. MYSQL_ASSOC를 사용하면, mysql_fetch_assoc()처럼 연관된 인덱스 배열로 반환하고, MYSQL_NUM를 사용하면, mysql_fetch_row()처럼 숫자형 인덱스 배열로 반환한다. 동일한 이름을 포함하는 둘 또는 그 이상의 컬럼들은 마지막 컬럼이 우선권을 가질 것이다. 동일한 이름의 다른 컬럼에 접근하기 위해서는 숫자 색인 또는 별명(alias) 컬럼명을 사용하면 된다. 단, 별명 컬럼들은 원래의 컬럼명으로 데이터를 접근할 수 없다.

5. string mysql_result ( resource $result , int $row [, mixed $field ] )
설명 : MySQL 결과 집합으로부터 하나의 셀에 있는 데이터를 반환한다. 거대한 결과 집합으로 작업할 때, 행 전체를 인출하는 함수 중 하나를 사용할 것이다. 이들 함수는 하나의 함수 호출로 다중 셀의 데이터를 반환할 수 있어서 mysql_result()보다 더 빠르다. 또한, 필드 인수로 숫자 오프셋을 사용하는 것이 필드명 또는 테이블명.필드명 인수를 사용하는 것보다 더 빠르다.
인수 :
result (mysql_query() 호출을 통한 결과 resource.)
row(검색된 결과에서 행번호. 행번호는 0부터 시작한다.)
field(검색을 위한 필드 오프셋 또는 이름. The name or offset of the field being retrieved. 필드 오프셋, 필드명 또는 테이블명.필드명(tablename.fieldname)으로 설정이 가능하다. 컬럼 이름이 별명(alias)이라면('select foo as bar from...'), 컬럼명 대신 별명을 사용한다. 정의하지 않으면 첫번째 필드를 검색한다.)
반환값 : 성공하면 MySQL 결과 집합으로부터 하나의 셀의 데이터를, 실패하면 FALSE를 반환한다

6. bool mysql_close ([ resource $link_identifier ] )
설명 : mysql_close()는 link_identifier 와 연관된 MySQL서버의 비영속적 접속을 종료한다. link_identifier 가 기술되지 않으면 최근 접속된 연결을 사용한다. mysql_close()는 비영구적으로 열려진 링크에서는 일반적으로 스크립트 실행 마지막 부분에서 자동으로 종료되므로 사용할 필요가 없다. resource 해제하기.
인수 :
link_identifier(MySQL 연결. 지정하지 않으면 mysql_connect()로 연 마지막 연결을 사용합니다. 연결이 없으면, 인수 없이 mysql_connect()를 호출하여 연결을 만듭니다. 연결이 성립되지 않으면 E_WARNING 등급의 오류를 생성합니다.)
반환값 : 성공할 경우 TRUE를, 실패할 경우 FALSE를 반환합니다.



예시) 간단하게 함수를 만들어서 사용해 보십시오.
class화 사용
class db_connect {
function db_connect($host,$user,$pass,$db) {            
        $connect=@mysql_connect("$host","$user","$pass");
        if(!$connect) {
           //오류처리
            exit;
        }
        else {
            $status=mysql_select_db($db, $connect);
            if(!$status) {
                //오류처리
                exit;
            }
        }
    }

    function query_func($query,$num) {
         switch($num) {
            case (1) : $query=mysql_query($query,$connect);
            case (2) : $query=mysql_num_rows($query); break;
            case (3) : $query=mysql_fetch_array($query); break;
            case (4) : $query=@mysql_result($query,0); break;
            case (5) : $query=mysql_fetch_row($query); break;
            case (6) : $query=mysql_affected_rows($connect); break;
            case (7) : $query=mysql_fetch_assoc($query); break;
        }
        return $query;
    }

    function close() {
        mysql_close($connect);
        return;
    }
 }

사용방법
$DBCON=new db_connect($HOST,$USER,$PWD,$DB);
$rs=$DBCON->query_func($QUERY,1);
$count=$DBCON->query_func($rs,2); //쿼리의 결과행의 갯수를 반환함

while($data=$DBCON->query_func($rs,4)){ //쿼리의 결과값을 배열에 저장함
      //가져온 데이터로 표출구현함
}

지효가 놀자고 해서 이제 글을 마칠까 합니다. 많은 도움되면 좋겠습니다.

개발 중에 필요할 것 같아 사이트를 정리할려고 합니다.

많은 도움이 되었으면 합니다. 계속해서 추가적으로 올립니다.

[apach, php, mysql]
APM사이트 : http://www.apmsetup.com
apache사이트 : http://httpd.apache.org
php사이트 : http://kr.php.net / http://windows.php.net/
mysql사이트 : http://www.mysql.com
phpAdmin사이트 : http://www.phpmyadmin.net
php매뉴얼 : http://docs.php.net/manual/kr/funcref.php
jQuery : http://jquery.com/
JSON : http://json.org/json-ko.html
Javascript소스를 PHP로 : http://phpjs.org

[프레임워크]
CodeIgniter 한국사용자포럼 : http://www.codeigniter-kr.org
CodeIgniter 영문싸이트 : http://www.codeigniter.com


찬 지기입니다.

개발을 4년 정도 쉰 후로 다시 개발을 할려고 보니 많이 삽질하고 있습니다.

그러나 전보다 웹 상에서 자료들이 많아 좋기도 하지만 제가 딱 원하는 자료를 찾는데 좀 시간이 걸린다는 단점이 있네요..ㅎㅎㅎ 그래도 정말 세상이 좋아진 것 같습니다.

이번글은 개발중에 타입을 체크하는 부분을 정리해 보겠습니다.

PHP 매뉴얼 참조

PHP 지원 버전 : (PHP 4 >= 4.0.4, PHP 5)

주의사항 : 인자값은 string값이여야 함

1. ctype_alnum(string) : [A-Za-z] or 숫자인지 확인
   ex)
'AbCd1zyZ9' -> true
        
'foo!#$bar' -> false

2. ctype_alpha(string) : [A-Za-z]인지 확인
   ex) 'KjgWZC' -> true
        
'arf12' -> false

3. ctype_digit(string) : 숫자인지 확인
   ex) '1820.20' -> false
        '10002' -> true
       
'wsl!12'
-> false

  ex2)
<?php

$numeric_string '42';
$integer        42;

ctype_digit($numeric_string);    // true
ctype_digit($integer);               // false

is_numeric($numeric_string);   // true
is_numeric($integer);             // true
?>


4. 참고
  • is_bool() - 변수가 논리형인지 확인
  • is_null() - 변수가 NULL인지 확인합니다
  • is_float() - 변수의 자료형이 소수인지 확인합니다
  • is_int() - 변수의 자료형이 정수인지 확인합니다
  • is_string() - 변수의 자료형이 문자열인지 확인합니다
  • is_object() - 변수가 객체인지 확인합니다
  • is_array() - 변수가 배열인지 확인

    다른 곳에서도 더 좋은 자료들이 많이 있습니다.

    제가 나름대로 모아서 올립니다.

    많은 도움 되었으면 합니다.


  • + Recent posts