웹상에서 바로 프로그래밍

http://codepad.org/


http://ideone.com/

나의 프로그래밍 스타일


나의 프로그래밍 스타일.......


컴퓨터 싸이언스를 시작했었던 때는........

- 레드불, 일렉트릭 뮤직, 그리고 기어스 오브 워 로 대표할수 있었다

- 한참 회사에서 일할때는 일렉/하우스/트랜스 뮤직과 AMP...... 앰프를 마시면서 귀에 일렉/하우스/트랜스 뮤직을 볼륨 이빠이 키워놓고 코딩을 하는게 제일 재미있었고 집중도 잘 되었다

- 지금은? 

다시 레드불을 마시면서, 고스트 오페라 음악을 듣는다.  

지금도 기술 면접에 대비해서 레드불을 마시면서 기본 C++ 프로그래밍을 다시 공부 재점검 하는 중이다. 

PHP file 시스템

Programming/PHP 2011. 6. 28. 01:51
http://essay79.tistory.com/29 에서 퍼왔습니다

파일 입출력 작업은 크게 3단계의 과정으로 처리된다.

 *** 파일의 3단계 입출력 작업***
    여는 단계 : 파일을 조작하기 전의 준비 단계로 파일 조작 방식,파일 존재 확인,메모리 공간을 확보하는 단계
    조작 단계 : 실제 파일을 읽거나 쓸 수 있는 조작 단계
    닫는 단계 : 파일 조작에 사용하였던 메모리 등의 자원을 반환하는 단계

(1). 파일을 열고 닫아주는 함수 : fopen() , fclose() 
 fopen 함수는 문서, 그림 등의 외부 파일을 열어주는 함수이고
 fclose 함수는 열린 파일을 닫아주는 함수이다.

