'프로그래밍/PHP'에 해당되는 글 60건

  1. 2012.10.25 cakephp 사용법
  2. 2012.10.23 php 세션 유지시간 늘리기
  3. 2012.10.16 php4버전 이하에서 array_combine 함수
  4. 2012.10.09 utf-8 환경에서 메일 발송시 한글 깨질때
  5. 2012.09.12 그누보드 글쓰기에는 $wr_id 값을 사용하지 않습니다 오류해결
  6. 2012.09.04 utf -8 글자르기시 깨질때 .. 다른 펑션
  7. 2012.08.17 제로보드 XE 이전시
  8. 2012.08.07 [브라우저] [html압축]간단한 브라우저 렌더링/전송속도 개선 설정
  9. 2012.08.06 jquery 이미지 롤링 1개만 돌아가게끔 처리하는것
  10. 2012.08.03 tinymce editor 사용시 엔터 P 태그를 BR로 바꾸는법
  11. 2012.07.09 다음 에디터 이용시 글삭제 할때 첨부 이미지도 같이삭제하게 하는 처리
  12. 2012.04.20 어떤 스마트폰으로 접속했는지 알아내는 소스 , (안드로이드 아이폰 )
  13. 2012.01.18 sendmail utf-8 메일 발송시 글자 깨질때..
  14. 2012.01.08 페이지내용 저장
  15. 2012.01.05 php extract 사용시
  16. 2012.01.02 에디터 글내용 이미지 추출
  17. 2011.12.01 extract 사용시
  18. 2011.10.21 글내용 이미지 리사이징
  19. 2011.04.18 php boolean
  20. 2011.03.21 htmlentities <-> html_entity_decode (엔티티 변환, 태그변환)
  21. 2011.03.18 소켓통신 작업 샘플소스
  22. 2011.03.10 다른쪽 데이터 작업시,다른서버 데이터
  23. 2011.03.09 홈페이지 아이폰 접속시 에이전트 체크
  24. 2011.02.16 트위터 php 연동..
  25. 2011.01.25 내꺼 솔루션 이용약관
  26. 2011.01.25 day text 날짜별 스위치
  27. 2011.01.14 네이버 지도 api php버전
  28. 2011.01.10 로컬 mp3 실제 길이 알아내는 소스
  29. 2010.10.19 간단한 XML 파싱 소스
  30. 2010.10.05 게시판에 특정 태그만 허용하게끔 수정

cakephp 사용법

Posted by 비회원 프로그래밍/PHP : 2012.10.25 11:12

1.다운

http://cakephp.org/

 

2.압축해제

 

3.서버에올리긔

 

4./app/Config/database.php.default 복사 => /app/Config/database.php 생성 후

$default 내에 DB 계정정보 입력.

 

5./app/Config/core.php 내에 187 line , 192 line

Security.salt = > 암호화 할 키값. 영문+숫자

Security.cipherSeed => 암호화 할 키값2 . 숫자로 구성

 

 

신고

댓글을 달아 주세요

php 세션 유지시간 늘리기

Posted by 비회원 프로그래밍/PHP : 2012.10.23 11:32

cookie는 창이 꺼지면 처리되게끔 할수있는데

session 도 cookie랑 동일하게 묶어서 사용하지 않는이상 연결하기 힘들다.

그때 간단하게 session 유지시간을 늘리는 방법

ㅇㅇ;

 


session_cache_expire(36000);   // <<-- 이거
session_start();
#session_cache_expire();   // <<-- 여 앞에 echo 를 때려서 남은 시간을 확인할 수 있다.

 

ㅇㅇ.

 

 

 

신고

댓글을 달아 주세요

php4버전 이하에서 array_combine 함수

Posted by 비회원 프로그래밍/PHP : 2012.10.16 11:04



function array_combine($arr1, $arr2) {
    $out = array();
   
    $arr1 = array_values($arr1);
    $arr2 = array_values($arr2);
   
    foreach($arr1 as $key1 => $value1) {
        $out[(string)$value1] = $arr2[$key1];
    }
   
    return $out;
}

ㅇㅇ

그러하다..

신고

댓글을 달아 주세요

utf-8 환경에서 메일 발송시 한글 깨질때

 

제목,이름은

$제목 = '=?UTF-8?B?'.base64_encode( $제목 ).'?=';

여기서 맨 뒤의 .'?=' 를 빼먹지말고 써야함. 안그러면 이름에 =?UTF-8?B?Lm1023YFDA 이런걸로 나가버림.

 

내용은

$내용 = chunk_split(base64_encode( $내용 ));

 

ㅇㅇ.

 

신고

댓글을 달아 주세요

그누보드 글쓰기에는 $wr_id 값을 사용하지 않습니다 오류해결

 

간단하다.


write.skin.php 마지막에 있는
-----------------------------------------
<?
    if ($g4[https_url])
        echo "f.action = '$g4[https_url]/$g4[bbs]/write_update.php';";
    else
        echo "f.action = './write_update.php';";
    ?>
-----------------------------------------

