세이박스

'php'에 해당되는 글 106건

  1. 안드로이드 앱과 연동하는 웹서버프로그래밍 개발 교육 1일차 모임 후기
  2. [강의] 서버프로그래밍 관리페이지 제작 + JSON 출력 + 안드로이드앱 연동 교육 (부산)
  3. [부산] 서버 연동 앱개발을 위한 관리페이지 제작 및 JSON 출력 만들기 무료 교육 - 재직자대상
  4. file_get_contents() Warning 오류 해결 방법
  5. Warning: Cannot modify header information - headers already sent by 오류 해결 방법
  6. Connecting DB : File '/usr/local/mysql/share/mysql/charsets/?.conf' not found (Errcode: 2)
  7. 자리수 지정한 문자로 채우기 str_pad()
  8. 드림위브에서 특정 확장자를 php 또는 asp, jsp 확장자로 인식 하게끔 적용하기
  9. 비밀번호 변경시 임의 문자와 숫자 조합으로 생성후 회원에게 이메일 전송 (비번 암호화 원리 팁)
  10. 비밀번호 변경시 임의 문자와 숫자 조합으로 생성후 회원에게 이메일 전송 (비번 암호화 원리 팁)
  11. 리눅스 서버 apache php 오류 Cannot load /usr/local/apache/libexec/libphp4.so into server: /usr/local/apache/libexec/libphp4.so: cannot restore segment prot after reloc: Permission denied
  12. 그누보드에서 일반 블로그 처럼 메타테그 적극 활용하기
  13. PHP 특정 폴더 내에 있는 파일들을 선택적으로 삭제 하고자 할 때
  14. 리눅스 페도라10 버전에 php-5.1.4 버전 설치하기
  15. PHP 설치시 생길수 있는 오류 해결 방법
  16. php DB 인젝션 공격 방어
  17. php upload 용량 늘리기
  18. PHP str_pad() 자릿수 맞혀 수정하기
  19. addslashes() stripslashes() DB 저정시 '홀따옴표에 \백슬러시 붙였다 빼주는 함수
  20. php uft-8, euc-kr 인코딩 변환 iconv()
  21. [PHP] 한글삭제 정규식
  22. PHP strip_tags() 문자열에 html 태그나 php문구 모두 제거
  23. PHP Header 다운로드 에서 파일이름이 한글로 된경우 바로 열기 다운로드 안되는경우
  24. PHP 로그인후 현재 페이지로 돌아오기 처리
  25. PHP 웹에서 서버 동시 접속자 수 확인 하기
  26. IIS 6.0 에서 php5 설치
  27. PHP 처리후 페이지 이동 하는 방법들
  28. PHP 날짜함수 요일 한글로 표시하기
  29. PHP session_destroy() 오류
  30. PHP 제로보드 이미지 한글 파일명 업로드 깨짐 엑박 되는 현상

안드로이드 앱과 연동하는 웹서버프로그래밍 개발 교육 1일차 모임 후기

모바일앱개발

 

 

 

 

 

부산에서 2016년3월15일 화요일 저녁 7시~10시까지 3시간 동안 부산모바일앱개발센터 교육장에서 1차 모임을 가졌습니다.

 

스마트폰의 모바일 앱 개발은 이제 웹서버프로그래밍을 통한 Data 관리 환경의 필요성을 많은 분들이 필요성을 느끼셔서 본 강의를 요청하셔서 개설하게 되었습니다.

 

총 10분이 참여하셨구요. 끝까지 열공하셔서 좋은 결실 맺기를 바랍니다.

 

관리자 로그인, 회원관리, 게시판 및 자료실, 상품 관리 등의 관리 페이지 개발과 JSON 통신을 위한 DB 출력까지 진행합니다.

 

JSON Data를 앱에서 받아서 출력만하면 끝! ^^

 

출처 : http://www.androidstudy.co.kr/bbs/board.php?bo_table=B53&wr_id=127

 

 

[강의] 서버프로그래밍 관리페이지 제작 + JSON 출력 + 안드로이드앱 연동 교육 (부산)

웹프로그램

안녕하세요! 안드로이드스터디 운영자 이경용 입니다.

요즘 개발하는 대부분은 앱들이 서버와의 통신을 기본으로 개발되고 있습니다.
하지만 대부분 모바일 앱 개발 관련 교육만 있으며, 서버 중심의 관리페이지 개발에 대해서는 잘 없기에 준비했습니다.
"요기요", "배달의민족", "쿠팡"와 같은 앱의 업소 정보는 매번 바뀔때 마다 앱을 어떻게 업데이트 할까요?
업소 정보는 별도의 웹 환경에서 관리페이지를 만들고 DB와 이미지를 관리하며, JSON으로 앱과 자료를 주고 받습니다.
이러한 관리페이지를 만드는 기본 과정을 학습하고 실습을 통해 만들어 보고자 합니다.
관리페이지를 만드는 언어는 html , css, javascript, php, mysql 를 이용해서 만들니다.
해당 언어의 기초 지식이 있으면 좋지만, 전체 구성을 이해하는것 만으로도 큰 도움이 되실 겁니다.

교육목표 :
- PHP, MySQL을 이용해서 관리페이지를 만들고 JSON으로 출력해서 모바일 앱에서 서버의 자료를 받을 수 있는 관리 시스템을 개발하는 교육과정이다. (안드로이드 JSON 파싱 연동)


교육내용 :
1일차 : 관리페이지와 JSON 통신 구축 소개 및 개발환경 구축
2일차 : 제어문, 반복문, 배열, 함수
3일차 : MySQL 데이터베이스, MySQL 명령
4일차 : PHP와 MySQL의 연동
5일차 : 쿠키와 세션, 관리페이지 로그인 기능 구현
6일차 : 게시판 만들기
7일차 : 자료실 만들기
8일차 : JSON 출력 및 안드로이드 앱 연동
* 교육 내용은 수강생 구성에 따라 내용이 다소 변경될 수도 있습니다.


교육안내 :
1.일시 : 2016년 3월 15일 ~ 4월 7일
2.시간 : 매주 화,목 저녁 7시~10시 (3시간) / 총 8일 (24시간)  * 일정은 강사의 사정에 따라 일부 변동될 수도 있습니다.
3.장소 : 해운대 센텀시티 (구체적인 장소는 별도 안내)
4.준비 : 노트북 사양무관 (* 노트북이 없는 경우 문의)
5.비용 : 유료 20만원, 시간당 9천원 정도 입니다. (입금문의 : 010-2694-8424)
6.신청 : 아래 게시글에 코멘트에 비밀글 체크후 연락처, 노트북 유무, 자바실력, 간단소개글 정도 남겨 주시기 바랍니다.
http://www.androidstudy.co.kr/bbs/board.php?bo_table=B11&wr_id=3033
8.접수 : 2016년 3월 14일 까지



* 아래 게시글에 코멘트로 "비밀글" 체크후 이름과 연락처, 서버프로그래밍 및 홈페이지 개발 경험, 참가 이유 등을 남겨 주세요! (접수 확인후 개별 연락 드립니다.)
http://www.androidstudy.co.kr/bbs/board.php?bo_table=B11&wr_id=3033