$변수명 = fopen(파일명,파일모드,인크루드 경로) ===>열고싶은 파일의 경로와,파일모드 설정을인자로.(파일모드반드시 설정해야 한다. 파일 경로에 파일을 찾지 못하면 'false'값을 반환한다. 
$변수명 = fclose(fopen()함수로 설정한 $변수명)

fopen() 함수의 파일 모드
   r : 파일 읽기 전용
  w : 파일 쓰기 전용 (파일이 있으면 파일의 크기를 0으로 만들고, 없으면 새 파일을 만듦)
  a : 파일 쓰기 전용 (파일이 존재하면 그 파일의 끝에 덧붙여 쓰고, 없으면 새 파일을 만듦)
  r+ : 파일 읽고 쓰기 전용
 w+ : 파일 읽고 쓰기 전용 (파일이 존재하면 크기를 0으로 만들고, 없으면 새 파일을 만듦)
 a+ : 파일 읽고 쓰기 전용 (파일이 이미 존재하면 끝에 덧붙여 쓰고, 없으면 새 파일을 만듦)
   b : 바이너리 데이터로 설정(생략 가능)

fopen()함수 사용에 따른 경로명 설정
 $fp = fopen("c:/apm_setup/htdocs/test.txt","r")    :    windows의 경로 지정
 $fp = fopen("http://www.naver.com/","r")    :   http server의 경로 지정
 $fp = fopen("ftp://user:cpro3002@naver.com/","w")   :  ftp server의 경로 지정

============================================================================================================
<?
  echo "<B> *** fopen()함수로 파일 열고 fclose()함수로 닫기***</B> <hr>";
  $fp = fopen("test.dat","r");  //php파일과 같은 폴더에 있으면 경로명 생략.
  if($fp==null){
   echo "존재하지 않은 파일 !!";
  }else{
   echo "파일 열기 성공 !! "; 
      fclose($fp);   
  }
?>
========================================================================================================
(2). 파일의 존재 여부를 알려주는 함수 : file_exists() 함수
 ; 파일을 열고자 할 때 파일이 존재하지 않으면 에러가 발생하기 때문에 파일이 존재하는지를 먼저 검사한 다음에
열어야 한다. 파일이 존재하면 ' 1 '을  , 존재하지 않으면 ' 0 ' 의 값을 반환한다.

file_exists(파일 경로)
========================================================================================================
<?
 echo "<B>***파일의 존재 유무를 확인하는 file_exists()함수</B> <hr>";
 echo " 찾고자 하는 파일 : <b> sample.dat </b> <br>";
 echo "---------------------------------------------<br>";
 $a = "sample.dat";

 if(file_exists($a)){
  echo " O. 파일이 존재 확인완료!!";
 }else{
  echo " X. {$a} 존재하지 않는 파일!!";
 }
?>

설명 : 'test.php'파일과 찾고자 하는 'sample.dat' 파일이 같은 폴더에 존재하는지에 대한 출력 결과이다. 특정 폴더에 존재하는지의 유무를 확인하기 위해서는 반드시 특정 폴더의 경로명을 지정해야 한다.
========================================================================================================
(3). 파일의 크기를 알려주는 함수 : filesize() 함수  

파일의 크기를 byte 단위로 알려주는 함수이며, 영문은 1byte , 한글과 enter은 2byte로 계산된다.

<?
 echo "<B>*** filesize()함수로 불러온 파일의 크기</B><br>";
 echo "<b>sa.txt</b> 파일에 입력된 내용<br>";
 echo "--------------------------------------<br>";
 echo "안녕하세요..[엔터]<br>";
 echo "Hi~ <br>";
 echo "--------------------------------------<br>";
 $size = filesize("sa.txt");
 echo " >>> sa.txt 파일의 크기는 {$size}byte 입니다.";
?>
=========================================================================================================
(4).데이터를 읽고 쓰는 함수 : fread() 함수, fwrite() 함수

파일의 데이터를 읽을 때는 fread() 함수를 사용하고, 파일에 데이터를 기록할 때는 fwrite() 함수를 사용한다.
fread() 함수는 파일 포인터 위치에서 크기만큼 읽어서 문자열을 반환해 주고, 2진수 파일인 바이너리로 읽는다.
파일 포인터란 파일의 주소값을 의미하며, 파일 주소부터 크기만큼 읽어 온다.

fwrite() 함수는 파일을 기록하며, 파일 포인터 위치에 문자열을 기록하고 바이너리로 쓴다. length값이 주어지지
않았을 경우에는 주어지 문자열 길이만큼 기록하고, 실제 문자열보다 긴 문자열의 길이가 주어지면 문자열의
길이만큼만 기록한다.

 fread(파일포인터, 크기)
 fwrite(파일포인터, 내용)

<?
 echo "<B>***파일의 내용을 읽어와 다른 파일로 기록하는 함수 *** </B><hr>";
 $fn = "extest.txt";
 echo " 읽어올 파일 : <b> {$fn} </b><br>";
 if(file_exists($fn)){  //파일 존재 유무 확인
  $fp = fopen($fn,"r");  //파일이 존재하면 파일 열기
  echo "파일 열기 성공!!(파일에 들어있는 내용입니다..)<br><hr>";
 }else{
  echo "파일이 없습니다..<br>";
  exit;
 }
 $content = fread($fp,filesize($fn));
 $content = str_replace("\n","<br>",$content);
 echo $content;
 $fw = fopen("happy.txt","a");
 fwrite($fw,$content);
 fclose($fp);
 
 echo "<hr>";
 echo " >>> 윈도우 탐색기 창에서 새롭게 만들어진 ";
 echo " <b>\"happy.txt\"</b> 파일을 확인하세요!!<br>";
?>
==========================================================================================================
(5) . 디스크 공간을 확인하는 함수 : disk_total_space(), disk_free_space() 함수

disk_total_space("디스크명")   //디스크의 전체 공간
disk_free_space("디스크명") //디스크의 여유 공간

<?
 echo "<B>***디스크의 저장공간과 전체공간 byte를 반환하는 함수 ***</B><br>";
    echo " C 드라이브의 전체 용량 <br><br> ";
 $dsize = disk_total_space("c:/"); //전체 용량
 $gsize = ($dsize / 1024 / 1024 / 1024); // GB로 환산
 $by = number_format($dsize);
 $gb1 = number_format($gsize);   //세자리마다 콤마(소수점 없어짐)
 echo "...[ {$by} bytes ]<br>";  //byte 단위로 출력
 echo "...<b>[ {$gb1} GB ]</b><br><hr>";  //GB 단위로 출력

 echo " C 드라이브의 남은 용량 <br><br>";
 $dsize = disk_free_space("c:/");
 $gsize = ($dsize / 1024 / 1024 / 1024);
 $by = number_format($dsize);
 $gb2 = number_format($gsize);  //세자리마다 콤마(소수점 없어짐)
 echo "...[ {$by} byte ]<br>";
 echo "...<b>[ {$gb2} GB ] </b><hr>";
 $tot = ($gb2 / $gb1) * 100;  //남은 비율 계산(%);
 $total = number_format($tot);
 echo " 전체 <b>{$gb1}GB</b> 중 ";
    echo " <b>{$gb2}GB</b> 남음 <b>[{$total}%]</b><br>";
?>
===============================================================================================================
(6). 파일 정보를 검출하는 함수 : fgets(),  fputs(),  feof() 함수

fgets() 함수는 파일에서 크기만큼 데이터를 읽어오는 함수로 크기가 파일의 한행의 크기보다 크더라도 한 행씩 읽어들이고, fputs() 함수는 내용을 파일에 기록하는 함수이다. 또한 feof() 함수는 파일에서 파일의 끝을 검사하는 함수이다.

fgets(열고자 하는 파일명의 변수, 크기);
fputs(열고자 하는 파일명의 변수, 내용);
feop(파일 포인터);

<?
 echo "<B>***파일의 정보를 검출하는 함수***</B><hr>";
 $fn = "good.txt";
 if(file_exists($fn)){    //파일 존재 여부 
  $fp = fopen($fn,"r");  //파일 열기
 }else{
  echo "파일이 없습니다. 다시 확인해주세요..";
  exit;
 }
 $fw = fopen("sa.txt","a");  //파일 열기
 while(!feof($fp)){  //파일의 끝이 아닐 동안 실행
  $line = fgets($fp,800);  //한 라인씩 읽어 들임
  echo "읽어온 내용:{$line}<br>";
  fputs($fw,$line);  //파일에 기록
 }
 fclose($fp);
?>
=========================================================================================================
(7). 디렉터리를 열고 다는 함수 : opendir() , readdir() , closedir() 함수

<?
 echo "<B>***루트 디렉터리 안에 있는 'ohTest' 디렉터리 열기***</B><hr>";
 echo " 경로명...<B>\"c:/APM_Setup/htdocs/ohTest/\" </B><br>";
 echo "------------------------------------------------<br>";
 $dir = "c:/APM_Setup/htdocs/ohTest/"; //경로명을 변수에 저장
 if(is_dir($dir)){  //디렉터리 존재 유무 판별
  if($dirop = opendir($dir)){  //디렉터리가 존재하면 열기
   while(($filerd = readdir($dirop))!=false){ //열려진 디렉터리 파일 읽기
   echo "파일명 : [ {$filerd} ]<br> "; //읽어 들인 파일 출력
   }
     echo "--------------------------------------------<br>";
  }
 }else{
   echo "존재하지 않는 디렉터리입니다.";
 }
 closedir($dirop);  //열려진 디렉터리 닫기
?>
========================================================================================================
(8). 디렉터리의 위치 확인과 위치를 변경하는 함수 : getcwd() 함수, chdir() 함수

현재 디렉터리의 위치를 알아내는 getcwd() 함수를 사용하여 현재 디렉터리의 위치를 알아낸 다음, chdir() 함수를
사용하여 위치를 변경할 디렉터리의 경로를 지정한다. 현재의 위치에서 변경된 디렉터리의 위치를 확인하기 위해
getcwd() 함수를 사용한다.

getcwd() //현재의 데렉터리 위치를 확인
chdir  (디렉터리의 위치를 변경할 경로명)

<?
 echo "<B>***현재 디렉터리의 위치와 변경 후 디렉터리의 위치확인***</B><br>";
 echo "변경할 위치 ... <B>\"d:\wordk\" </B><br>";
 echo "--------------------------------------------<br>";
 echo " 현재 디렉터리의 위치 ... ";
 $path = getcwd();     //현재의 디렉터리 위치
 echo "{$path} <br>";
 chdir("d:/test/");    //변경할 위치의 경로명   
 $path = getcwd();     //변경된 디렉터리 위치
 echo "--------------------------------------------<br>";
 echo " 변경 후 디렉터리의 위치... ";
 echo "{$path}<br>";
 echo "--------------------------------------------<br>";
?>
===========================================================================================================

MYSQL 간단한 문법 설명

Programming/PHP 2011. 6. 25. 07:16
1. MYSQL DB 
PHP에서 DB와 연동하기 위해서는 우선 DB에 접근을 해야 합니다. 
DB에 접근하기 위해서는 MYSQL DB가 어데 있는지와 자신의 계정 아듸와, 패스워드, 
그리고 DB계정 아듸가 필요합니다. 
보통 MYSQL DB는 자신의 계정과 같은 곳에 있기 때문에 localhost로 지정하면 되지만 따로 서버를 
만들어서 MYSQL DB를 이용하는 경우에는 해당 서버의 IP 주소가 필요합니다. 
그럼 실질적으로 하겠습니다. 
우선 DB에 접속하기 위한 설정을 변수로 미리 선언해 놓습니다. (이게 편합니다) 

$host_name = "localhost"; 
$user_name = "user"; 
$user_password = "*****"; 
$db_name = "test"; 

즉 Mysql의 DB는 같은 계정에 있다구 하고, $user_name은 자신의 계정 아듸, $user_password는 계정 패스워드, $db_name은 자신에게 할당된 DB의 이름입니다. 

그럼 이제 접속을 해야 겠죠. 

$connect = mysql_connect($host_name,$user_name,$user_password) or echo"mysql_error()"; 

mysql_connect()라는 함수가 바로 DB에 접속하는 함수입니다. 
mysql_connect() 함수에 $host_name, $user_name, $user_password를 주고 호출을 하게 되면 결과가 나옵니다. 
이 결과값은 $connect 안에 넣게 되죠. 
뒤에 or echo"mysql_error()"; 은 만약 에러가 발생하면 에러값을 출력하게 하는 구문입니다. 
mysql_error()은 에러발생시 에러값을 return 해 주는 기특한 함수입니다. 
만약 이상없이 DB에 접속하게 되면 아무 표시도 안나겠죠. 
그럼 이제 자신의 DB에 연결해 봅시다. 

mysql_select_db($db_name, $connect ) or echo"mysql_error()"; 

mysql_select_db()에 $db_name 과 $connect를 넣구 호출하면 자신의 DB에 연결이 됩니다. 

2. Table 생성 

자 그럼 이제 DB에 테이블을 생성해 봅시다. 
DB에 테이블을 생성하건, 삭제하건, 아님 수정하건 Query문을 mysql에 건네주게 되어 있습니다. 

이름과 나이, 전화번호, 주소만 가지고 있는 테이블을 만들어 봅시다. 
$que = "CREATE TABLE Human_info ( 
                                      id int(11) DEFAULT '0' NOT NULL auto_increment, 
                                      name varchar(10), 
                                      age int(3), 
                                      tel_num varchar(20), 
                                      address text, 
                                      PRIMARY KEY (id))"; 