-----------------------------------------
function fwrite_submit(f)
{
-----------------------------------------
이것 다음으로 옮겨주면 됩니다.

 

 

만약. 이것을 했는데도 안된다?

왼쪽 하단에 스크립트 오류가 뜨는지 확인해보고,

만약 스크립트 오류가 발생하는것이라면

form submit 하는 과정에서 action 값을 지정해서 넘어가야 되는 부분이 있는데

스크립트 오류때문에 action 값이 지정되지 않은 상태로 페이지가 이동되어 생기는 문제임.

 

스크립트 다른것 다 없애보고도 안되면... 뭐.. ㅇㅇ.;

난 여기서 잘 됐다.

 

신고

댓글을 달아 주세요


 function jp_cut_str($msg, $cut_size,$showmore="...") {
  $temp_msg=mb_substr(strip_tags($msg),0,$cut_size, 'UTF-8');
  if(mb_strlen($msg, "UTF-8")>$cut_size){$temp_msg.="...";}
  return $temp_msg;
 }

 

 

//--------------------------------------------- 문자열 특정 길이로 자르기 리턴 ---------------------------
function bear3StrCut($str,$len,$tail="..."){
for($i=0;$i<$len;$i++){
if((Ord($str[$i])<=127)&&(Ord($str[$i])>=0)){$result .=$str[$i];}
else if((Ord($str[$i])<=223)&&(Ord($str[$i])>=194)){$result .=$str[$i].$str[$i+1];$i+1;}
else if((Ord($str[$i])<=239)&&(Ord($str[$i])>=224)){$result .=$str[$i].$str[$i+1].$str[$i+2];$i+2;}
else if((Ord($str[$i])<=244)&&(Ord($str[$i])>=240)){$result .=$str[$i].$str[$i+1].$str[$i+2].$str[$i+3];$i+3;}
}
return $result.$tail;
}

신고

댓글을 달아 주세요

제로보드 XE 이전시

Posted by 비회원 프로그래밍/PHP : 2012.08.17 10:20

1.폴더권한 확인 707

2.호스팅 이전후 할일

/www/xe/files/config에서 db.config.php를 열어서 수정 할 것


 

신고

댓글을 달아 주세요

출처 : http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=53266&sca=%BA%EA%B6%F3%BF%EC%C0%FA&page=2 

송효진님

1줄요약: 최상단에 ob_start('ob_gzhandler'); 

http://www.whatsmyip.org/http-compression-test/

에서 잘 압축되었는지 확인 ㅇㅇ;


 

 

php 는 flush() 를 하기전까지는 아무것도 출력하지 않습니다.
그래서 최종 결과물의 헤더에는 Content-Length 가 있죠.

flush() 를 하는 순간 chunked 헤더를 날리고,
현재까지 버퍼의 내용을 출력합니다.
Content-Length 대신 chunk 데이터 앞에 chunk 크기가 주어집니다.

그러면 브라우저가 그것을 받아서 화면에 뿌려주죠.
페이지가 완성되지 않아도 화면을 구성할 수 있게되는 것입니다.

문제는 익스플로러가 이런 chunk 되지 않은
plain text 로 넘어오는 정보마저 받다말고 렌더링을 하려 하는것 같다는 것입니다.

해외에서의 접속을 좀 빨리 해볼 생각으로 페이지 압축전송을 했다가 우연히 발견하게 되었습니다.

다중중첩테이블 등에 의해 렌더링에 자원소모가 상당히 심한 페이지었는데,
압축전송을 한것 만으로 익스플로러에서는 눈에 띄게 렌더링이 빨라졌습니다.
(불여우에서는 원래 빨랐습니다. 그래도 약간의 향상은 있더군요.)

해외에서의 접속에도 생각 이상의 효과를 봤습니다.
전송속도를 체크해 보려고 수십메가의 파일을 다운로드해 봐도,
국내에서 다운받는것과 비슷한 속도가 났는데,
유독 php 페이지만 느리게 출력됐었습니다.
단지 압축전송을 한것만으로 그렇게 빨라지는것이 이해되지는 않지만,
결과가 좋아 만족합니다.
(서버는 한국, 대상은 일본이고,
한일간의 주요 네트워크 장비중 한->일 방향에서,
텍스트 필터링을 하는 뭔가가 있지 않나 생각해봅니다.)


결론은 압축전송 입니다.
php 에서 간단히 구현할 수 있는것이
ob_gzhandler 입니다.
zlib 를 설치하면 사용할 수 있습니다.

ob_start('ob_gzhandler');
하면,
출력되는 모든 정보가 압축이 되고,
브라우저가 이를 풀어서 보여줍니다.

이렇게 하면 압축이 되었으므로,
모두 받아서 풀기전까지는 브라우저가 내용을 보여줄 수 없습니다.

이것의 단점은 flush() 의 불가 라는 점입니다.
ob_flush() 는 무시되고,
flush() 를 하면 chunked 헤더를 날리지만,
결국에는 하나로 압축되어 한덩어리의 chunk 데이터만 보내집니다.

해외에서의 접속에서 flush() 가 필요하다면,
압축전송을 포기하거나,
직접 작성할 수 밖에 없습니다.

ob_handler 와 ob_flush 를 직접 작성하면,
flush() 와 연동해서 충분히 제작 가능합니다.

템플릿을 사용한다면 flush() 를 위해
ob_start 를 안하고 있다가,
템플릿 출력시에 동작하게 하면 간단히 적용하기에 좋을것입니다.

---------------------
일이 손에 안잡혀서 팁을 씁니다...

 

신고

댓글을 달아 주세요

jquery 이미지 롤링 1개만 돌아가게끔 처리하는것

 

 

 

jqbanner.css

 

jqbanner.js

<script type="text/javascript" src="./js/jquery-1.7.2.min.js"></script>
<script src="/pps/js/jqbanner.js" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" media="screen" href="/pps/css/jqbanner.css" />
<center>
<div id="jqb_object">
 <div class="jqb_slides">
  <div class="jqb_slide"><img src="/pps/images/jpmain_content1.jpg"  width="1200" height="450"></div>
  <div class="jqb_slide"><img src="/pps/images/jpmain_content2.jpg"  width="1200" height="450"></div>
  <div class="jqb_slide"><img src="/pps/images/jpmain_content3.jpg"  width="1200" height="450"></div>
 </div>
 <div class="jqb_bar">
  <SPAN id="btn_prev"><img src="/pps/images/leftbt.png" width="58" height="90"></SPAN>
 </div>
 <div class="jqb_bar2">
  <SPAN id="btn_next"><img src="/pps/images/rightbt.png" width="58" height="90"></SPAN>
 </div>
</div>
</center>

신고

댓글을 달아 주세요

출처 : http://mara.tistory.com/136

 

 

tinyMCE.init ({

 
    forced_root_block : false,
    force_br_newlines : true,
    force_p_newlines : false,

 

})

 

 

init 된 항목 내에 br_newlines : true

p_newlines : false 이것으로 엔터 시 p 태그가 아닌 br 태그로 삽입되는것으로 처리됨.

 

 

신고

댓글을 달아 주세요

다음 에디터 이용시 글삭제 할때 첨부 이미지도 같이삭제하게 하는 처리

 

 

http://code.google.com/p/daumopeneditor/issues/detail?id=214

http://www.silverwolf.co.kr/9643

http://blog.daum.net/ilryu/7094513

 

 

이미지 첨부기능 구현에 있어 몇가지 질문이 있습니다.


테스트환경은 IE7, FF 3.6.10, JQuery Javascript 라이브러리, Daumeditor 5.4.9입니다.

1.
이미지 첨부후 에디터에서 전체삭제 혹은 리스트에서 삭제하면 에디터 캔버스에서 삭제가 되지 않습니다. 샘플팝업으로 테스트할경우는 정상작동합니다.
http://hanmin2.hosting2003.co.kr/daumeditor/daumeditor.html
위 주소로 테스트가능합니다.
사진첨부시 삭제안됨. 파일첨부시 삭제됨.


2.
사진첨부시 IE에서 업로드된 사이즈를 가져오지 못합니다.
196번 게시물에서 문의했던 부분인데 변수문제로 안되는경우가 있다고 말씀해주셨는데
다시 첨부해주신 파일도 역시 같은 현상입니다. IE에서는 안되고 FF에서는 정상작동합니다. 이부분은 다시 한번 확인 좀 해주시기 바랍니다.^^

3.
첨부파일의 전체용량이 정확하지 않은것 같습니다. (196게시물에 첨부해주신 파일로 테스트해본결과)
예들 들어 300바이트 이미지를 3개 업로드하면 900바이트....
에디터 첨부 리스트에는 3개가 등록되어있는 상태일때 그중 하나를 리스트에서 제거하면
총 용량이 600바이트가 되어야 될것 같은데. 첨부해주신 소스로 확인 결과 900바이트가
나오고 계속적으로 첨부할시 총 업로드용량이 증가하기만 합니다. 즉 리스트상에서 삭제를 해도 실제적인 삭제 처리는 되지 않는다고 보여집니다. 첨부파일의 용량을 제한하는 기능을 구현할경우 꼭 필요한 기능이 아닐까 싶습니다.

4.
3번과 동일선상인듯한데...
에디터의 첨부파일 리스트에서 삭제시 호출되는 함수들의 순서와 전반적인 처리과정을 알고 싶습니다. 의도는 첨부된이미지가 리스트에서 삭제될때 실제 서버에서도 삭제하는 기능을 삽입하고 싶은데 그작업을 하려면 처리되는 과정을 알아야 하지 않을까 싶습니다.^^


1.
URL 감사합니다. 알려주신 URL을 통해 문제를 확인을 해보았습니다. 해당 문제는 두가지 부분이 문제점으로 나타납니다.
첫번째는 이미지 주소에 한글이나 특수문자가 들어갈 경우 에디터 캔버스에서 해당 이미지를 인식하지 못하는 문제입니다.
저의 소견으로는 파일 경로를 서버측에서 파일명을 영문과 숫자로만 이루어지도록 정해주는 방식이 제일 좋을 것 같습니다.
두번째 문제는 IE 일 경우에는 경로 부분이 도메인까지 포함하는 풀 경로로 지정해주셔야 하는 부분입니다.
_mockdata 에서 이미지 경로를 full 경로로 주셔야 정상동작합니다. 즉, "/upfile/imagedata/1.png" 의 경우 "http://test.com/upfile/imagedata/1.png" 으로 설정해주셔야 합니다.

문제를 좀 더 자세하게 설명드리면 아래와 같습니다.
Editor.getSidebar().getAttachments("image")[0].regHtml 로 접근할 수 있는 첨부 파일의 정규표현식으로
Editor.getCanvas().getContent() 을 통해 가져온 캔버스의 HTML 에 해당하는 표현식이 있는지 확인하는 과정을 가집니다.
그런데 Editor.getCanvas().getContent() 가 캔바스 영역의 innerHTML 속성으로 브라우저 별로 동작이 상이합니다.
IE 인 경우 경로를 중간까지만 세팅해주어도 풀 경로로 반환이 되는 부분이 있고, FF 의 경우 한글이나 특수 문자의 경우 %EC%9C 와 같은 형태로 변경되어 반환합니다.
그런 부분 때문에 처음부터 파일 경로를 영문과 숫자로만 이루어진 풀 경로로 지정해 주는 방식이 구현이 수월할 것으로 보입니다.


2.
죄송합니다. 해당 문제를 저희가 재현하지 못하여 도움을 드리기 어려운 부분이 있습니다. 가능하다면 1번 질문처럼 해당하는 URL을 받아보고 싶습니다. 가능하신가요? ㅠㅠ


3.
네, 맞습니다. 죄송합니다. 제가 실수하여 그 부분을 누락하였습니다.
소스에서 업로드 된 파일의 용량 합계를 구하는 부분이 있습니다. 그 부분에서 아래 코드처럼 deletedMark 변수를 확인하여 삭제된 파일의 경우 용량 계산에서 제외시켜야 될 것 같습니다.
{code}
		for (i = 0; i < len; i += 1) {
			if (list[i].deletedMark != true) {
				sum += list[i].data.filesize;
			}
		}
{code}


4.
네, 해당 부분의 구현은 아래 이슈에 설명되어 있습니다. 이벤트를 감시하여 해당 기능을 수행하시면 되실 것으로 보입니다.
http://code.google.com/p/daumopeneditor/issues/detail?id=133
그리고, 자세한 부분은 아래와 같습니다.
파일 삭제는 삭제 버튼을 눌렀을 때 /daumeditor-5.4.0/_js_source/trex/attachbox/attachbox_ui.js 의 178라인의 entry.execRemove() 함수 호출에서 시작됩니다.
해당 함수는 /daumeditor-5.4.0/_js_source/trex/sidebar.js 의 153 라인의 위치하고 있습니다.
{code}
	execRemove: function() {
		this.remove();
		this.entryBox.remove(this);
	},
{code}
위에서 this.remove(); 의 경우 /daumeditor-5.4.0/_js_source/trex/attachment.js 의 59라인에 위치하고 있습니다. 여기에서는 canvas 에서 해당하는 내용을 제거하는 기능을 수행합니다.
this.entryBox.remove(this); 의 경우 /daumeditor-5.4.0/_js_source/trex/sidebar.js 의 90라인에 위치하고 있습니다. 엔트리의 deletedMark 변수를 true 로 바꿔주고, Trex.Ev.__ENTRYBOX_ENTRY_REMOVED 이벤트를 fire 시킵니다.
{code}
	remove: function(entry) {
		entry.deletedMark = true;
		this.fireJobs(Trex.Ev.__ENTRYBOX_ENTRY_REMOVED, entry);
	},
{code}


답변 감사합니다.^^
2번 문제는 인코딩상의 문제라서 해결하였습니다.
항상 상세한 답변 감사드립니다.^^


execAttach함수에 대해서 자사한 내용을 좀 알고 싶습니다.


이미지 첨부부분을 수정하면서 execAttach함수에 대해서 찾아봤는데...
도무지 어느부분에 있는 함수인지를 모르겟습니다.
용도는 전체 이미지 용량을 확인하고 제한하려는 기능을 만들때 사용하려고 하는데.
찾질 못해서 답답한 마음만 가지고 있습니다..ㅜㅜ

js파일의 몇번째 라인에 있는지...
덧붙여 함수의 대한 설명도 해주셧으면 더없이 감사할것 같습니다.^^;


안녕하세요, 운영자입니다.

네 말씀주신 부분을 소스 차원에서 확인을 원하시면 아래 코드들을 참고하시면 도움이 되실 것 같습니다.


1.
/daumeditor-5.4.0/_js_source/common.js
143라인
{code}
function registerAction(attacher) {
	if(!attacher) {
		return; 
	}
	window.execAttach = attacher.attachHandler;
}
{code}
registerAction 을 통해서 attacher 의 attachHandler 를 전역 변수 execAttach 로 연결시킵니다.

이 부분은 다시 아래 부분으로 연결됩니다.
2.
/daumeditor-5.4.0/_js_source/trex/attacher.js
142라인
{code}
	attachHandler: function(data, attachmentType) {
		if(this.checkInsertable()) {
			if(this.isCheckSize && !this.entryBox.checkInsertableSize(data.filesize)) {
				alert(TXMSG("@attacher.size.alert"));
				return;
			}
			this.execAttach(data,  attachmentType);
		} else {
			this.execReattach(data,  attachmentType);
		}
	},
{code}

여기서 execAttach 를 타게되어 아래 부분으로 연결되고요.
3.
/daumeditor-5.4.0/_js_source/trex/attacher/image.js
102라인
{code}
	execAttach: function(data, type) {
		var _entry = this.createEntry(this.getDataForEntry(data), type);
		_entry.execRegister();
	},
{code}

createEntry 는 createAttachment 를 호출하여 또 다시 Trex.Attacher 의 멤버로 연결됩니다(Trex.Attacher.Image 는 Trex.Attacher 를 상속받음).
4.
/daumeditor-5.4.0/_js_source/trex/attacher.js
157라인
{code}
	createAttachment: function(data, type) {
		var _attachmentType = this.constructor.__Identity;
		if(type){
			_attachmentType = type;
		}
		return new Trex.Attachment[_attachmentType.capitalize()](this, data);
	},
{code}

여기서 이미지일 경우에는 Trex.Attachment.Image 클래스의 인스턴스를 하나 생성하여 리턴하게 됩니다. 해당 클래스 코드는 아래 위치에 있습니다.
5.
/daumeditor-5.4.0/_js_source/trex/attacher/image.js
125라인부터..

3번에서 호출되는 _entry.execRegister() 는 Trex.Attachment.Image 의 부모 클래스인 Trex.Attachment 의 부모 클래스인 Trex.Entry 에 위치하고 있습니다.
6.
/daumeditor-5.4.0/_js_source/trex/sidebar.js
141라인
{code}
	execRegister: function() {
		this.register();
		this.entryBox.append(this);
		this.setExistStage(true);
	},
{code}

여기서 attachment 의 register 를 호출해서 에디터 본문에 HTML 을 붙여넣고,
entryBox 에 entry (첨부된 파일에 대한 정보가 들어있음) 를 추가하여 첨부 파일들을 관리하게 하는 등의 작업을 합니다.

구조가 꽤 복잡하긴 합니다만, 클래스와 메소드를 위주로 찾아서 따라가시다 보면 소스가 어느 정도 파악이 되실듯합니다.


그리고 전체 이미지 용량을 확인하고 제한하는 기능을 만드는 기능은 여러가지로 구현이 가능하겠습니다만, 에디터 소스를 꼭 고치시지 않아도 되는 아래와 같은 방식을 추천드립니다.

1. popup 페이지 내에서 attacher 를 변수에 담아둡니다(getAttacher() 함수로 가능, 기존의 initUploader() 를 참고).
2. attacher.getDatalist() 를 호출하여 list 를 받아옵니다.
3. list 를 순환하여 .data.filesize 를 합산하여 전체 이미지 용량을 확인합니다.

예제 코드로 나타내면 다음과 같습니다.
{code}
...
		var list, i, len, sum;
		list = attacher.getDatalist();
		len = list.length;
		sum = 0;
		for (i = 0; i < len; i += 1) {
			sum += list[i].data.filesize;
		}
		alert("지금까지 업로드된 이미지들 사이즈 합: " + sum);
		sum += currentFileSize;
		alert("하나 더 하면: " + sum);
{code}
해당 image.html 파일의 전체 코드를 첨부하였습니다. 참고가 되셨으면 합니다.
더 궁금하신 부분이나 자세한 설명이 필요하신 부분은 댓글을 남겨주시길 바랍니다.


에디터 사용에 관심을 주셔서 감사합니다. 또 다른 질문이나 건의 사항이 있으시면 글을 남겨주시길 부탁드립니다.
즐거운 저녁 되십시요~^^


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Daum에디터 - 이미지 첨부</title>
<script src="../../js/popup.js" type="text/javascript" charset="utf-8"></script>
<link rel="stylesheet" href="../../css/popup.css" type="text/css"  charset="utf-8"/>
<script type="text/javascript">
// <![CDATA[
       
        function done() {
                if (typeof(execAttach) == 'undefined') { //Virtual Function
                return;
            }
                var currentFileSize = 640;
                var _mockdata = {
                        'imageurl': 'http://cfile284.uf.daum.net/image/116E89154AA4F4E2838948',
                        'filename': 'editor_bi.gif',
                        'filesize': currentFileSize,
                        'imagealign': 'C',
                        'originalurl': 'http://cfile284.uf.daum.net/original/116E89154AA4F4E2838948',
                        'thumburl': 'http://cfile284.uf.daum.net/P150x100/116E89154AA4F4E2838948'
                };
               
                var list, i, len, sum;
                list = attacher.getDatalist();
                len = list.length;
                sum = 0;
                for (i = 0; i < len; i += 1) {
                        sum += list[i].data.filesize;
                }
                alert("지금까지 업로드된 이미지들 사이즈 합: " + sum);
                sum += currentFileSize;
                alert("하나 더 하면: " + sum);
               
                execAttach(_mockdata);
                closeWindow();
        }

        function initUploader(){
            var _opener = PopupUtil.getOpener();
            if (!_opener) {
                alert('잘못된 경로로 접근하셨습니다.');
                return;
            }
           
            window.attacher = getAttacher('image', _opener);
            registerAction(attacher);
        }
// ]]>
</script>
</head>
<body onload="initUploader();">
<div class="wrapper">
        <div class="header">
                <h1>사진 첨부</h1>
        </div>  
        <div class="body">
                <dl class="alert">
                    <dt>사진 첨부 확인</dt>
                    <dd>
                        확인을 누르시면 임시 데이터가 사진첨부 됩니다.<br />
                                인터페이스는 소스를 확인해주세요.
                        </dd>
                </dl>
        </div>
        <div class="footer">
                <p><a href="#" onclick="closeWindow();" title="닫기" class="close">닫기</a></p>
                <ul>
                        <li class="submit"><a href="#" onclick="done();" title="등록" class="btnlink">등록</a> </li>
                        <li class="cancel"><a href="#" onclick="closeWindow();" title="취소" class="btnlink">취소</a></li>
                </ul>
        </div>
</div>
</body>
</html>

신고

댓글을 달아 주세요

어디서 갖고왔더락........


function getBrowser($agent) {
 $browser = array(
  "MSIE 5.0" => "/msie 5.0[0-9]*/",
  "MSIE 5.5" => "/msie 5.5[0-9]*/",
  "MSIE 6.0" => "/msie 6.0[0-9]*/",
  "MSIE 7.0" => "/msie 7.0[0-9]*/",
  "MSIE 8.0" => "/msie 8.0[0-9]*/",
  "MSIE 9.0" => "/msie 9.0[0-9]*/",
  "Chrome" => "/chrome\/*/",
  "FireFox" => "/firefox\/*/",
  "Netscape" => "/x11/",
  "Opera" => "/opera*/",
  "Safari" => "/safari\/*/",
  "Android" => "/android/",
  "Mobile Safari" => "/mobile\/[0-9a-z]* safari/",
  "Robot" => "/yahoo/",
  "Robot" => "/bot/"
 );
 $agent = strtolower($agent);
 foreach($browser as $name=>$exp){
  if(preg_match($exp, $agent)){
   $browser = $name;
  }
 }
 return $browser;
}

$u_agent = $_SERVER['HTTP_USER_AGENT'];
$browser =  getBrowser($u_agent);
if($browser == 'Android' || $browser == 'Mobile Safari'){
 if($browser == 'Android'){
  ECHO "ANDROID";
 }else{
  ECHO "IPHONE";
 }
}else{
 ECHO "OTHER";
}

 

신고

댓글을 달아 주세요


1.글 내용과 섞여있는 경우
=> 띄워쓰기,

2.제목,이름이 깨지는 경우
=> '=?UTF-8?B?' . base64_encode(값) . '?=';

3.메일 내용이 깨지는 경우
charset 잡아주기







define('CRLF', "\r\n");
$to      = 'lovelgw3@naver.com';	// 보낼 주소
$subject = '=?UTF-8?B?' . base64_encode('Gmail 을 이용한 Sendmail') . '?=';	// 제목
$strMessge = '이 메일은 Gmail 을 이용하여 보낸 메일입니다. ';	// 내용
$message = chunk_split(base64_encode($strMessge));	// 메세지
// 헤더 설정
$headers = 'From: <LOVELGW>lovelgw@gmail.com' . CRLF .
		'Reply-To: <LOVELGW>lovelgw@gmail.com' . CRLF .
		'MIME-Version: 1.0' . CRLF .
		'Content-type: text/html; charset=utf/8' . CRLF .
		'Content-Transfer-Encoding: base64' . CRLF;
// 메일 보내기
mail($to, $subject, $message, $headers);
신고

댓글을 달아 주세요

페이지내용 저장

Posted by 비회원 프로그래밍/PHP : 2012.01.08 15:05

폼에넣으면 좋음

http://kr2.php.net/manual/en/function.session-cache-limiter.php
session_cache_limiter('private');
를 선언하면 해당페이지의 '모든것'이 그대로 유지됩니다.
페이지를 나갔다가 돌아와도 유지되죠.
그래서 해당 페이지에 들어가는 링크에 time() 값을 주어서
새로 들어갈때는 유지되지 않게 해야 합니다.
/join.php?1034928394
신고

댓글을 달아 주세요

php extract 사용시

Posted by 비회원 프로그래밍/PHP : 2012.01.05 15:10

extract($_GET);
extract($_POST);
extract($_COOKIE);
이것이 여태 이렇게까지 무서울줄은 생각 못했습니다.

그냥 register_global = off 로 하는게 좋다고 권유하는 정도만 했죠.

$_SERVER $_ENV 값도 반드시 해 주어야 겨우
register_global = on 정도의 보안수준이 되는군요.

REMOTE_ADDR 같은 중요한 값을 마구마구 변조합니다.
PHP_SELF 기준으로 파일쓰기를 한다면 더욱 무시무시해지죠.

차라리 register_global = on 이 덜 무섭네요.

extract($_ENV);
extract($_GET);
extract($_POST);
extract($_COOKIE);
extract($_SERVER);
이렇게 하면 좀 낫긴 하지만

register_global 무조건 off
off 를 off 답게 씁시다.

'초보니까 책대로 배운다음에' 가 아니고,
'초보니까 처음 배울때 부터 제대로' 가 되도록 합시다.


License : Public Domain



출처 : 송효진님
신고

'프로그래밍 > PHP' 카테고리의 다른 글

sendmail utf-8 메일 발송시 글자 깨질때..  (0) 2012.01.18
페이지내용 저장  (0) 2012.01.08
php extract 사용시  (0) 2012.01.05
에디터 글내용 이미지 추출  (0) 2012.01.02
extract 사용시  (0) 2011.12.01
글내용 이미지 리사이징  (0) 2011.10.21

댓글을 달아 주세요

에디터 글내용 이미지 추출

Posted by 비회원 프로그래밍/PHP : 2012.01.02 17:13



function getImg($content){
 $img = "";
 $content=str_replace("IMG","img",$content);
 preg_match("<img [^<>]*>", $content, $imgTag);

 if($imgTag[0]){
  if( stristr($imgTag[0], "http://") ) {
   preg_match("/http:\/\/.*\.(gif|png|jpg|jpeg|bmp)/Ui", $imgTag[0], $imgName);
   $img = $imgName[0];
  } else {
   preg_match("/.*\.(gif|png|jpg|jpeg|bmp)/Ui", $imgTag[0], $imgName);
   $img = $imgName[0];
  }
 }

 return $img;
}





    ${"file01_view"}="<img src='".getImg($row_list[contents])."' width=150 height=150>";

신고

'프로그래밍 > PHP' 카테고리의 다른 글

페이지내용 저장  (0) 2012.01.08
php extract 사용시  (0) 2012.01.05
에디터 글내용 이미지 추출  (0) 2012.01.02
extract 사용시  (0) 2011.12.01
글내용 이미지 리사이징  (0) 2011.10.21
php boolean  (0) 2011.04.18

댓글을 달아 주세요

extract 사용시

Posted by 비회원 프로그래밍/PHP : 2011.12.01 14:29

알아서 넘어가는 것이 아닙니다.
http://php.net/manual/kr/function.extract.php

사용을 하더라도 보안상 아래 순서에 맞게 덮어써주는 것을 추천합니다.
http://php.net/manual/kr/ini.core.php#ini.variables-order
EGPCS (Environment, Get, Post, Cookie, and Server)
> http://php.net/manual/en/language.variables.superglobals.php

extract($_ENV);
extract($_GET);
extract($_POST);
:
신고

'프로그래밍 > PHP' 카테고리의 다른 글

php extract 사용시  (0) 2012.01.05
에디터 글내용 이미지 추출  (0) 2012.01.02
extract 사용시  (0) 2011.12.01
글내용 이미지 리사이징  (0) 2011.10.21
php boolean  (0) 2011.04.18
htmlentities <-> html_entity_decode (엔티티 변환, 태그변환)  (0) 2011.03.21

댓글을 달아 주세요

글내용 이미지 리사이징

Posted by 비회원 프로그래밍/PHP : 2011.10.21 11:37


function content_imgsize($content,$imgsize){
 $content=str_replace("IMG","img",$content);
 $content=preg_replace("/<img(.*?)\>/","<img $1 onload=\"sizeX=".$imgsize.";if(this.width>sizeX) {Rate=parseInt(this.width/sizeX);if(Rate>0) {this.width=sizeX;this.height=this.height/Rate;}}\">",$content);
 return($content);
}
신고

'프로그래밍 > PHP' 카테고리의 다른 글

에디터 글내용 이미지 추출  (0) 2012.01.02
extract 사용시  (0) 2011.12.01
글내용 이미지 리사이징  (0) 2011.10.21
php boolean  (0) 2011.04.18
htmlentities <-> html_entity_decode (엔티티 변환, 태그변환)  (0) 2011.03.21
소켓통신 작업 샘플소스  (0) 2011.03.18

댓글을 달아 주세요

php boolean

Posted by 비회원 프로그래밍/PHP : 2011.04.18 17:28
출처 : http://yiuse78.blog.me/50107091171

제가 PHP 폼 검증시 주로 이용하는 함수들 입니다.

bool isset( mixed $var [, mixed $var [, $...]] )

  • 설정된 변수인지 확인 (PHP4, PHP5)
  • var가 존재하면 TRUE, 아니면 FALSE를 반환
  • NULL로 지정한 변수를 확인하면 FALSE를 반환
  • 여러 인수가 주어지면, 모든 변수가 설정되었을 경우에만 TRUE를 반환
  • 폼을 통한 접근이 아닌, 직접 접근 가능성을 확인하기 위하여 변수 존재여부를 확인

bool empty ( mixed $var )

  • 변수가 비어있는지 검사 (PHP4, PHP5)
  • var가 비어 있지 않고, 0이 아닌 값일 경우 FALSE를 반환
  • 비어있는 값 : ""(빈문자열), 0, "0", NULL, FALSE, array(), var $var(선언만 된 변수)
  • 폼 변수 검증시 실질적인 변수의 내용이 존재하는지 확인

issetempty 의 차이점

  • isset() : NULL을 제외한 모든 값 => TRUE
  • empty() : NULL을 포함한 비어있는 값 => TRUE

void unset ( mixed $var [, mixed $var [, mixed $.. ]] )

  • 주어진 변수를 제거 (PHP4, PHP5)
  • 함수내에서 전역변수를 unset해도 로컬변수만 제거되며, 전역변수를 제거하려면 unset($GLOBALS['var']); 해야함

bool is_null ( mixed $var )

  • 주어진 변수가 NULL인지 확인 (PHP4 >= 4.0.4, PHP5)
  • var가 null이면 TRUE를, 아니라면 FALSE를 반환

bool ctype_alnum ( string $text )

  • 주어진 변수가 숫자/영문자인지 확인 (PHP4 >= 4.0.4, PHP5)
  • text가 숫자/영문자 이라면 TRUE를, 아니라면 FALSE를 반환
  • 폼 변수 아이디, 비밀번호 항목등을 확인시 활용

bool ctype_digit ( string $text )

  • 주어진 변수가 숫자 문자열(따옴표로 둘러싼 숫자)인지 확인 (PHP4 >= 4.0.4, PHP5)
  • text가 숫자 문자열(따옴표로 둘러싼 숫자)이라면 TRUE를, 숫자나 소수점, 그외라면 FALSE를 반환
  • 10진수(0~9) 형태이어야하며, 음수는 FALSE를 반환
  • 비슷한 유형의 함수: is_numeric()
  • 폼에서 숫자가 넘어오는경우 숫자 문자열 형태로 넘어온다.
  • 폼 변수 금액, 나이 항목등을 확인시 활용

bool is_numeric ( mixed $var )

  • 주어진 변수가 숫자인지 확인 (PHP4, PHP5)
  • var가 숫자나 숫자 문자열(따옴표로 둘러싼 숫자)이라면 TRUE를, 아니라면 FALSE를 반환
  • 음수를 포함하여 숫자인지 판단하므로 숫자형 입력데이터 항목 체크에 활용

bool ctype_alpha ( string $text )

  • 주어진 변수가 알파벳 문자인지 확인 (PHP4 >= 4.0.4, PHP5)
  • text가 알파벳 문자이라면 TRUE를, 아니라면 FALSE를 반환

bool ctype_lower ( string $text )

  • 주어진 변수가 소문자인지 확인 (PHP4 >= 4.0.4, PHP5)
  • text가 전체가 소문자이라면 TRUE를, 아니라면 FALSE를 반환


bool ctype_upper ( string $text )

  • 주어진 변수가 대문자인지 확인 (PHP4 >= 4.0.4, PHP5)
  • text가 전체가 대문자라면 TRUE를, 아니라면 FALSE를 반환

bool is_int ( mixed $var )

  • 주어진 변수의 자료형이 정수형인지 확인 (PHP4, PHP5)
  • var가 정수형이면 TRUE를, 아니면 FALSE를 반환
  • 수 문자열은 숫자로 취급되지 않는다.
  • 이 함수의 별칭: is_integer()
  • 금액이나 나이, 횟수등 소수점이 없는 값을 체크할 경우 활용

bool is_array ( mixed $var )

  • 주어진 변수가 배열인지 확인 (PHP4, PHP5)
  • var가 array이면 TRUE를, 아니면 FALSE를 반환
  • 폼에서 다수 입력값이 넘어올 경우 배열인지 확인등에 활용

bool is_bool ( mixed $var )

  • 주어진 변수가 논리형인지 확인 (PHP4, PHP5)
  • var가 boolean이면 TRUE를, 아니면 FALSE를 반환
  • true, false 값만 TRUE로 인정됨

bool is_string ( mixed $var )

  • 주어진 변수가 문자열인지 확인 (PHP4, PHP5)
  • var가 string형이면 TRUE를, 아니라면 FALSE를 반환
  • 큰따옴표(")나 작은따옴표(')로 둘러쌓인 값만 문자열로 판단

int intval ( mixed $var [, int $base = 10 ] )

  • 주어진 변수에서 정수값을 가져옴 (PHP4, PHP5)
  • var는 정수로 변환할 스칼라 값이며, base는 변환에 사용할 진법
  • 성공시에 var의 정수 값을 반환, 실패시엔 0, 빈 배열과 객체는 0을 반환, 비어있지 않은 객체는 1을 반환
  • 폼 검증시 숫자형임을 확인과 동시에 숫자형으로 강제 형 변환시에 활용

bool settype ( mixed &$var , string $type )


  • var변수의 자료형을 type로 설정 (PHP4, PHP5)
  • type값에는 boolean, integer, float, string, array, object, null을 지정할 수 있다
신고

댓글을 달아 주세요


htmlentities해당하는 모든 문자를 HTML 엔티티로 변환

 

string htmlentities ( string $string [, int $quote_style [, string $charset [, bool $double_encode ]]] )

htmlentities()는 HTML 문자 엔티티에 존재하는 모든 문자를 엔티티로 변환하는 점을 제외하면, htmlspecialchars()와 완전히 동일합니다.

디코드(역변환)하려면 html_entity_decode()를 사용할 수 있습니다.

 

Example #1 htmlentities() ------------------------------------------------------------------------------------

<?php
$str 
"A 'quote' is <b>bold</b>";

// 출력: A 'quote' is &lt;b&gt;bold&lt;/b&gt;
echo htmlentities($str);

// 출력: A &#039;quote&#039; is &lt;b&gt;bold&lt;/b&gt;
echo htmlentities($strENT_QUOTES);
?>

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

 

html_entity_decode모든 HTML 엔티티를 해당하는 문자로 변환

 

string html_entity_decode ( string $string [, int $quote_style [, string $charset ]] )

html_entity_decode()string 의 모든 HTML 엔티티를 해당하는 문자로 변환합니다. htmlentities()의 역함수입니다.

 

Example #1 HTML 엔티티 디코딩---------------------------------------------------------------------------------

<?php
$orig 
"I'll \"walk\" the <b>dog</b> now";
$a htmlentities($orig);
$b html_entity_decode($a);
echo 
$a// I'll &quot;walk&quot; the &lt;b&gt;dog&lt;/b&gt; now
echo $b// I'll "walk" the <b>dog</b> now

// PHP 4.3.0 이전 사용자는 이렇게 할 수 있습니다:
function unhtmlentities($string)
{
    
// 숫자 엔티티 치환
    
$string preg_replace('~&#x([0-9a-f]+);~ei''chr(hexdec("\\1"))'$string);
    
// 문자 엔티티 치환
    
$trans_tbl get_html_translation_table(HTML_ENTITIES);
    
$trans_tbl array_flip($trans_tbl);
    return 
strtr($string$trans_tbl);
}
$c unhtmlentities($a);
echo 
$c// I'll "walk" the <b>dog</b> now
?>
----------------------------------------------------------------------------------------------------------------
 Note: trim(html_entity_decode('&nbsp;'));는 문자열을 빈 문자열로 변환하지 않습니다. 이는 기본값인 ISO-8859-1 문자셋에서 '&nbsp;' 엔티티가 (trim()에서 잘라내는) 아스키 코드 32가 아닌, 아스키 코드 160(0xa0)이기 때문입니다.

 

 

출처 : http://kr2.php.net/

신고

댓글을 달아 주세요

소켓통신 작업 샘플소스

Posted by 비회원 프로그래밍/PHP : 2011.03.18 11:32


단순 post로 값을 보내는 경우 보안에 좋지 않으므로

받아오는 페이지에서 리퍼러값 등의 체크가 필요하다.

<?
#########################################################################
# 개발자  : 전동규            #
# 메일주소 : jawebdev@gmail.com         #
# 작업일  : 2011-03-08           #
# 작업내용 : 소켓통신 작업          #
#########################################################################
$go_url = "http://test.com/go_url.php";
// 전송요청 URL 바꾸지마세요.

// 이전페이지에서 값 받아온것들 목록

$go_arr['id'] = $user_id;
$go_arr['ip'] =$_SERVER[REMOTE_ADDR];
// 소켓통신용 배열로 변환

$host_info = explode("/", $go_url);
$host = $host_info[2];
$path = $host_info[3]."/".$host_info[4]."/".$host_info[5];
// 호스트,경로 맞춰 변환

srand((double)microtime()*1000000);
$boundary = "---------------------".substr(md5(rand(0,32000)),0,10);
//print_r($go_arr);
// 바운더리 코드 생성

$header = "POST /".$path ." HTTP/1.0\r\n";
$header .= "Host: ".$host."\r\n";
$header .= "Content-type: multipart/form-data, boundary=".$boundary."\r\n";
// 헤더 생성

foreach($go_arr AS $index => $value){
 $data .="--$boundary\r\n";
 $data .= "Content-Disposition: form-data; name=\"".$index."\"\r\n";
 $data .= "\r\n".$value."\r\n";
 $data .="--$boundary\r\n";
}
$header .= "Content-length: " . strlen($data) . "\r\n\r\n";
// 본문 생성

$fp = fsockopen($host, 80);
// 소켓통신 시작
if ($fp) {
 $sock_return_value = "Connection Success <br>";
 fputs($fp, $header.$data);
 $rsp = '';
 while(!feof($fp)) {
  $rsp .= fgets($fp,8192);
 }
 fclose($fp);
 $msg = trim($rsp);
}else {
 $sock_return_value = "Connection Failed <br>";
}

echo $sock_return_value ;
echo "<xmp>".$msg."</xmp>";
?>

신고

댓글을 달아 주세요


fsocket

curl
soap
xmlrpc
신고

댓글을 달아 주세요

필요한 부분에 넣어주기만 하면 땡

1.스크립트
<script type="text/javascript">
var agent = navigator.userAgent;
if (agent.match(/iPhone/) != null || agent.match(/iPod/) != null) {
 location.href = "http://" + location.host + "/m" + location.pathname;
}
</script>

2.php
<?if (preg_match("/phone/i", $_SERVER[HTTP_USER_AGENT])) {?>
//아이폰접속일경우 여기
<?}else{?>
//아이폰이아닌 다른매체로 접속시 여기
<?}?>

 

신고

댓글을 달아 주세요

트위터 php 연동..

Posted by 비회원 프로그래밍/PHP : 2011.02.16 11:56

퍼온거임.
curl 안깔려있으면 오류남.
그래서 우린 안함.
귀찮..


트위터 공식API홈페이지에 가면 PHP용 OAuth라이브러리가 2개가 있는데요. 두개중에 이게 더 나은 것 같아서...

트위터 공식api홈페이지 - http://dev.twitter.com/

OAuth라는 게 2년전에 삽질했던 것이 기억나네요.
트위터도 이 방식으로 인증을 하게 되는데요. 간단하게 동작원리를 설명하면......

1. 연동할 어플리케이션을 등록합니다.
2. 등록하게 되면 Consumer key와 Consumer secret을 발급받습니다.
3. 명시된 Request Token url로 이 키를 이용해 요청하게 되면 인증 url로 가서 이 어플에서 계정접근을 허용할 것인지 묻습니다.
4. 그리고, 허용하게 된다면 Access Token url로 이동해 Access Token을 발급 받습니다.
5. 이 받게 된 AccessToken을 이용해서 해당 어플리케이션은 글쓰고, 정보를 불러올 수 있게 됩니다.

이런 일련의 과정이 있지만, LIbrary가 있으면, 이딴거 몰라도 됩니다-_- 라이브러리가 다 알아서 하니까-_-

일단 앱을 등록합니다.
http://dev.twitter.com/apps/new
application type은 browser로 하고, callback url은 access_token까지 다 받은 다음에 우리 웹사이트로 돌아오기 위한 콜백url을 지정하는 것입니다.
등록을 한 다음에, 해당 애플리케이션의 detail을 보게 되면 consumer key랑 consumer secret이 있습니다.

그리고 라이브러리를 받습니다.
http://github.com/abraham/twitteroauth/downloads
그리고 파일들을 통째로 서버에 올립니다.
그리고, config.php파일을 수정합니다.
consmuer_key랑 consumer_secret을 위에서 등록한 앱의 키값을 등록!
callback은 인증을 하고 accesstoken을 얻은 뒤, 우리 앱으로 돌아올 때 callback url을 지정합니다. 그대로 올렸다면 폴더에 callback.php가 있기 때문에 http://localhost/callback.php가 됨!

그리고, 이제 localhost/index.php를 열고, Sign in with Twitter 클릭하면...
사용자 삽입 이미지
수락하면 대충 이런 데이터를 받습니다.
사용자 삽입 이미지

소스를 보게 되면 callback.php에서 AccessToken을 요청해서 받아오게 되는데, AccessToken과 AccessTokenSecret값만 있으면 글을 쓰거나 정보를 가져올 수 있게 됩니다.
이것을 자신의 사이트에 적용을 하게 된다면 db에다가 저장해놓고 쓰게 된다면, 우리사이트의 인증만으로도 트위터에 글을 쓸 수 있게 됩니다.
인증을 취소할 경우를 대비해서 account/verify_credentials api를 요청해 인증이 살아있는지 확인을 해야합니다.
[code]$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $access_token['oauth_token'], $access_token['oauth_token_secret']);[/code]
이렇게 connection객체만 가지고 있으면
[code]$connection->post('statuses/update', array('status' => date(DATE_RFC822)));[/code]
이런 형태로 api를 호출해서 데이터를 가져올 수 있습니다.
신고

댓글을 달아 주세요

내꺼 솔루션 이용약관

Posted by 비회원 프로그래밍/PHP : 2011.01.25 09:49


이용약관 상단에 js 인클루드 하고 아래 링크들로 연결시키는거에여

<script type="text/javascript" src="../public_inc/pop_script.js"></script>

javascript:pop_clause('service');
javascript:pop_clause('collection');
javascript:pop_clause('email');

신고

'프로그래밍 > PHP' 카테고리의 다른 글

홈페이지 아이폰 접속시 에이전트 체크  (0) 2011.03.09
트위터 php 연동..  (0) 2011.02.16
내꺼 솔루션 이용약관  (0) 2011.01.25
day text 날짜별 스위치  (0) 2011.01.25
네이버 지도 api php버전  (0) 2011.01.14
로컬 mp3 실제 길이 알아내는 소스  (0) 2011.01.10

댓글을 달아 주세요

day text 날짜별 스위치

Posted by 비회원 프로그래밍/PHP : 2011.01.25 09:24

switch($today_text){
 case(0):$today_text_kor="일요일";break;
 case(1):$today_text_kor="월요일";break;
 case(2):$today_text_kor="화요일";break;
 case(3):$today_text_kor="수요일";break;
 case(4):$today_text_kor="목요일";break;
 case(5):$today_text_kor="금요일";break;
 case(6):$today_text_kor="토요일";break;
}

또쓰기 귀찮어...
신고

'프로그래밍 > PHP' 카테고리의 다른 글

트위터 php 연동..  (0) 2011.02.16
내꺼 솔루션 이용약관  (0) 2011.01.25
day text 날짜별 스위치  (0) 2011.01.25
네이버 지도 api php버전  (0) 2011.01.14
로컬 mp3 실제 길이 알아내는 소스  (0) 2011.01.10
간단한 XML 파싱 소스  (0) 2010.10.19

댓글을 달아 주세요

네이버 지도 api php버전

Posted by 비회원 프로그래밍/PHP : 2011.01.14 16:51

어디서 퍼왔더라 -.-...


<?php
    // 지도의 폭과 높이
    $map_width = 600;
    $map_height = 400;
   
    // 지도의 축적 1~11 사이의 자연수. 1에 가까울 수록 지도가 확대
    $map_zoom = 2;
   
    // 네이버 지도api 키값
    $map_key = "key=코드값";
    if (!$map_query) $map_query = "서울시 강남구 삼성동";
   
    // 여기부터 주소 검색 xml 파싱
    $pquery = $map_key. "&query=". str_replace(" ","",$map_query);

 


    $fp = fsockopen ("map.naver.com", 80, $errno, $errstr, 30);
    if (!$fp) {
        echo "$errstr ($errno)";
        //exit;
    } else {
        fputs($fp, "GET /api/geocode.php?");
        fputs($fp, $pquery);
        fputs($fp, " HTTP/1.1\r\n");
        fputs($fp, "Host: map.naver.com\r\n");
        fputs($fp, "Connection: Close\r\n\r\n");
        
        $header = "";
        while (!feof($fp)) {
            $out = fgets ($fp,512);
            if (trim($out) == "") {
                break;
            }
            $header .= $out;
        }
        
        $mapbody = "";
        while (!feof($fp)) {
            $out = fgets ($fp,512);
            $mapbody .= $out;
        }
       
        $idx = strpos(strtolower($header), "transfer-encoding: chunked");
        
        if ($idx > -1) { // chunk data
            $temp = "";
            $offset = 0;
            do {
                $idx1 = strpos($mapbody, "\r\n", $offset);
                $chunkLength = hexdec(substr($mapbody, $offset, $idx1 - $offset));
                
                if ($chunkLength == 0) {
                    break;
                } else {
                    $temp .= substr($mapbody, $idx1+2, $chunkLength);
                    $offset = $idx1 + $chunkLength + 4;
                }
            } while(true);
            $mapbody = $temp;
        }
        //header("Content-Type: text/xml; charset=utf-8");
        fclose ($fp);
    }    
    // 여기까지 주소 검색 xml 파싱

 


    // 여기부터 좌표값 변수에 등록
    $map_x_point_1=explode("<x>", $mapbody);
    $map_x_point_2=explode("</x>", $map_x_point_1[1]);
    $map_x_point=$map_x_point_2[0];
    $map_y_point_1=explode("<y>", $mapbody);
    $map_y_point_2=explode("</y>", $map_y_point_1[1]);
    $map_y_point=$map_y_point_2[0];
    // 여기까지 좌표값 변수에 등록

 


?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=euckr">
<title>Weddies - 네이버 지도 API 연동</title>
<script type="text/javascript" src="http://map.naver.com/js/naverMap.naver?<?=$map_key?>"></script>
<script type="text/javascript">
function clearText() {
    WedMap.map_query.value = "";
}
</script>
<style>
    .clear {
        clear: both;
    }
    .search {
       
    }
</style>
</head>
<body>
    <h1>TITLE 1</h1>
    <h2>네이버 지도 API 테스트 페이지</h2>
   
    <hr class="clear">

 


    <div id='mapContainer' style='width: <?=$map_width?>px; height: <?=$map_height?>px; padding: 5px; border-style: solid; border-width: 5px; border-color: orange;'>
    <script type="text/javascript">
    <!--
        /*지도 개체 생성 */
     var opts = {width:<?=$map_width?>, height:<?=$map_height?>, mapMode:1};
   
     var mapObj = new NMap(document.getElementById('mapContainer'),opts);
       
        var x_point = <?=$map_x_point?>;
        var y_point = <?=$map_y_point?>;
        var zoom_level = <?=$map_zoom?>;
       
     /* 지도 좌표, 축적 수 준 초기화 */
        var loc_Point = new NPoint(x_point,y_point);  // 포인트 표시
       
     mapObj.setCenterAndZoom(loc_Point,zoom_level);
   
     /* 지도 컨트롤 생성 */
     var zoom = new NZoomControl();
   
     zoom.setAlign("right");
     zoom.setValign("top");
     mapObj.addControl(zoom);
   
     /* 지도 모드 변경 버튼 생성 */
     var mapBtns = new NMapBtns();
     mapBtns.setAlign("right");
     mapBtns.setValign("top");
     mapObj.addControl(mapBtns);
   
    //-->
    </script>
    </div>
   
    <hr class="clear">
   
    <div class="search">
    <form name="WedMap" method="post">
        <input type="text" id="addr" name="map_query" value="검색할 주소를 입력하세요" size="80" maxLength="100" onclick="clearText();" tabindex="1">
        <input type="submit" value="검색">
    </form>
    </div>
   
    <hr class="clear">
   
    <div>
        <ul>
            <dt>주소</dt>
            <dd><?=$map_query?></dd>
            <dt>좌표</dt>
            <dd><?=$map_x_point?></dd>
            <dd><?=$map_y_point?></dd>
        </ul>
    </div>
</body>
</html>

 

신고

댓글을 달아 주세요

로컬 mp3 실제 길이 알아내는 소스

Posted by 비회원 프로그래밍/PHP : 2011.01.10 16:24

http://getid3.sourceforge.net/

신고

댓글을 달아 주세요

간단한 XML 파싱 소스

Posted by 비회원 프로그래밍/PHP : 2010.10.19 16:13
<?xml version="1.0" encoding="euc-kr"?>
<search>
    <illegal>0</illegal>
    <pg>1</pg>
    <collection id="news">
        <totalcnt>297173</totalcnt>
        <scale>5</scale>
        <item id='1'>
            <title><![CDATA[게릴라식 순찰검문 우수경찰관 포상]]></title>
            <date>2006/11/17 14:17:06</date>
            <etc><![CDATA[]]></etc>
        </item>
        <item id='2'>
            <title><![CDATA[프리챌, 동영상 기능 대폭 강화]]></title>
            <date>2006/11/17 14:16:46</date>
            <etc><![CDATA[]]></etc>
        </item>
        <item id='3'>
            <title><![CDATA[광주시 "의회 행정감사 안 받겠다"]]></title>
            <date>2006/11/17 14:08:45</date>
            <etc><![CDATA[]]></etc>
        </item>
    </collection>
    <collection id="ksea">
        <totalcnt>50394</totalcnt>
        <scale>5</scale>
        <item id='1'>
            <title><![CDATA[사진작가가 뽑은 아름다운얼굴 25인 2006년버전 김혜수 사진발1위??]]></title>
            <date>20060617115330</date>
            <etc><![CDATA[]]></etc>
        </item>
        <item id='2'>
            <title><![CDATA[문근영 졸업사진 말고 증명사진 볼 수 있는 곳은?]]></title>
            <date>20050601132713</date>
            <etc><![CDATA[]]></etc>
        </item>
        <item id='3'>
            <title><![CDATA[돈 되는 사진?]]></title>
            <date>20060524141716</date>
            <etc><![CDATA[]]></etc>
        </item>
    </collection>
</search>
============================================

위의 xml을 news.xml 로 했을때

$xmlParse = new XMLParse("news.xml" ,"NEWS" ,"TITLE", "");
$xmlList = $xmlParse->getData();
$xmlParse->free();

로 해서 뿌려줄때요..

echo $xmlList[0]->TITLE;
해보니.. 각각의 타이틀들을 전부 뿌려주기는 하는데..

news > item1 > title
ksea > item1 > title
이렇게 각각 뿌릴려면 어떻게 하면 될까요?..
그러니까.. 타이틀에 대한 각각의 리스트를 보여주고자 할때요..


2틀째 고민중입니다.. 도움좀 부탁드리겠습니다..

참고로 서버환경은 php4 버전입니다.



아래는 해당 파싱방법 소스입니다..
(웹에서 퍼날랐습니다..;;)

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

class XMLParse {
        // $file에 XML경로를 넣으면 $this->xmlList에 리턴한다.
        var $headerList = array();
        var $xmlList = array();
        var $field = "";
        var $header_no = 0;
        var $no = 0;
        var $parser;
        var $file;

        var $startField;
        var $arrcharField;
        var $arrheaderField;

        function XMLParse($file, $startField, $charField, $headerField="")
        {
                $this->setFile($file);
                $this->_create();
                $this->startField = $startField;
                $this->arrcharField = split(",", $charField);
                $this->arrheaderField = split(",", $headerField);
        }

        function setFile($file)
        {
                $this->file = $file;
        }

        function startElement($parser, $name, $attrs)
        {
                $this->field = $name;

                for ($i= 0; $i<count($this->arrheaderField); $i++) {
                        if($this->field == $this->arrheaderField[$i]) {
                                if(isset($this->xmlList[$this->header_no])) $this->header_no++;
                                foreach ($attrs as $key => $attrs_data) {
                                        $this->headerList[$this->header_no]->$key = $attrs_data;
                                }
                        }
                }

                if($this->field == $this->startField) {
                        if(isset($this->xmlList[$this->no])) $this->no++;
                        foreach ($attrs as $key => $attrs_data) {
                                $this->xmlList[$this->no]->$key = $attrs_data;
                        }
                }
        }

        function endElement($parser, $name)    {}

        function characterData($parser, $data)
        {
                for ($i= 0; $i<count($this->arrheaderField); $i++) {
                        if ($this->field == $this->arrheaderField[$i]) {
                                $field = $this->field;
                                $this->headerList[$this->header_no]->$field .= $data;
                        }
                }

                for ($i= 0; $i<count($this->arrcharField); $i++) {
                        if ($this->field == $this->arrcharField[$i]) {
                                $field = $this->field;
                                $this->xmlList[$this->no]->$field .= $data;
                        }
                }
        }

        function _create() {
                $this->parser = @xml_parser_create();
                if (is_resource($this->parser)) {
                        xml_set_object($this->parser, &$this);
                        xml_set_element_handler($this->parser, "startElement", "endElement");
                        xml_set_character_data_handler($this->parser, "characterData");
                        return true;
                }
                return false;
        }

        function free(){
                if (is_resource($this->parser)) {
                        xml_parser_free($this->parser);
                        unset( $this->parser );
                }
                return null;
        }

        function getData(){
                if (!($fp = @fopen($this->file, "r"))) {
                        //die("XML 입력을 열 수 없습니다.");
                        return false;
                }

                while (!feof($fp)) {
                        $data = fgets($fp, 4096);
                        if (!xml_parse($this->parser, $data, feof($fp))) {
                                /*die(sprintf("XML 에러: %s at line %d",
                                xml_error_string(xml_get_error_code($this->parser)),
                                xml_get_current_line_number($this->parser)));*/
                                return false;
                        }
                }

                return $this->xmlList;
        }
}

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


출처 : http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=qna_html&wr_id=82999
신고

댓글을 달아 주세요


strip_tags는 문자열내에 태그들을 모두 지워주는 태그로 쓰이기도 하지만

아래와 같이 사용하면 허용된 태그만 보여지고 이 외에는 안보이게 해주는 기능이 있다

정규식으로 어떻게 태그를 다 막나~ 생각하다 찾아보니 바로 나왔음


$in_html="<table><tr><td><th><tbody><center><p><b><strong><strike><u><em><font><br><img><div><span>";

<?=strip_tags($contents,$in_html)?>
신고

댓글을 달아 주세요

 «이전 1 2  다음»