[부산] 서버 연동 앱개발을 위한 관리페이지 제작 및 JSON 출력 만들기 무료 교육 - 재직자대상

웹프로그램

안녕하세요! 안드로이드스터디 운영자 이경용 입니다.

요즘 개발하는 대부분은 앱들이 서버와의 통신을 기본으로 개발되고 있습니다.
하지만 대부분 모바일 앱 개발 관련 교육만 있으며, 서버 중심의 관리페이지 개발에 대해서는 잘 없기에 준비했습니다.
"요기요"와 같은 앱의 업소 정보는 매번 바뀔때 마다 앱을 어떻게 업데이트 할까요?
업소 정보는 별도의 웹 환경에서 관리페이지를 만들고 DB와 이미지를 관리하며, JSON으로 앱과 자료를 주고 받습니다.
이러한 관리페이지를 만드는 기본 과정을 학습하고 실습을 통해 만들어 보고자 합니다.
관리페이지를 만드는 언어는 html , css, javascript, php, mysql 를 이용해서 만들니다.
해당 언어의 기초 지식이 있으면 좋지만, 전체 구성을 이해하는것 만으로도 큰 도움이 되실 겁니다.
단, 이번 교육은 고용보험 가입이 되어 있는 재직자에 한해서 진행하는 교육입니다.

대상 :
부산지역 고용보험 가입된 재직자

교과목표 :
- PHP, MySQL을 이용해서 관리페이지를 만들고 JSON으로 출력해서 모바일 앱에서 서버의 자료를 받을 수 있는 관리 시스템을 개발하는 교육과정이다.

사전지식 :
- HTML, CSS, JAVASCRIPT, PHP, MySQL 기초 지식


교육일자 :
1주차 - 5/19(화) ~ 5/22(금)
2주차 - 5/26(화) ~ 5/29(금)

교육시간 :
오후 07:00 ~ 10:00 (3시간)


교육장소 :
부산모바일앱개발센터 교육장


교육내용 :
1일차 : 개발환경 설정
2일차 : 관리페이지 로그인 기능 추가
3일차 : 공지사항 기본 기능 만들기
4일차 : 공지사항 첨부기능 추가
5일차 : 공지사항 페이징 추가
6일차 : 공지사항 JSON 출력, 안드로이드 앱 리스트뷰 적용
7일차 : 업소관리 만들기 응용
8일차 : 검색기능 추가

신청방법 :
1. 첨부된 문서를 3개를 다운받아서 작성후 이메일 제출 (제출한 분은 아래 코멘트에 이름과, 연락처를 비밀글로 남겨 주세요)
동명대학교 지역산업인력양성사업단 김미영 담당자앞 
mykim@tu.ac.kr
2. 동명대학교 지역산업인력양성사업단에서 검토후 자격여부 확인후 회신 (이메일 또는 전화)
3. 5/14(목)까지  신청서 및 일반현황제출,협약서 제출 단! 협약서는 반드시 컬러스캔하여 메일전송 또는 원본제출


오시는길 안내

2호선 센텀시티역 2번출구에서 하차후
커피빈과 홈플러스 사이 길 5분도보
센텀벤처타운(부산정보산업진흥원 건물) 3층
부산모바일앱개발센터 교육장
부산모바일앱개발센터 : http://bmac.kr/CenterInfo/CenterInfo05.aspx
네이버 지도 : http://goo.gl/2kY5rC
대중교통 이용안내 :
마을버스 : 해운대구3-1, 해운대구3-2
일반버스 : 115, 181, 100, 31, 200, 5-1
좌석버스 : 307
급행버스 : 1002, 1007
문의 : 이경용 010-2694-8424 / ceo@apptools.co.kr
* 주차 비용 받으니 홈플러스 주차장 이용 또는 대중교통 이용을 바랍니다. ^^

* 교육 관련 문의는 이경용 010-2694-8424 / ceo@apptools.co.kr



신청안내 :
http://www.androidstudy.co.kr/bbs/board.php?bo_table=B11&wr_id=2964


file_get_contents() Warning 오류 해결 방법

웹프로그램
웹호스팅을 이용할 경우 php.ini 수정이 어려운 경우가 있습니다.
특히 외부의 파일을 가져올 경우 allow_url_fopen = 0; 일 경우 1로 수정 해줘야 하지만, 보안상 막아둔 경우 서버를 공용으로 사용하므로 수정을 해주지 않습니다.
저의 경우 cafe24 호스팅을 주로 이용하는데 이곳 역시 allow_url_fopen = 0 으로 되어 있어서 fopen(), file(), file_get_contents() 함수로 외부 URL 을 읽어 들이기가 안됩니다.
 
Warning: file_get_contents() URL file-access is disabled in the server configuration in
 
하지만, 오류를 해결하는 방법으로 외부 파일을 읽어 들이는 함수 이용전에 다음과 같이 ini 설정을 임시로 변경해서 사용하면 됩니다.
 
@ini_set("allow_url_fopen","1");
 
ini_set() 를 사용해서 해당 페이지에서 일시적으로 allow_url_fopen을 1로 적용해서 이용할 수 있습니다.
 
하지만, allow_url_fopen 이용시 보안상 취약합니다.
아래 cafe24 호스팅 업체로 부터 답변 받은 내용 입니다.
 
최근 발생하고 있는 홈페이지 변조나, 피싱 사이트로의 악용은 대부분 게시판의 취약점이나, php 의 취약점에 의해 발생되고 있습니다. 이중에 가장 빈번한 것이 php 의 외부 사이트 소스 실행 기능 (allow_url_fopen)으로 악의적인 프로그램이 실행되어져서 발생이 되고 있습니다.
이러한 문제로 인하여 한국정보보호진흥원에서는 allow_url_fopen 을 허용하지 않기를 권고 하고 있습니다.
allow_url_fopen 을 허용하게 되면 보안적으로 심각한 문제를 초래 할 수 있습니다.
해당 기능을 켜두게 되면, 원격에서 프로그램을 웹사이트에 삽입하여 실행(PHP injection), 대량으로 웹사이트를 변조 할 수 있게 되므로 어느날 갑자기, 홈페이지 화일이 통채로 지워지거나, 데이터베이스 내용이 모두 사라질수도 있습니다.
 
관련 내용 URL :
 
저희 카페24에서는 기본적으로 해당 기능이 모두 off 로 설정이 되어 있으며, 따라서 고객님께서는 가급적 allow_url_fopen 기능이외에 다른 방법으로 구현을 하시거나, 아래의 예시와 같은 function 을 만들어서 사용하시는 것을 권고합니다. (HttpRequest, http_get, fsockopen 등의 함수로 구현이 가능합니다.)
(allow_url_fopen 기능이란 php 에서 include 를 사용할때 URL 방식으로 파일을 include 할수 있도록 해주는 기능입니다.)
 
(해당 내용이 이해가 되지 않거나, 보안의 위험성을 감수하더라도 반드시 allow_url_fopen 을 사용하셔야 한다면, 고객센터로 연락을 주시면 친절히 상담해 드립니다.)
 