위와 같은 Query문을 만들었습니다. 
Query문을 만들 때는 문자열 변수에 내용을 입력하면 됩니다. 
위에 것은 보기 좋으라고 줄을 나누었는데 이러기 싫은 한줄로 쫘악 해도 됩니다. 

생성하는 Query문은 "CREAT TABLE 테이블명 ( 필드명과 Type )" 로 합니다. 
즉 위에서 테이블명은 Human_Info가 되죠. 
그리고 id, name, age, tel_num, address 같은 넘은 바로 스키마 이름이 되는 것이고, 그 옆에 int(11), 
varchar(10), text 같은 것은 Type이 되는거죠. 
그런데 사용할 스키마와는 별도로 id 라는 스키마를 지정했죠? 
ID는 테이블에 데이터를 넣고 뺄 때 필요한 일련번호입니다. 
DEFAULT '0' 은 첨에는 0부터 시작한다는 거죠. 
NOT_NULL 은 절대 빈칸은 허용 안되다는 거죠. 어떤 넘이라도 일련번호를 붙여야 된다는 거죠. 
auto_increment 는 별다른 값을 안 주어도 자동으로 증가하라는 겁니다. 
그리고 밑에 PRIMARY KEY (id)를 씀으로서 기본키는 ID라는 것을 지정하는 겁니다. 

그럼 위에 쓰인 Type에 대해서 이야기 하죠. 
int(11)은 11자리의 정수형 타입닙니다. 
varchar(20)은 20칸짜리 문자열이라는 거구요. 
text는 개행문자를 포함하는 끝을 모르는(?) 문자열이라는 겁니다. 
Type은 보통 위에 3가지만 쓰면 별 이상없을 겁니다. 
다른 Type들은 별로 쓰이지는 않으니 필요할때마다 찾아서 하시면 됩니다. 
자 그럼 이 $que 라는 질의어를 mysql에 전달합시다. 

mysql_query( $que, $connect ) or echo"mysql_error()"; 

mysql_query() 라는 함수가 바로 질의어를 넘겨주는 함수입니다. 
물론 생성할 때뿐만 아니라 질의어를 넘겨줄 때 이 함수를 쓰는 겁니다. 

이렇게 하면 자신의 DB에는 id, name, age, tel_num, address를 필드로 하는 테이블이 생성된겁니다. 

3. Table에 자료 추가 

자 이제, 테이블을 생성했으니 자료를 추가해봅시다. 
지금은 테이블만 만들어져있기 때문에 자료가 하나도 없습니다. 
자료를 Insert할 때는 필드의 순서대로 입력을 해야 합니다. 
우선 Query 문을 작성해 봅시다. 

$que = "INSERT INTO Humna_info VALUES ( 
                            '', 
                            '아무개', 
                            24, 
                            '000-000-0000', 
                            '아무시 
                            아무구 아무동' 
                            )"; 