-----------------------------------------------------------------------------------------
function get_url_fsockopen( $url ) {
     $URL_parsed = parse_url($url);
     $host = $URL_parsed["host"];
     $port = $URL_parsed["port"];
     if ($port==0)
          $port = 80;
     $path = $URL_parsed["path"];
     if ($URL_parsed["query"] != "")
          $path .= "?".$URL_parsed["query"];
     $out = "GET $path HTTP/1.0\\r\\nHost: $host\\r\\n\\r\\n";
     $fp = fsockopen($host, $port, $errno, $errstr, 30);
     if (!$fp) {
          echo "$errstr ($errno)<br>\\n";
     } else {
          fputs($fp, $out);
          $body = false;
          while (!feof($fp)) {
          $s = fgets($fp, 128);
          if ( $body )
               $in .= $s;
          if ( $s == "\\r\\n" )
               $body = true;
          }
          fclose($fp);
          echo $in;
     }
}
-----------------------------------------------------------------------------------------
 
위 함수로도 동작 잘 되는군요.
 
 

Warning: Cannot modify header information - headers already sent by 오류 해결 방법

웹프로그램
그누보드 및 제로보드 게시판 이용시 다음과 같은 오류 발생할 경우가 있다.

Warning: Cannot modify header information - headers already sent by (output started at /home/public_html/bbs/_head.php:2)

이와같은 오류는 이미지 Header를 출력 했기 때문에 수정할 수 없다라고 합니다.
논리적 오류로써 header 함수가 호출되기 전에 공백또는 문자 등이 이미 사용자에게 열려 있다는 의미입니다.

즉, 오류 페이지와 연관된 모든 페이지들을 확인해서 헤드 및 세션 처리 이전에 출력된 문자나 공백이 없는지 체크 해서 제거 해주면 되겠지만, 소스가 워낙 복잡한 경우 찾기가 쉽지가 않죠.
이때 소스 맨 상단에 ob_start(); 함수를 선언해주면 PHP4이상의 경우 output buffering을 기능을 사용할 수 있어 더이상 Warning 메시지가 나타나지 않습니다.

이와 같은 처리 단점?은 모든 PHP 스크립트 처리를 메모리 버퍼에 담아두었다가 한꺼번에 출력하게 되므로 페이지를 보여주는데 늦어지는 느낌이 날수도 있으며 ob_start()를 중복 사용시 또다른 오류가 발생할 수도 있습니다.

그누보드에서 적용하기 적당한 위치는 /index.php 파일의 맨 상단에 적용 하시면 됩니다.

<?
ob_start();

define("_MW_INDEX_", TRUE); // index 파일
....



 ▶ 최신영화, 최신 미국드라마 무료 다운로드...

Connecting DB : File '/usr/local/mysql/share/mysql/charsets/?.conf' not found (Errcode: 2)

데이타베이스
Connecting DB : File '/usr/local/mysql/share/mysql/charsets/?.conf' not found (Errcode: 2)

Character set '#192' is not a compiled character set and is not specified in the '/usr/local/mysql/share/mysql/charsets/Index' file

PHP + MySQL 연동시 자주 발생하는 오류로써 MySQL에 문자셋 설정 오류 입니다.
오류 메시지 내용만 보면 ?.conf 문자셋 파일이 없다 그런 내용입니다.
해결 방법을 찾아서 이것저것 해보았지만 해결되지 않더군요.

그래서 오류 메시지가 알려준데로 MySQL에서 이용하는 문자셋중 latin1.xml 파일을 ?.conf 파일로 복사 해줬더니 더이상 오류가 나지 않더군요

일단 MySQL 소스 설치를 /usr/local/mysql 에 하셨다면

cd /usr/lcoal/mysql/share/mysql/charsets/
cp latin1.xml ?.conf

이렇게 하니 더이상 오류가 뜨지 않더군요.


 ▶ 최신영화, 최신 미국드라마 무료 다운로드... 

자리수 지정한 문자로 채우기 str_pad()

웹프로그램

PHP에서 특정 자리수 만큼 지정된 문자로 변경하고자 할 때 간단하게 str_pad() 함수를 이용하면 편리 합니다.
예를들어 1~20까지의 숫자가 있는데 1~9까지는 2자리수로 맞혀 주기 위해 앞에 "0"을 붙이고자 할 경우

str_pad($a, 2, "0", STR_PAD_LEFT);

라고 하면 간단하게 1~9 인경우 앞에 "0"이 붙게 됩니다.
기타 옵션에 따른 결과를 간단히 설명하겠습니다.

<?
$input = "test";
echo "<br>1:".str_pad($input, 8)."s";
echo "<br>2:".str_pad($input, 8, "*", STR_PAD_LEFT)."s";
echo "<br>3:".str_pad($input, 8, "*", STR_PAD_BOTH)."s";
echo "<br>4:".str_pad($input, 5 , "***")."s";
?>

결과 :
1:test    s
2:****tests
3:**test**s
4:test*s

1번은 변경할 문자를 입력하지 않을 경우 " " 부족한 자릿수 만큼 우측에 공백으로 추가합니다.
2번의 경우는 LEFT 부족한 자리수 만큼 왼쪽부터 채우며,
3번 BOTH는 좌,우 모두 균등하게 배치합니다.
만약 남은 공백이 5칸인경우 좌측에 2칸, 우측에 3칸을 추가 합니다.
4번은 변경할 값이 *** 3자리 이지만 자리수를 5칸으로 지정 했기에 * 하나만 적용되었습니다.

다양한 옵션으로 상황에 맞게 적용 하시면 됩니다.

드림위브에서 특정 확장자를 php 또는 asp, jsp 확장자로 인식 하게끔 적용하기

웹프로그램
사용자 삽입 이미지

1. 드림위버에서 .say 확장자 오픈 되도록 적용

드림위버를 실행후 메뉴 > Edit > Preferences > File Types / Editors > Open in code view:
항목에 .say 추가 합니다.

.js .asa .css .cs .config .inc .txt .as .asc .asr .vb .say


2. 드림위버에서 .say 확장자 파일을 불러올 때 php 코드 부분 컬러를 변경 되도록 적용

C:\Program Files\Adobe\Adobe Dreamweaver CS3\configuration\DocumentTypes\MMDocumentTypes.xml

파일을 EditPlus 또는 메모장으로 열어서 Ctrl + F 찾기에서 "php"를 찾습니다.

<documenttype id="PHP_MySQL" servermodel="PHP MySQL" internaltype="Dynamic" winfileextension="php,php3,php4,php5,say" macfileextension="php,php3,php4,php5,gdy" file="Default.php" writebyteordermark="false">

위 소스 라인에서 ,say 라고 추가 한것 처럼 추가 하시면 됩니다.


3. 드림위버 종료후 재시작
반드시 위 사항 적용후 다시 실행 해야 적용 됩니다.
이제 드림위버에서 index.say 라는 파일을 오픈시 바로 열리면서 php 코드가 있으면 지정된 코드 컬러로 표시 될 겁니다.
이와 같이 php 뿐만 아니라 asp, jsp, html 등의 컬로로도 지정 하 실수 있습니다. (2번 항목 응용)
테스트는 Dreamweaver CS3, Dreamweaver CS4 에서만 해봤기에 이하 버전에서도 동일하게 처리 되는지는 확인 하지 못했습니다.

비밀번호 변경시 임의 문자와 숫자 조합으로 생성후 회원에게 이메일 전송 (비번 암호화 원리 팁)

웹프로그램
회원가입후 비밀번호를 잊은 경우 기존 비번이 암호화 처리 되어 있어(개인정보 보호법에 의해 비밀번호 암호화 의무화) 비번을 임의로 생성후 메일로 발송해야 합니다.
문자 조합을 간단하게 해 버릴 경우 해킹 시도시 비번찾기를 이용해서 이메일로 수신된 비번을 보지 않아서 추측해서 알아 낼 수 가 있습니다.
예로 "aa1234bb" 라는 임시 비번으로 생성해서 회원에게 발송하는데, 항상 숫자 부분만 변동해서 보내 준다면 해커는 역으로 0000~9999까지 조합해서 임의로 접속 시도를 해볼수 있게 됩니다.

간혹 보안 적용이 허술한 사이트의 경우 위와 같이 비번을 발송해주는 곳이 더러 있더군요.
개인정보 유출 사고는 위와 같이 개발자의 부주의가 매우 크다고 보면 됩니다.

문자 조합을 복잡하게 하는게 복잡하지도 않습니다.
아래처럼만 처리 해주셔도 랜덤한 값이 되므로 효과 적입니다.

<?
$pw = "0123456789abcdefghijklmnopqrstuvwxyz";
$temp_pw = "";
for($i=0;$i<10;$i++) {
 $temp_pw .= $ipwd[rand(0,35)];
}
echo $temp_pw;
?>

위와 같이 적용시 10자리의 랜덤한 문자 조함 결과가 나옵니다.
더욱 복잡하게 하고 싶으시면 $pw에 문자를 더 추가한 다음 rand(0,35) 값을 더 늘려 주시면 됩니다.
비밀번호 길이 또한 좀더 보안 하고 싶으시면 for() 문에서 10을 더 올려 주시면 더 복잡한 비번이 되는 것입니다.


[추가팁]

간혹 비번을 암호화 하는 방법에 대해 궁금해 하시는 분들을 위한 팁

1. 회원이 입력한 비번을 저장시 간단하게 적용하는방법
- mysql을 이용한다면 insert 경우 저장할 변수에 password() 함수를 이용해서 넣는다.
예) insert member into (passwd) values (password('비번'));

2. 로그인시 입력한 비번이 맞는지 확인
select * from member where id='아이디' and passwd = password('입력한 비번')
값이 있으면 본인, 아니면 로그인 실패처리

3. 비번 찾기시 임의 비번 발송
select * form member where '기타 회원정보로 본인 확인'
- 값이 있으면 위 임의 조합 비번으로 기존 비번 변경
예) update member set password = password('임의 문자 조합 비번') where '본인';
- 변경된 임의 문자 조합 비번 회원의 이메일로 발송

비밀번호 변경시 임의 문자와 숫자 조합으로 생성후 회원에게 이메일 전송 (비번 암호화 원리 팁)

웹프로그램
회원가입후 비밀번호를 잊은 경우 기존 비번이 암호화 처리 되어 있어(개인정보 보호법에 의해 비밀번호 암호화 의무화) 비번을 임의로 생성후 메일로 발송해야 합니다.
문자 조합을 간단하게 해 버릴 경우 해킹 시도시 비번찾기를 이용해서 이메일로 수신된 비번을 보지 않아서 추측해서 알아 낼 수 가 있습니다.
예로 "aa1234bb" 라는 임시 비번으로 생성해서 회원에게 발송하는데, 항상 숫자 부분만 변동해서 보내 준다면 해커는 역으로 0000~9999까지 조합해서 임의로 접속 시도를 해볼수 있게 됩니다.

간혹 보안 적용이 허술한 사이트의 경우 위와 같이 비번을 발송해주는 곳이 더러 있더군요.
개인정보 유출 사고는 위와 같이 개발자의 부주의가 매우 크다고 보면 됩니다.

문자 조합을 복잡하게 하는게 복잡하지도 않습니다.
아래처럼만 처리 해주셔도 랜덤한 값이 되므로 효과 적입니다.

<?
$pw = "0123456789abcdefghijklmnopqrstuvwxyz";
$temp_pw = "";
for($i=0;$i<10;$i++) {
 $temp_pw .= $ipwd[rand(0,35)];
}
echo $temp_pw;
?>

위와 같이 적용시 10자리의 랜덤한 문자 조함 결과가 나옵니다.
더욱 복잡하게 하고 싶으시면 $pw에 문자를 더 추가한 다음 rand(0,35) 값을 더 늘려 주시면 됩니다.
비밀번호 길이 또한 좀더 보안 하고 싶으시면 for() 문에서 10을 더 올려 주시면 더 복잡한 비번이 되는 것입니다.


[추가팁]

간혹 비번을 암호화 하는 방법에 대해 궁금해 하시는 분들을 위한 팁

1. 회원이 입력한 비번을 저장시 간단하게 적용하는방법
- mysql을 이용한다면 insert 경우 저장할 변수에 password() 함수를 이용해서 넣는다.
예) insert member into (passwd) values (password('비번'));

2. 로그인시 입력한 비번이 맞는지 확인
select * from member where id='아이디' and passwd = password('입력한 비번')
값이 있으면 본인, 아니면 로그인 실패처리

3. 비번 찾기시 임의 비번 발송
select * form member where '기타 회원정보로 본인 확인'
- 값이 있으면 위 임의 조합 비번으로 기존 비번 변경
예) update member set password = password('임의 문자 조합 비번') where '본인';
- 변경된 임의 문자 조합 비번 회원의 이메일로 발송

리눅스 서버 apache php 오류 Cannot load /usr/local/apache/libexec/libphp4.so into server: /usr/local/apache/libexec/libphp4.so: cannot restore segment prot after reloc: Permission denied

서버,보안

아파치 서버에 PHP를 이용시 아래와 같은 오류가 발생시 :

[root@ ~]# /usr/local/apache/bin/apachectl restart
/usr/local/apache/bin/apachectl restart: httpd not running, trying to start
Syntax error on line 56 of /usr/local/apache/conf/httpd.conf:
Cannot load /usr/local/apache/libexec/libphp4.so into server: /usr/local/apache/libexec/libphp4.so: cannot restore segment prot after reloc: Permission denied
/usr/local/apache/bin/apachectl restart: httpd could not be started

해결 방법 :

[root@ ~]# chcon -t texrel_shlib_t /usr/local/apache/libexec/libphp4.so

위 명령어 한번 실행 해 주고나서 apache 다시 시작 해 보세요!
간단히 해결 되죠!

그누보드에서 일반 블로그 처럼 메타테그 적극 활용하기

웹프로그램
홈페이지 title 및 메타태그는 방문자 유입을 위한 가장 기본적인 기능이다.