위의 "INSERT INTO 테이블명 VALUES (데이타...)" 라구 하는 것이 자료추가하는 질의어입니다. 
VALUES ( 다음에 보면 처음에 '' 라고 되어 있죠? 
이넘이 바로 id입니다. 즉 인위로 값을 넣지 않죠. 
하지만 위에서 정의한 대로 auto_increment 이기 때문에 저절루 순서가 매겨집니다. 
그리고 2번째 이름은 문자열 이기 때문에 '로 둘러싼 것 입니다. (" 쓰면 안됩니다.) 
그리고 3번째 나이는 정수형이기 때문에 ' 가 필요없습니다. 
이 질의어를 mysql_query를 통해서 MySQL에 일을 냅따 시킵시다. 

mysql_query( $que, $connect ) or echo"mysql_error()"; 

그럼 이제 Human_Info라는 테이블에는 id 값이 0인 첫 번째 값이 들어간거죠. 

4. Table의 자료 제거 
이제 만들어 봤으니 제거 하는 방법을 알아 봅시다. 
제거하는 방법은 추가하는 것보다 더 쉽습니다. 

$que = "delete from Human_info where id=0"; 
mysql_query( $que, $connect ); 

delete from 테이블명 where 조건문 하면 됩니다. 그러고 $que를 MySQL에 넘겨주면 지웁니다. 

위이 예에서는 Human_Info라는 테이블에서 id값이 0인 넘을 지우라는 거죠. 
where id=0 했으니깐요. 
만약 where age=20 하면 Human_info 테이블에서 age=20 인넘들은 모두 지우죠. 

5. Table의 자료 수정 
자료의 수정방법도 매우 쉽습니다. 

$que = "UPDATE Human_Info SET name='막둥이' WHERE id=0"; 
mysql_query( $que, $connect ); 

수정할 때는 "UPDATE 테이블명 SET 수정할넘=수정할값 WHERE 조건문" 하믄 됩니다. 

콤마(,)를 이용해서 여러개를 바꿀수 있습니다. 

6. Table의 자료 출력 

자 이제 만들고, 지우고, 수정하는 걸 알았으니 원하는 자료를 테이블에서 불러오는 방법을 해봅시다. 

$que = "SELECT * FROM Human_Info"; 
$data = mysql_query( $que, $connect ); 

바로 SELECT, FROM을 이용해서 가져옵니다. 
* 는 모든 것을 가져오라는 겁니다. 
만약 name만 필요하다면 SELECT name FROM Human_Info 라구 하면 되고요. 
name과 age가 필요하면 SELECT name, age FROM Human_Info 라고 하면 되죠. 

Query문을 mysql_query를 통해서 MYSQL에 전달하면 mysql_query() 함수는 찾은 결과를 return 하게 됩니다. 
위에서는 $data라는 변수에 결과값을 저장하였죠. 
그럼 $data 변수안에는 찾은 결과가 배열의 형태로 입력되어져 있습니다. 
그럼 우선 몇 개가 찾아졌는지 함 알아봅시다. 

$total = mysql_affected_rows(); 

위와 같이 하면 총 몇 개가 찾아졌는지 알수 있습니다. 
mysql_affected_rows() 이라는 함수는 찾아진 값의 갯수를 return 합니다. 

자 그럼 이제 $data안에 있는 내용을 출력하기로 해봅시다. 

출력하기 위해서는 mysql_data_seek($data,$i) 라는 함수를 알아야 합니다. 

mysql_data_seek()는 $data 파일에서 $i 번째의 데이터를 지정시켜 놓는 함수입니다. 

즉 mysql_data_seek($data,0) 이라고 하면 찾아진 결과의 첫 번째 데이타를 지정해 놓는 거죠. 

지정을 했으면 다음과 같은 방법으로 값을 가져옵니다. 

$human = mysql_fetch_array( $data ); 

mysql_fetch_array()는 $data에서 지정된 넘의 값을 배열로 return 합니다. 
즉 $human[id], $human[name], $human[age], $human[tel_num], $human[address] 가 되는거죠. 

출력할 때는 echo"이름 : $human[name], 나이 : $human[age]살"로 하면 되죠. 

이름 : 아무개, 나이 : 20살 

위에 처럼 출력 되겠죠. 

그럼 리스트처럼 주르륵 하기 위해서는 for문을 사용하면 됩니다. 

for($i = 0; $i < $total; $i++) 

mysql_data_seek($data,$i); 
$human = mysql_fetch_array( $data ); 
echo"이름 : $human[name], 나이 : $human[age]살 
"; 


위와 같이 하면 주르륵 나오겠죠? 

쉽죠? 

그럼 select 문에 대해서 몇가지만 더 적겠습니다. 

$que = "SELECT * FROM 테이블명 order by id"; 

위에 처럼 하면 order by id 라는 구문 때문에 id의 정렬순으로 결과가 나옵니다. 

만약 역순으로 할려면 order by id desc 라고 하면 되지요. 

그리고 limit 숫자 하면 숫자만큼의 갯수만 나옵니다. 
$que = "SELECT * FROM 테이블명 order by id limit 10"; 
위에 처럼 하면 10개만 나오죠. 

만약 검색처럼 어떤 문자열을 포함하고 있는 넘을 찾을 때는 다음과 같이 하면 됩니다. 
이름에 "김"이 포함된 넘을 찾는 다고 합시다. 
$que = "SELECT * FROM 테이블명 WHERE name LIKE '%김%'"; 
위에서 WHERE라는 넘은 아까도 나왔지만 조건을 붙일 때 쓰는 넘입니다. 
그리고 LIKE '%검색문자%' 라구 덧 붙이면 name 필드중 "김" 이라는 문자가 있는 넘을 찾아라는 겁니다.  

MYSQL DB create and table create example

Programming/PHP 2011. 6. 25. 06:45
brought to you by Calendar !!

==================================================

<?php
/*
 * Copyright 2010 Sean Proctor
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/*
   Run this file to install the calendar
   it needs very much work
*/

$phpc_root_path = dirname(dirname(__FILE__));
$phpc_includes_path = "$phpc_root_path/includes";
$phpc_config_file = "$phpc_root_path/config.php";

define('IN_PHPC', true);

if(!function_exists("mysqli_connect"))
soft_error("You must have the mysqli extension for PHP installed to use this calendar.");

echo '<html>
<head>
<title>install php calendar</title>
</head>
<body>
<form method="post" action="install.php">
';

foreach($_POST as $key => $value) {
echo "<input name=\"$key\" value=\"$value\" type=\"hidden\">\n";
}

if(!isset($_POST['my_hostname'])
&& !isset($_POST['my_username'])
&& !isset($_POST['my_passwd'])
&& !isset($_POST['my_prefix'])
&& !isset($_POST['my_database'])) {
get_server_setup();
} elseif((isset($_POST['create_user']) || isset($_POST['create_db']))
&& !isset($_POST['done_user_db'])) {
add_sql_user_db();
} elseif(!isset($_POST['base'])) {
install_base();
} elseif(!isset($_POST['admin_user'])
&& !isset($_POST['admin_pass'])) {
get_admin();
} else {
add_calendar();
}

function check_config()
{
global $phpc_config_file;

if(is_writable($phpc_config_file))
return true;
// Check if we can create the file
if($file = @fopen($phpc_config_file, 'a')) {
fclose($file);
return true;
}
return false;
}

function report_config()
{
echo '<p>Your configuration file could not be written to. This file '
.'probably does not yet exist. If that is the case, youneed to '
.'create it. You need to make sure this script can write to '
.'it. We suggest logging in with a shell and typing:</p>
<p><code>
touch config.php<br>
chmod 666 config.php
</code></p>
<p>or if you only have ftp access, upload a blank file named '
.'config.php to your php-calendar directory then use the chmod '
.'command to change the permissions of config.php to 666.</p>
<input type="submit" value="Retry">';
}

function get_server_setup()
{
if(!check_config())
return report_config();

echo '
<table class="display">
<tr>
<td>SQL server hostname:</td>
<td><input type="text" name="my_hostname" value="localhost"></td>
</tr>
<tr>
<td>SQL Database name:</td>
<td><input type="text" name="my_database" value="calendar"></td>
</tr>
<tr>
<td>SQL Table prefix:</td>
<td><input type="text" name="my_prefix" value="phpc_"></td>
</tr>
<tr>
<td>SQL Username:</td>
<td><input type="text" name="my_username" value="calendar"></td>
</tr>
<tr>
<td>SQL Password:</td>
<td><input type="password" name="my_passwd"></td>
</tr>
<tr>
<td colspan="2">
 <input type="checkbox" name="create_db" value="yes">
 create the database (don\'t check this if it already exists)
</td>
</tr>
<tr><td colspan="2">
 <input type="checkbox" name="create_user" value="yes">
 Should the user info supplied above be created? Do not check
 this if the user already exists
</td></tr>
<tr><td colspan="2">
 You only need to provide the following information if you
 need to create a user
</td></tr>
<tr>
<td>SQL Admin name:</td>
<td><input type="text" name="my_adminname"></td>
</tr>
<tr>
<td>SQL Admin Password:</td>
<td><input type="password" name="my_adminpasswd"></td>
</tr>
<tr>
<td colspan="2">
 <input name="action" type="submit" value="Install">
</td>
</tr>
</table>';
}

function add_sql_user_db()
{
global $dbh;

$my_hostname = $_POST['my_hostname'];
$my_username = $_POST['my_username'];
$my_passwd = $_POST['my_passwd'];
$my_prefix = $_POST['my_prefix'];
$my_database = $_POST['my_database'];
$my_adminname = $_POST['my_adminname'];
$my_adminpasswd = $_POST['my_adminpasswd'];
$sql_type = "mysqli";

$create_user = isset($_POST['create_user'])
&& $_POST['create_user'] == 'yes';
$create_db = isset($_POST['create_db']) && $_POST['create_db'] == 'yes';

// Make the database connection.
if($create_user) {
$dbh = connect_db($my_hostname, $my_adminname, $my_adminpasswd);
} else {
$dbh = connect_db($my_hostname, $my_username, $my_passwd);
}

$string = "";

if($create_db) {
$query = "CREATE DATABASE $my_database";

$dbh->query($query)
or db_error($dbh, 'error creating db', $query);

$string .= "<div>Successfully created database</div>";
}

if($create_user) {
$query = "GRANT ALL ON accounts.* TO $my_username@$my_hostname identified by '$my_passwd'";
$dbh->query($query)
or db_error($dbh, 'Could not grant:', $query);
$query = "GRANT ALL ON $my_database.*\n"
."TO $my_username IDENTIFIED BY '$my_passwd'";
$dbh->query($query)
or db_error($dbh, 'Could not grant:', $query);

$query = "FLUSH PRIVILEGES";
$dbh->query($query)
or db_error($dbh, "Could not flush privileges", $query);

$string .= "<div>Successfully added user</div>";
}

echo "$string\n"
."<div><input type=\"submit\" name=\"done_user_db\" value=\"continue\">"
."</div>\n";

}

function create_config($sql_hostname, $sql_username, $sql_passwd, $sql_database,
                $sql_prefix, $sql_type)
{
return "<?php\n"
."define('SQL_HOST',     '$sql_hostname');\n"
."define('SQL_USER',     '$sql_username');\n"
."define('SQL_PASSWD',   '$sql_passwd');\n"
."define('SQL_DATABASE', '$sql_database');\n"
."define('SQL_PREFIX',   '$sql_prefix');\n"
."define('SQL_TYPE',     '$sql_type');\n"
."?>\n";
}

function install_base()
{
global $phpc_config_file, $dbh;

$sql_type = "mysql";
$my_hostname = $_POST['my_hostname'];
$my_username = $_POST['my_username'];
$my_passwd = $_POST['my_passwd'];
$my_prefix = $_POST['my_prefix'];
$my_database = $_POST['my_database'];

$fp = fopen($phpc_config_file, 'w')
or soft_error('Couldn\'t open config file.');

fwrite($fp, create_config($my_hostname, $my_username, $my_passwd,
                                $my_database, $my_prefix, $sql_type))
or soft_error("could not write to file");
fclose($fp);

require_once($phpc_config_file);

// Make the database connection.
$dbh = connect_db(SQL_HOST, SQL_USER, SQL_PASSWD, SQL_DATABASE);

create_tables();

echo "<p>config created at \"". realpath($phpc_config_file) ."\"</p>"
."<p>calendars base created</p>\n"
."<div><input type=\"submit\" name=\"base\" value=\"continue\">"
."</div>\n";
}

function create_tables()
{
global $dbh;

$query = "CREATE TABLE `" . SQL_PREFIX . "events` (\n"
."`eid` int(11) unsigned NOT NULL auto_increment,\n"
."`cid` int(11) unsigned NOT NULL,\n"
."`owner` int(11) unsigned NOT NULL default 0,\n"
."`subject` varchar(255) collate utf8_unicode_ci NOT NULL,\n"
."`description` text collate utf8_unicode_ci NOT NULL,\n"
."`readonly` tinyint(1) NOT NULL default 0,\n"
."`catid` int(11) unsigned default NULL,\n"
."PRIMARY KEY  (`eid`)\n"
.") ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;\n";

$dbh->query($query)
or db_error($dbh, 'Error creating events table.', $query);

$query = "CREATE TABLE `" . SQL_PREFIX . "occurrences` (\n"
."`oid` int(11) unsigned NOT NULL auto_increment,\n"
."`eid` int(11) unsigned NOT NULL,\n"
."`startdate` date NOT NULL,\n"
."`enddate` date NOT NULL,\n"
."`starttime` time default NULL,\n"
."`endtime` time default NULL,\n"
."`timetype` tinyint(4) NOT NULL default '0',\n"
."PRIMARY KEY  (`oid`),\n"
."KEY `eid` (`eid`)\n"
.") ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=750 ;\n";

$dbh->query($query)
or db_error($dbh, 'Error creating occurrences table.', $query);

$query = "CREATE TABLE `" . SQL_PREFIX . "users` (\n"
."`uid` int(11) unsigned NOT NULL auto_increment,\n"
."`username` varchar(32) collate utf8_unicode_ci NOT NULL,\n"
."`password` varchar(32) collate utf8_unicode_ci NOT NULL default '',\n"
."`admin` tinyint(4) NOT NULL default '0',\n"
."PRIMARY KEY  (`uid`)\n"
.") ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;";

$dbh->query($query)
or db_error($dbh, 'Error creating users table.', $query);

$query = "CREATE TABLE `" . SQL_PREFIX . "config` (\n"
."`cid` int(11) NOT NULL,\n"
."`config_name` varchar(255) collate utf8_unicode_ci NOT NULL,\n"
."`config_value` varchar(255) collate utf8_unicode_ci NOT NULL,\n"
."UNIQUE KEY `calendar_id` (`cid`,`config_name`)\n"
.") ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;";

$dbh->query($query)
or db_error($dbh, 'Error creating config table.', $query);

$query = "CREATE TABLE `" . SQL_PREFIX . "permissions` (\n"
."`cid` int(11) unsigned NOT NULL,\n"
."`uid` int(11) unsigned NOT NULL,\n"
."`read` tinyint(1) NOT NULL,\n"
."`write` tinyint(1) NOT NULL,\n"
."`readonly` tinyint(1) NOT NULL,\n"
."`modify` tinyint(1) NOT NULL,\n"
."`admin` tinyint(1) NOT NULL,\n"
."UNIQUE KEY `cid` (`cid`,`uid`)\n"
.") ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;";

$dbh->query($query)
or db_error($dbh, 'Error creating permissions table.', $query);

$query = "CREATE TABLE `" . SQL_PREFIX . "calendars` (\n"
."`cid` int(11) unsigned NOT NULL auto_increment,\n"
."PRIMARY KEY  (`cid`)\n"
.") ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;";

$dbh->query($query)
or db_error($dbh, 'Error creating calendars table.', $query);

$query = "CREATE TABLE `" . SQL_PREFIX . "categories` (\n"
."`catid` int(11) unsigned NOT NULL auto_increment,\n"
."`cid` int(11) unsigned NOT NULL,\n"
."`name` varchar(255) collate utf8_unicode_ci NOT NULL,\n"
."`text_color` varchar(255) collate utf8_unicode_ci default NULL,\n"
."`bg_color` varchar(255) collate utf8_unicode_ci default NULL,\n"
."PRIMARY KEY  (`catid`),\n"
."KEY `cid` (`cid`)\n"
.") ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;";

$dbh->query($query)
or db_error($dbh, 'Error categories calendars table.', $query);
}

function get_admin()
{

echo "<table>\n"
."<tr><td colspan=\"2\">The following is to log in to the "
."calendar (not the SQL admin)</td></tr>\n"
."<tr><td>\n"
."Admin name:\n"
."</td><td>\n"
."<input type=\"text\" name=\"admin_user\" />\n"
."</td></tr><tr><td>\n"
."Admin password:"
."</td><td>\n"
."<input type=\"password\" name=\"admin_pass\" />\n"
."</td></tr><tr><td colspan=\"2\">"
."<input type=\"submit\" value=\"Create Admin\" />\n"
."</td></tr></table>\n";

}

function add_calendar()
{
global $dbh, $phpc_config_file;

require_once($phpc_config_file);

$calendar_title = 'PHP-Calendar';

// Make the database connection.
$dbh = connect_db(SQL_HOST, SQL_USER, SQL_PASSWD, SQL_DATABASE);

$query = "INSERT INTO ".SQL_PREFIX."calendars\n"
."(`cid`) VALUE (1)";

$dbh->query($query)
or db_error($dbh, 'Error reading options', $query);

$cid = $dbh->insert_id;

$config_array = array(
'hours_24' => '0',
'week_start' => '2',
'translate' => '1',
'subject_max' => '32',
'calendar_title' => 'PHP-Calendar',
'anon_permission' => '3',
'upload_dir' => 'uploads',
);
foreach($config_array as $name => $value) {
$query = "INSERT INTO ".SQL_PREFIX."config\n"
."(`cid`, `config_name`, `config_value`)\n"
."VALUES ('$cid', '$name', '$value')";

$dbh->query($query)
or db_error($dbh, 'Error creating options.', $query);
}

echo "<p>saved default configuration</p>\n";

$passwd = md5($_POST['admin_pass']);

$query = "INSERT INTO `" . SQL_PREFIX . "users`\n"
."(`username`, `password`, `admin`) VALUES\n"
."('$_POST[admin_user]', '$passwd', 1)";

$dbh->query($query)
or db_error($dbh, 'Error adding admin.', $query);
echo "<p>Admin created.</p>";
echo "<p>You delete the install directory and you should change the permissions on config.php so only your webserver can read it.</p>";
echo "<p><a href=\"../index.php\">View calendar</a></p>";
}

echo '</form></body></html>';

// called when there is an error involving the DB
function db_error($dbh, $str, $query = "")
{
$string = "$str<br />" . $dbh->error;

if($query != "")
$string .= "<br />SQL query: $query";

soft_error($string);
}

function connect_db($hostname, $username, $passwd, $database = false)
{
$dbh = new mysqli($hostname, $username, $passwd);
if($database)
$dbh->select_db($database);

if(mysqli_connect_errno()) {
soft_error("Database connect failed (" . mysqli_connect_errno()
. "): " . mysqli_connect_error());
}

return $dbh;
}

// called when some error happens
function soft_error($str)
{
echo "<html><head><title>Error</title></head>\n",
    "<body><h1>Software Error</h1>\n",
    "<h2>Message:</h2>\n",
    "<pre>$str</pre>\n",
    "<h2>Backtrace</h2>\n",
    "<ol>\n";
foreach(debug_backtrace() as $bt) {
echo "<li>$bt[file]:$bt[line] - $bt[function]</li>\n";
}
echo "</ol>\n",
    "</body></html>\n";
exit;
}

?>
 

Running Apache / PHP / Mysql on Mac (2)

Programming/PHP 2011. 6. 8. 01:59

reric.com 에서 퍼왔습니다.

http://reric.com/wp/2011/03/09/1424

-------------------------------------------------------------------------------- 


맥북에어에 설치되어있는 Mac OS X 10.6 Snow Leopard 에는 이미 apache와 php가 설치되어 있다. 따라서 이 글은 apache와 php를 연동하고, mysql을 추가 설치한 뒤 인코딩을 UTF-8 로 설정하는 방법을 안내한다. 이해를 위해서는 vi editor와 APM에 대한 최소한의 지식을 필요로한다.

준비
root 계정 사용이 제한되어 있다면 먼저 root 계정을 활성화 시킨다.

Apache 실행
1. 터미널을 열고 아파치를 실행한다.

1
$ sudo apachectl start

1.1 아래와 같은 에러 메시지가 발생한다면 1.2 를 수행한다.

1
/usr/sbin/apachectl: line 82: ulimit: open files: cannot modify limit: Invalid argument

1.2 apachectl 파일을 열어서 64번째 라인을 아래와 같이 수정한다.

1
$ vi /usr/sbin/apachectl

변경 전: ULIMIT_MAX_FILES=”ulimit -S -n `ulimit -H -n`”
변경 후: ULIMIT_MAX_FILES=”"

1.3 필요하다면 아파치를 재시작한다.

1
$ sudo apachectl restart

2. 브라우저를 열고 http://localhost 에 접속한다.
3. It works! 가 보인다면 성공이다.

Apache 와 PHP 연동
1. apache 설정파일에서 php 모듈을 로드하는 부분의 주석을 제거한다.

1
$ vi /etc/apache2/httpd.conf

변경 전: #LoadModule php5_module libexec/apache2/libphp5.so
변경 후: LoadModule php5_module libexec/apache2/libphp5.so

2. 자신의 웹사이트 디렉토리 아래에 php파일을 만든다. (나의 계정명은 jeongho 이다.)

1
2
$ cd /Users/jeongho/Sites
$ vi phpinfo.php

3. 만들어진 파일에 아래 코드를 입력하고 저장한다.

1
2
3
<?php
phpinfo();
?>

3.1 vi editor 에서 저장하는 방법은 문서 수정모드에서 빠져나와서(esc) :wq 를 입력한다.

4. apache를 재 시작(sudo apachectl restart) 한 뒤 http://localhost/~jeongho/phpinfo.php 에 접속한다.
5. php 관련 정보가 보인다면 성공이다. (나의 맥북에어는 5.3.3 버전이 설치되어 있다.)
6. 추가적으로 Default timezone 을 설정 한다.

1
2
3
4
$ cd /etc
$ sudo cp php.ini.default php.ini
$ sudo chmod 666 php.ini
$ vi php.ini

변경 전: ;date.timezone =
변경 후: date.timezone = Asia/Seoul

7. apache를 재시작 한다.

MySQL 설치

1. MySQL Community Server를 다운로드 한다.
(나의 맥북에어 사양은 Core 2 Duo, 4GB RAM 이기 때문에 64bit 용인 mysql-5.1.56-osx10.6-x86_64.dmg 파일을 다운로드했다.)

2. 다운로드 받은 dmg 파일을 실행 한다.

2.1. 설치를 위해 mysql-5.1.56-osx10.6-x86_64.pkg 파일을 실행해 설치를 완료한다.
2.2. 부팅시 자동실행을 위해 MySQLStartupItem.pkg 파일을 실행해 설치를 완료한다.
2.3. 시스템환경설정 패널에서 시작/종료를 할 수 있도록 MySQL.prefPane 파일을 실행해 설치를 완료한다.
2.3.1 설치 후 MySQL 설정 패널에서 MySQL을 시작 한다.(Start MySQL Server)

3. path 에 mysql 경로(/usr/local/mysql/bin/)를 추가한다.

1
2
$ cd ~
$ vi .profile

변경 전: export PATH=/opt/local/bin:/opt/local/sbin:$PATH
변경 후: export PATH=/opt/local/bin:/opt/local/sbin:/usr/local/mysql/bin/:$PATH

4. 변경 내용을 적용한다.

1
$ source .profile

5. 터미널을 열고 root 비밀번호를 생성한 뒤, 데이터베이스에 접속한다.

1
2
$ mysqladmin -u root -p password 1234
$ mysql -u root -p

6. 터미널 프롬프트가 mysql> 상태로 보이면 성공이다.

UTF-8 설정
1. 데이터베이스에 접속 한 뒤 인코딩 설정을 확인한다. 대부분 latin1 로 설정되어 있을 것이다.

1
mysql> show variables like 'c%';

2. 모든 인코딩을 UTF-8로 변경하기 위해 my.cnf 파일을 만든 후 인코딩 설정을 추가한다.

1
2
$ sudo cp /usr/local/mysql/support-files/my-huge.cnf /etc/my.cnf
$ sudo vi /etc/my.cnf

2.1 [client] 아래에 다음을 추가한다.
default-character-set=utf8
2.2 [mysqld] 아래에 다음을 추가한다.
default-character-set=utf8
character-set-client-handshake=FALSE

4. mysql 을 재 시작한 뒤 1번 과정을 다시 수행해 인코딩을 확인한다.

PHP 와 MySQL 연동
1. 위에서 만든 phpinfo.php를 아래 코드로 수정한다.

1
2
3
4
5
6
7
8
9
10
<?php
$db = mysql_connect('localhost', 'root', '위에서 설정한 데이터베이스 비밀번호');
$conn = mysql_select_db('mysql',$db);
$result = mysql_query("show variables like 'c%'");
while ($data=mysql_fetch_array($result)) {
    echo $data['Variable_name']." :$data[Value]";
}
 
phpinfo();
?>

2. php.ini 파일을 열어 mysql 정보를 수정한다.

1
$ vi /etc/php.ini

변경 전: /var/mysql/mysql.sock
변경 후: /tmp/mysql.sock

1.1 변경할 부분은 다음과 같다.
pdo_mysql.default_socket=/tmp/mysql.sock
mysql.default_socket = /tmp/mysql.sock
mysqli.default_socket = /tmp/mysql.sock

3. apache를 재 시작(sudo apachectl restart) 한 뒤 http://localhost/~jeongho/phpinfo.php 에 접속한다. 아래와 같이 인코딩 정보와 함께 php 설정 정보가 보이면 성공이다.
character_set_client :utf8
character_set_connection :utf8
character_set_database :utf8
character_set_filesystem :binary
character_set_results :utf8
character_set_server :utf8
character_set_system :utf8
character_sets_dir :/usr/local/mysql-5.1.56-osx10.6-x86_64/share/charsets/
collation_connection :utf8_general_ci
collation_database :utf8_general_ci
collation_server :utf8_general_ci
completion_type :0
concurrent_insert :1
connect_timeout :10
PHP Version 5.3.3

php 캘린더 소스 2

Programming/PHP 2011. 5. 21. 04:28
php 캘린더 with 앞뒤 month 버튼

http://ketaro.tistory.com/6

php 캘린더 간단소스

Programming/PHP 2011. 5. 21. 04:27
소스는 여기서 빌려왔습니다.

http://webnoon.net/entry/PHP%EB%A1%9C-%EB%8B%AC%EB%A0%A5%EB%A7%8C%EB%93%A4%EA%B8%B0



<?
$month = 4 ;// date("n");
$year = date("Y");
$start_days = date("w" , mktime(0,0,0,$month,1,$year));
$uptodate = date("t", mktime(0,0,0,$month,1,$year));
for($d=$start_days + 1,$days=1;$days<=$uptodate;$d++,$days++) {
  $id[$d] = $days ;
  }



?>
<table>
  <tr>
  <? echo $year."년 ".$month."월";?>
  </tr>
  <tr>
    <td>일</td>
    <td>월</td>
    <td>화</td>
    <td>수</td>
    <td>목</td>
    <td>금</td>
    <td>토</td>
  </tr>
  <?
    //1부터 42까지 tr은 6개, td는 7개.
    for($tr=0;$tr<=5;$tr++) {
      echo"<tr>";
        
        for($td=1;$td<=7;$td++) {
          $no = $td + ($tr*7) ;

          echo"<td>$id[$no]</td>";
          }
          echo"</tr>";
          }
  ?>
</table>

Getting google map API Key for Android on Mac

Programming/App Development 2011. 5. 16. 02:40

From Thor

http://just-thor.com/2010/06/30/obtaining-google-android-map-api-key/

As a beginner on Android platform, I was trying to embed Google map in my application. I have everything right, except the map is not loading, and no exception was thrown at the console.

After doing some searching on the internet, my problem seems like caused by incorrect API key. Obtaining Android Map API key is different from normal Google Map API key. I assume you are running Android emulator and also a beginner(like me :D ), first step is to find out the location of your keystore. In Eclipse, fire up the “Preferences” window, and locate the Android->Build settings, you should see the location of your keystore file in the “Default debug keystore” field.

Type the following command in your command line. By the way, I am using Mac, I think *Nix user should have no problem running the following command, but for Windows Users, I think you need to find a way to do it.

keytool -list -keystore ~/.android/debug.keystore

and when it prompts you for the password, just hit the Enter key, no need to enter any password.
And you will get something like this in the output

Certificate fingerprint (MD5): 8E:6F:5D:3F:A9:94:96:69:42:D2: and more

copy the value of it, and go to this URL
http://code.google.com/intl/sv-SE/android/maps-api-signup.html

Paste your value into the textbox and submit, and you should be able to get your API key. By using this Android Map API key, I was able to get the map working in my Android apps. :)

요건 텍스트 화일을 읽어와서 화면에 뿌려주는 php 코드

Programming/PHP 2010. 10. 21. 10:39
<?php
$display = array();
$savefile = "/var/www/html/ars/html/ateam/phpFiles/STB/STBDEV00.txt";

if(file_exists($savefile)){ // if there is text file,
$fp = fopen($savefile, "r"); // open it with READ ONLY option.

while(!feof($fp)) {
    // 파일의 내용을 한줄씩 읽어와 배열변수에 추가한다.
                    $display[] = fgets($fp,100);
                }
//파일을 닫는다.
fclose($fp);
}


// 내용이 한줄이라도 있으면 출력한다.

// 배열의 마지막 key 값을 구한다. 배열의 key 는 0부터 시작하므로 마지막 key 는 갯수에서 1을 뺴면 된다.
$last_key = count($display) - 1;
$i=$last_key;
    for($j=0;$j<=$i;$j=$j+1)
{
  ?>
    <? $lines = $display[$j]?>
    <? echo $lines ?><br>
<?php
}
?>
<a href="http://ne037a-lnx1/ateam/SWSTB.html"><b>Go back</b></a>
<br>
<a href="http://ne037a-lnx1/ateam/phpFiles/STB/TestSTB-edit.php">EDIT</a>
<br>