검색 엔진(로봇)의 경우 홈페이지의 title 또는 메타 태그 내용을 기반으로 검색어를 생성 하므로 게시판 내용의 경우 제목영역이 title이나 메타태그로 지정 되면 매우 효과 적이다.

이러한 특성을 잘 살리고 있는것이 블로그 들이다.

티스토리의 경우 역시 게시글의 제목을 <title>제목</title> 형식으로 이용해서 검색 노출에 매우 좋은 효과를 보이고 있다.

하지만, 그누보드의 경우 "사이이트명 > 게시판 제목 ..." 형태로 표시되어서 검색 효과를 보지 못하게 됩니다.

따라서, /head.sub.php 에서 "//title 적용 부분" 주석 처리 된 부분을 다음과 같이 수정하시면 각 페이지 환경에 맞게 출력이 됩니다.

//title 적용 부분
if($write['wr_subject']) { //게시판 본문 적용
 $g4['title'] = $write['wr_subject']." - ";
} else if($board['bo_subject']) { //게시판 리스트 적용
 $g4['title'] = $board['bo_subject']." - ";
}
//모든페이지 적용
$g4['title'] .= $config['cf_title']." - 개발자 커뮤니티 포탈";

PHP 특정 폴더 내에 있는 파일들을 선택적으로 삭제 하고자 할 때

웹프로그램
간혹 특정 폴더(디렉토리) 내에 있는 파일들 중에 전체 또는 선택 적으로 일괄 삭제를 해야 할 경우가 있습니다.

다음과 같은 함수를 할용하시면 됩니다.

1. opendir(path)
path 지정한 경로의 폴더안에 있는 파일들을 불러 옵니다.
예)
<?php
$dir
= "/etc/php5"
;

// 알고 있는 디렉토리를 열어서, 내용을 읽어들이는 작업입니다.
if (is_dir($dir
)) {
    if (
$dh = opendir($dir
)) {
        while ((
$file = readdir($dh)) !== false
) {
            echo
"filename: $file : filetype: " . filetype($dir . $file) . "\n"
;
        }
       
closedir($dh
);
    }
}
?>

결과)
filename: . : filetype: dir
filename: .. : filetype: dir
filename: apache : filetype: dir
filename: cgi : filetype: dir
filename: cli : filetype: dir


2. glob(패턴)
파일의 패턴을 호출할때 사용합니다. 예로 *.txt 라고 하면 txt 확장자 파일을 모두 찾아 줍니다.
예)
<?php
foreach (glob("*.txt") as $filename
) {
    echo
"$filename size " . filesize($filename) . "\n"
;
}
?>

결과)
funclist.txt size 44686
funcsummary.txt size 267625
quickref.txt size 137820


3. unlink(파일)
지정한 파일 및 폴더를 삭제 합니다. 위 함수를 이용해서 찾은 파일을 삭제하고자 할때 이용합니다.
예)
<?php
$fh
= fopen('test.html', 'a'
);
fwrite($fh, '<h1>Hello world!</h1>'
);
fclose($fh
);

mkdir('testdir', 0777
);

unlink('test.html'
);
unlink('testdir'
);
?>

결과) 지정한 파일 삭제

삭제할 파일의 폴더에 지울수 있는 권한이 있어야 합니다.

리눅스 페도라10 버전에 php-5.1.4 버전 설치하기

서버,보안

1. php-5.1.4 버전 다운로드 및 압축 풀기
wget http://ftp.linux.co.kr/pub/php/php-5.1.4.tar.bz2
tar xvfj php-5.1.4.tar.bz2
cd php-5.1.4

* 위 URL로 PHP를 다운로드 안 받아 질경우 아래 파일 직접 다운로드


2. 환경설정
중요한 세팅을 할 필요가 있다. 바로 환경변수부분인데..
/etc/profile 파일을 열어서 제일 상단에 아래부분을 추가하도록 하자.
# vi /etc/profile
=======================================================================================
APACHE_HOME=/usr/local/apache
ORACLE_HOME=/usr/lib/oracle
LD_LIBRARY_PATH=/usr/lib/oracle
export APACHE_HOME ORACLE_HOME LD_LIBRARY_PATH
export NLS_LANG=.KO16KSC5601
=======================================================================================
파일을 수정했다면 시스템에 반영하도록 한다.
# source /etc/profile

CFLAGS="-O3 -march=i686 -funroll-loops -fomit-frame-pointer" ./configure --with-apxs2=/usr/local/apache/bin/apxs --with-zlib --with-gd --with-ttf --with-png --with-expat-dir=/usr --with-gmp --with-xml --with-mysql=/usr/local/mysql --with-language=korean --with-charset=euc_kr --disable-debug --disable-posix --disable-rpath --enable-safe-mode --enable-magic-quotes --disable-dmalloc --enable-bcmath --enable-dio --enable-gd-native-ttf --enable-sysvsem --enable-wddx --enable-versioning --enable-pic --enable-inline-optimization --enable-memory-limit --enable-mbstring --enable-mbregex --enable-mbstr-enc-trans --with-config-file- --enable-ftp --disable-debug --enable-track-vars=yes --with-jpeg-dir --with-freetype-dir --enable-gd-native-ttf --enable-dl
make && make install


3. php.ini 파일 복사
cp php.ini-dist /usr/local/lib/php.ini


4. Zend Optimizer 다운로드 압축 풀기
http://www.zend.com/download/140 에서 최신 버전을 다운 받거나 아래 파일을 다운로드
tar xvzf ZendOptimizer-3.3.9-linux-glibc23-i386.tar.gz
cd ZendOptimizer-3.3.9-linux-glibc23-i386
./install.sh

* 위 사이트 접속후 다운로드 받기 귀찮을 경우 아래 다운로드 (회원가입해야함)


5. 아파치에서 php를 인식하도록 추가
vi /usr/local/apache/conf/httpd.conf
# 위의 부분이 추가되어 있는지 확인하자.
LoadModule php5_module        modules/libphp5.so

#  DirectoryIndex 조회후  index.php index.phtml 추가
DirectoryIndex index.html index.html.var index.php index.phtml

# AddType application/x-gzip .gz .tgz 이 내용 바로 밑에 붙여주면 좋겠죠
AddType application/x-httpd-php .php .phtml
AddType application/s-httpd-php-source .phps


6. 아파치 재시작
/usr/local/apache/bin/apachectl restart


* 아파치 실행시 libphp5.so error 발생시
/usr/local/apache/bin/apachectl restart
Syntax error on line 232 of /usr/local/apache/conf/httpd.conf:
Cannot load /usr/local/apache/modules/libphp5.so into server: /usr/local/apache/modules/libphp5.so: cannot restore segment prot after reloc: Permission denied

cd /usr/local/apache/modules
restorecon -v libphp5.so
chcon -t texrel_shlib_t libphp5.so


* make Warning 발생시
Warning: Cannot use a scalar value as an array in phar://install-pear-nozlib.phar/PEAR/ChannelFile.php on line 1391
Warning: Cannot use a scalar value as an array in phar://install-pear-nozlib.phar/PEAR/ChannelFile.php on line 1396
.........

http://www.pear-forum.org/post-5065.html 참고

make test
php 설치된 디렉토리에 하부 .channels 라는 디렉토리 내용만 지워주면 됨

위 글은 세이박스에서 작성한 글이므로 퍼가기 하실때에는 반드시 출처를 남겨 주세요.
 

PHP 설치시 생길수 있는 오류 해결 방법

서버,보안
오류1:
configure: error: DBA: Could not find necessary header file(s).

해결:
관련 라이브러리를 설치하면 됩니다.
yum install gdbm-devel


오류2:
configure: error: Cannot find ldap.h

해결:
위와 같은 오류 발생의 원인은 필요한 패키지가 설치되지 않아서 생긴 오류 입니다.
즉, 리눅스 설치 하실때 개발 패키지라고 있죠 그거 왠만해선 체크해서 설치 해주시는게 좋습니다.
특히 소스 설치시에 필요한 패키지가 없어서 위와 같은 오류가 생기는 것으로써 소스 설치시에 필요한 것들을 yum 으로 모두 설치 해주는게 좋습니다.
이미 설치된것은 설치를 하지 않으니 yum 이 아주 편리하죠.

yum -y install gcc cpp gcc-c++ compat-gcc-32-g77 flex libjpeg-devel libpng-devel libtiff-devel freetype-devel openldap-devel pam-devel sendmail-cf vsftpd telnet-server

위 패키지 설치후

vi /etc/selinux/config
SELINUX=enforcing -> disabled


수정후 서버 재부팅 한뒤에 PHP 새로 설치 하니 오류 안떠더군요.
근데, 아마도 마지막 처리만으로 되는 문제 였던것 같기도 하네요 ^^;

php DB 인젝션 공격 방어

웹프로그램
인젝션 방어를 위한 처리를 하기 위해선
get, post 로 넘어오는 모든 변수중에서 DB에 사용될 변수에 대해 검수를 거친뒤에 DB에서 사용하도록 해야하나 이미 구축된 사이트에 일일이 적용하기엔 힘들 경우 아예 get, post 데이터 전체를 검사하도록 다음과 같이 구현해 봤습니다.

//인젝션 공격 막기 넘어오는 변수들 모두 검사

//GET
while(list($fildn1,$fildv1) = each($_GET)) {
  if(eregi("--",$fildv1)) {
    echo "<script>alert('[요청거절] 요청하신 값중에 사용할 수 없는 코드가 들어 있습니다.');history.back();</script>";
    exit;
  }
}

//POST
while(list($fildn2,$fildv2) = each($_POST)) {
  if(eregi("--",$fildv2)) {
    echo "<script>alert('[요청거절] 요청하신 값중에 사용할 수 없는 코드가 들어 있습니다.');history.back();</script>";
    exit;
  }
}

일단 인젝션 공격에 대표적인 문구인 "--" 하나 넣어 봤는데 필요시 "--|;|\.js" 처럼 "|"로 구분해서 추가 하면 되겠죠!
물론, 정상적인 값들까지 차단 될 수 있다는 문제가 있긴 합니다.
따라서, 차단할 패턴은 잘 선택해서 입력하세요.
그리고, ".js" 앞에 "\" 표시 붙인 이유는 "." 점이 정규식 예약어라서 무시하도록 하기 위해 "\"원화 표시를 붙여 줍니다.
정규식 예약어는 세이박스에서 조회 해서 확인 하세요!

하지만, 효율성을 위해서 사이트 구축시 처음부터 인젝션 공격을 고려해서 코딩 하세요!
이게 정답이다 할만한건 없지만 자신의 사이트에 맞는 최적화 방법이 최고 입니다.

예로 들자면 $num 이라는 변수에는 단순 숫자만 넘어와야한다면
if(eregi("[^0-9]",$num)) echo "접속차단";

이런식으로 필요하지 않는 값을 원천적으로 차단 해주는게 가장 좋습니다.
이유인즉, 최근에는 Ascii 코드 값으로 문자를 만들어 공격 하기도 합니다.
이럴경우 제가 만든 소스로는 좀 힘들겠죠...

그럼, 여러분들이 만들어 두신 좋은 차단 방법 좀 있으면 올려주세요~
화이팅!!

php upload 용량 늘리기

웹프로그램
업로드시 용량 제한으로 인해 업로드 되지 않는 경우가 있습니다.
php.ini 파일을 수정해주시면 되는데
기본 설정이 보통 2MB 로 되어 있습니다.
php.ini 파일의 설치 경로에 따라 다를 수 있지만 대부분
기본 경로는 /usr/local/php/lib/php.ini 에 보통 설치 합니다.
해당 파일에서 아래 위치 부분들을 수정 해주시면 됩니다.

파일 업로드 적용 여부
file_uploads = On

파일 업로드 최고 용량 지정 MB
upload_max_filesize = 20M

POST상에 전송되는 용량 지정 upload_max_filesize와 동일하게 맡혀 주시면 됩니다.
post_max_size = 20M

파일이 업로드 되는데 걸리는 시간 최대값, 300초면 5분정도이며 무한정 세션을 열어 주면 서버 부하가 많이 걸려 시간을 제한을 둡니다. 인터넷 느린 사용자를 감안해서 조금 넉넉하게 잡아 주시면 됩니다.
예로 20MB 제한을 할경우 20MB 파일을 올려보세요!
max_execution_time = 300

업로드 동안 사용할 메모리? 용량 지정해줍니다.
memory_limit = 20M

수정후 아파치 재시작 하시면 됩니다. 

PHP str_pad() 자릿수 맞혀 수정하기

웹프로그램
변수값에서 자릿수를 맞혀줘야 할때가 종종 있다.
예를 들면 날짜 데이터가 2009-04-10 이런식으로 처리되어야 하는데
넘어온값이 "2009-4-10" 이렇게 넘어 오는 경우 예전에
if($day<10) $day = "0".$day;
이렇게 변경 해주곤 했었다.
하지만 이보다 자릿수가 많은경우 매우 복잡해진다.
예를 들어 00000210 으로 맞혀 줘야 한다면 OTL 헉...

하지만 str_pad() 함수를 이용하면 간단하다.

Description

string str_pad ( string $input , int $pad_length [, string $pad_string= " " [, int $pad_type= STR_PAD_RIGHT ]] )

This functions returns the input string padded on the left, the right, or both sides to the specified padding length. If the optional argument pad_string is not supplied, the input is padded with spaces, otherwise it is padded with characters from pad_string up to the limit.


위 내용은 php.net에서 설명하는 내용 입니다.
str_pad(검사할값,자릿수,변경할값,왼쪽또는오른쪽기준);

예를 들어보겠다.
$test = "123" 을 자릿수 10자리로 한다면

echo str_pad($test,10,"0",STR_PAD_LEFT);

결과는 "0000000123" 와같이 출력이 됩니다.

그럼, 잘활용 하세요!

addslashes() stripslashes() DB 저정시 '홀따옴표에 \백슬러시 붙였다 빼주는 함수

웹프로그램
 
addslashes()
DB에 데이터를 입력할 때 ' 홀따옴표가 들어가는경우 오류가 나는걸 방지 하기위해 ' 앞에 \ 백슬러시를 붙이는 역할을 합니다. \' 처럼...
 
stripslashes()
addslashes() 반대 되는 역할로써 ' 홀따옴표에 \붙여진걸 제거 해주는 역할을 합니다.
 
게시판등 사용자의 입력내용을 받을때 유용하게 활용 하면 str_replace 등으로 굳이 변환하지 않고 DB에 바로 저장 가능합니다.

php uft-8, euc-kr 인코딩 변환 iconv()

웹프로그램
 
DB에 있는 값이 UTF-8 인데 EUC-KR로 변경하고 자 할때 또는 반대로 EUC-KR로 저장된 값을 UTF-8 로 변경 하고자 할 경우.
 
iconv() 함수를 이용 하면됩니다.
 
인코딩이 틀릴 경우 한글이 깨져 버리는 증상이 있어 이와 같이 변경할 필요가 있지요.
 
$content = "UTF-8로 된 내용";
$content = iconv("UTF-8","EUC-KR",$content);


출처 : 세이박스 http://saybox.tistory.com

[PHP] 한글삭제 정규식

웹프로그램
 

1. 영문자를 제외한 모든 문자를 null로 치환
preg_replace("/[^A-Za-z]/", "", $a);
결과 : "testtest"

 2. 영문자와 공백문자(Space)를 제외한 모든 문자를 null로 치환
preg_replace("/[^A-Za-z|\x20]/", "", $a);
결과 : " test  test"

 3. ASCII 범주 코드 영문+특수문자를 제외한 모든 문자를 null로 치환
preg_replace("/[^\x20-\x7e]/", "", $a);
결과 : " test.  test  ??"

 4. 한글만 빼경우는 한글의 모든 코드 범주를 대응해줘야 합니다.

http://www.php.net/manual/kr/function.ord.php 를 참고.


<?
$a="test 테스트 1234 ???";
for ($i=0; $i<strlen($a); $i++) {
  $char_ord = ord($a[$i]);
  if ($char_ord >= 65 && $char_ord <= 122) echo $a[$i];
}
?>

또는 다음과 같이

<?
$str = "abcd 한글 1234";
if(preg_match("/[\xA1-\xFE][\xA1-\xFE]/", $str)) {
  echo"한글있다";
} else {
  echo"한글없다";
}
?>
 
정규식으로 한글의 범위는 \xa1-\xfe 로 표현하시면 됩니다.
<?
if(!ereg("^[\xa1-\xfe0-9a-zA-Z]+$",$name)) {
  echo"한글과 영문,숫자만 입력할 수 있습니다";
}
?>

PHP strip_tags() 문자열에 html 태그나 php문구 모두 제거

웹프로그램
글 작성시 html 에디터 등으로 작성된 글에서 텍스트만 필요한 경우
 
string strip_tags(string str [, string allowable_tags])
 
* 문자열 str에서 html이나 php태그를 모두 제거한 문자열을 반환한다.
 
* allowable_tag은 문자열 str에 적용되어 있는 html, php태그를 사용할 경우, 그 태그는 제거하지 않고 적용어 있는 문자열을 반환한다.
 
예)
$ddd = "<P><STRONG><FONT color=#ff0000 size=3>‘스타’와 ‘연인’은 끝내 헤어질 것인가.</FONT></STRONG></P>";
echo strip_tags($ddd);
 
결과)
스타’와 ‘연인’은 끝내 헤어질 것인가.
 
 
출처 : 세이박스 http://saybox.tistory.com

PHP Header 다운로드 에서 파일이름이 한글로 된경우 바로 열기 다운로드 안되는경우

웹프로그램
 
문서.hwp 이름으로 된 파일을 php Header 방식으로 다운로드 받고자 할 경우
 
다운이 안되는 경우
 
session_start();
header("Cache-control: private");
소스 상단에 위와 같이 두줄 추가 해주면됩니다.

PHP 로그인후 현재 페이지로 돌아오기 처리

웹프로그램
 
게시판 글쓰기를 눌렀는데 로그인 페이지로 이동 해서 로그인후 자동으로 방금 글쓰기를 할려고 하던 페이지로 이동하도록 처리 하고 싶다면 리턴URL 값을 urlencode로 넘겼다가 다시 받는 방식을 이용하면 됩니다.
 
* 글쓰기 페이지
<?
//현재 페이지 URL을 만듭니다.
//아래 결과 : /board/write.php?page=
$rurl = urlencode($_SERVER['PHP_SELF']."?".$_SERVER['QUERY_STRING']);
if(로그인확인) {
  //로그인이 안된경우 로그인 페이지 이동
  //아래 결과 : <script>location.href='/member/login.php?rurl=%2Fboard%2Fwrite.php%3Fpage%3D';</script>
  echo "<script>location.href='/member/login.php?rurl=$url';</script>";
}
?>
 
* 로그인페이지
<form>
<input type="text" name="id">
<input type="text" name="pw">
<input type="hidden" name="rurl" value="<?=$rurl?>">
</form>
//$url : %2Fboard%2Fwrite.php%3Fpage%3D
 
* 로그인 처리 페이지
//로그인 처리 후 페이지 이동전
$rurl = urldecode($rurl);
if(isset($rurl)) {
  echo "<script>location.href='$rurl';</script>";
}
 
복잡해 보일수도 있으나 간단하죠!
로그인 페이지로 이동할때 현재 페이지 URL을 변수에 담아서 보내었다가 로그인 처리페이지에서 넘겨 받은 로그인전 페이지 값이 있으면 해당 페이지로 이동.
여기시 urlencode를 사용하는 이유는 위 처럼 post방식에선 필요성이 없으나 간혹 링크 방식으로 보낼경우 뒤에 붙은 변수값이 마치 처리페이지 변수값으로 넘어 가는걸 방지하기 위함입니다.
예)
<?
$url = $_SERVER['PHP_SELF']."?".$_SERVER['QUERY_STRING'];
?>
<a href="/login.php?rurl=<?=$rurl?>">로그인</a>
 
예처럼 처리할 경우 결과는?
<a href="/login.php?rurl=/board/write.php?page=1&table=book">로그인</a>
이렇게 넘어갈 경우 table=book이라는 값은 로그인 처리후 넘겨 주지 못하게 됩니다.
따라서 urlencode, urldecode를 사용하는 것입니다.
 
도움이 되셨는지 모르겠네요 ^^

PHP 웹에서 서버 동시 접속자 수 확인 하기

웹프로그램
동시 접속자 확인 하기 위해선 서버에서 root 권환으로
netstat -n | grep 80 | grep ESTABLISHED | wc -l
이라고 실행하면 동시 80 포트로 접속한 사람 수 가 나타납니다.

netstat -n | grep 80
라고만 실행하면 Fin_Wait, Time_Wait 인 접속자 수 모두를 표시 하게 됩니다.

웹상에서 리눅스 명령을 실행할땐 exec 함수를 사용합니다.

<?
$cmd = "netstat -n | grep 80 | grep EST | wc -l";
exec($cmd, $cmd_result);
$count = sizeof($cmd_result);
echo "현재 접속자 수 : ".$count.";
echo "<br>";
$cmd = "netstat -n | grep 80";
exec($cmd, $cmd_result);
$count = sizeof($cmd_result);
echo "Fin_Wait, Time_Wait 포함 현재 접속자 수 : ".$count;
?>

출력결과 :
현재 접속자 수 : 10
Fin_Wait, Time_Wait 포함 현재 접속자 수 : 132

IIS 6.0 에서 php5 설치

서버,보안
 
정확한 설명서라기 보다는 그냥 내가 이렇게 했다는 메모라고 할 수 있다.
 
아파치와 연동시키는게 더 나을 수도 있겠지만, 윈도우에서는 IIS가 더 좋은 성능을 발휘할 꺼라
생각해서이다.. (테스트 해본적은 없음. ㅡ.ㅡ)
 
1. php 압축파일 버전을 받아서 설치한다.
2. 설치된 디렉토리를 PATH 에 추가한다. 적용해도 PATH에 바로 들어가진 않으니까 명령 프롬프트
  에서 'PATH=%PATH%;설치 디렉토리;' 를 입력한다.
3. php.ini-recommended를 php.ini로 이름 바꿔서 c:\windows 에 복사.
(-- 3-x 의 과정은 안해도 됨 --)
3-1. php.ini 속성에서 display_errors = On, log_errors = Off 로 한다.
3-2. error_reporting = E_ALL & ~E_NOTICE 로 한다.
3-3. extension_dir 을 설정한다. (php 설치 디렉토리에서 ext 디렉토리)
3-4. extension 중 php_exif.dll, php_gd2.dll, php_sockets.dll의 주석을 해제한다.
3-5. extension=php_mbstring.dll 과, extension=php_mysqli.dll 를 extension 부분의 제일 위에
  입력한다. (exif가 mbstring을 필요로 하는데 dll은 ini에 기술된 순서대로 로딩된다.)
4. php디렉토리와 그 하위 디렉토리, 웹 사이트 루트와 그 하위 디렉토리, php.ini를 웹사이트 계정
  이 접근할 수 있도록 권한을 설정한다. (웹사이트 루트 디렉토리가 최상위 폴더, 즉 d:\www 같은
  것이 아니고 d:\w3\main 같은 것일 경우에는 w3도 읽기 권한이 있어야 한다. 본인은 Users로
  권한을 설정했음.)
5. IIS 관리자를 띄워서 웹사이트의 등록 정보를 연다.(모든 사이트에 공통 적용하기 위해서)
6. 홈 디렉터리 탭에서 구성 버튼을 누른다.
7. 응용프로그램 확장의 추가 버튼을 눌러 실행파일은 php5isapi.dll을 지정하고, 확장명은 '.php',
  모든 동사 그리고 체크박스 둘다 체크되어 있는 상태로 확인
8. 웹사이트 등록 정보 수정 끝~
 
(-- 9, 10 과정이 IIS 5.X 이하와 틀림 --)
 
9. 웹 서비스 확장으로 가서 새 웹 서비스 확장 추가를 한다.
10. 확장 이름은 php로 하고, 필요한 파일에 php5isapi.dll을 추가하고, 확장 상태를 허용됨으로 체
  크한 다음에 확인.
11. IIS를 재시작 한다.
12. phpinfo()를 해보고 기쁨을 누린다.

PHP 처리후 페이지 이동 하는 방법들

웹프로그램
1. 메타 이동 방식
<?
echo "<meta http-qequiv='refresh' content='0; url=http://도메인'>";
?>
 
0; <- 지연시간을 설정 할 수 있습니다.
 
2. 자바스크립트 방식
<?
echo "<script-x>document.location.href='도메인';</script-x>
?>
 
document. 대신 window. 사용 가능합니다.
 
3. PHP 헤드 사용
<?
header("Location: 도메인");
?>
 
이 방식의 단점이자 장점은 사용자 메시지를 보여 줄 수 없다는 것입니다.
장점으론 사용자의 브라우저와 처리와 상관없이 이동하므로 확실하게 이동시키는 방법 인듯 합니다.
 
어쨌던 자신에게 편리한 방법으로 이용 하시면 될 듯 합니다.

PHP 날짜함수 요일 한글로 표시하기

웹프로그램
 <?
  echo date("m월 d일");
  switch(date("w")) {
   case 0: echo " (일)"; break;
   case 1: echo " (월)"; break;
   case 2: echo " (화)"; break;
   case 3: echo " (수)"; break;
   case 4: echo " (목)"; break;
   case 5: echo " (금)"; break;
   case 6: echo " (토)"; break;
  }
?>
 
결과:
10월 18일 (토)

PHP session_destroy() 오류

웹프로그램
 
질문:
session_destroy() 을 쓰면.. 아래와 같은 에러가 발생합니다...세션두 안 묵구여???

Warning: session_destroy() [function.session-destroy]: Trying to destroy uninitialized session in
 
답변:
위와 같은 경우 대부분 session_destroy(); 함수 사용전 session_start(); 빠트린 경우가 대부분 입니다.
 
참고:
session_destroy() : 모든 session data를 파괴
session_unregister("세션명") : 특정 세션만 없애고자 할 때는 을 사용

PHP 제로보드 이미지 한글 파일명 업로드 깨짐 엑박 되는 현상

웹프로그램
 
제로보드에서 이미지 업로드시 파일명이 한글로 되어 있는경우 엑박 (깨짐) 처리 되는경우를 방지 하기 위해 아예 파일명을 숫자로 변경해버리는 방법입니다.
 
수정파일 : write_ok.php
 
수정위치 :
이미지 파일이 업로드 2개까지 가능하니 두군데 적용.
 
 
// 디렉토리를 검사함 <=== 검색 해보시면 두군데가 있을겁니다.
 
   // 디렉토리를 검사함
   if(!is_dir("data/".$id)) {
    mkdir("data/".$id,0777);
    @chmod("data/".$id,0706);
   }
 
위 코드 다음 줄에 아래와 같이 등록해주시면 됩니다.
 
1. 첫번째 위치
 
   // 디렉토리를 검사함
   if(!is_dir("data/".$id)) {
    mkdir("data/".$id,0777);
    @chmod("data/".$id,0706);
   }
 
   // 파일명이 한글인 경우 날짜로 변환
   $temp=explode(".",$s_file_name1);
   $file_name_1=$temp[0];
   for($i=0;$i<strlen($file_name_1);$i++) {
    if(ord($file_name_1[$i])>0x80) {
     $temp1=explode(".",$s_file_name1);
     $s_file_name1 = $reg_date."1.".$temp1[1];
     break;
    }      
   }
 
2. 두번째 위치
 
   // 디렉토리를 검사함
   if(!is_dir("data/".$id)) {
    mkdir("data/".$id,0777);
    @chmod("data/".$id,0706);
   }
   
   $temp=explode(".",$s_file_name2);
   $file_name_2 = $temp[0];
   for($i=0;$i<strlen($file_name_2);$i++) {
    if(ord($file_name_2[$i])>0x80) {
     $temp=explode(".",$s_file_name2);
     $s_file_name2 = $reg_date."2.".$temp[1];
     break;
    }      
   }