2014. 11. 13. 12:02

이번 작업은 조금전 올린 특정 경로의 폴더 리스트 가져오기

 

지난번에 올린 파일의 확장자 분리를 혼합한 것과 같다.

 

단지  몇가지 정보만 더 뽑아냈을뿐....

 

그리고 이번 소스도 역시 json 방식으로 반환한다.

 

function getFiles($path){
  $arrData = array();
  $results = scandir($path);
  
  foreach ($results as $result) {  
   if ($result === '.' or $result === '..') continue;  
   if (!is_dir($path . '/' . $result)) { //디렉토리가 아니면
    $data = array();
    
    $path_parts = pathinfo($path . '/' . $result);
    
    $data["dirname"] = iconv("euc-kr","utf-8",$path_parts['dirname']); //파일경로 단, 파일이름은 포함하지 않음, 한글깨짐 방지
    $data["basename"] = iconv("euc-kr","utf-8",$path_parts['basename']); //파일이름
    $data["extension"] = iconv("euc-kr","utf-8",$path_parts['extension']); //확장자.
    $data["mtime"] =  date("Y-m-d H:i:s.", filemtime($path . '/' . $result)); //파일 수정일
    $data["ctime"] =  date("Y-m-d H:i:s.", filectime($path . '/' . $result)); //파일 생성일
    $data["filesize"] =  filesize($path . '/' . $result); //파일 크기, byte단위
    $data["filename"] = iconv("euc-kr","utf-8",$path_parts['filename']); // since PHP 5.2.0
    
    $arrData[] = $data;
   }
  }
  return $arrData;
 }

 

참고로 pathinfo 함수에서 filename은 PHP 5.2.0이상부터 지원한다.

Posted by 작은0악마
2014. 11. 13. 11:51

그동안 블로그를 작성하면서

 

코드를 공개할때 마다 모양이 좀 아니었다...

 

그래서 오늘 Syntax Highlighter 를 설정하여 적용했다

 

설치하는 과정은

 

http://elgar328.tistory.com/11 님의 블로그를 참고 하였고

 

난 matlab은 사용하지 않으므로 그부분은 제외하였다.

 

앞으로 유용하게 쓰이겠지??

 

Posted by 작은0악마
2014. 11. 13. 11:23

어떤 폴더내의 폴더 목록을 가져올 필요가 생겼다.

 

그 폴더 목록을 가져와서 Tree형대로 표시할려고 한다.

 

그래서 다음과 같은 함수를 만들어 처리했다.

 

function getDir($path){
  
  $arrData = array();
  $results = scandir($path);
  
  foreach ($results as $result) {  
   if ($result === '.' or $result === '..') continue;  
   if (is_dir($path . '/' . $result)) { //디렉토리라면
    $data = array();
    $data["text"] = iconv("euc-kr","utf-8",$result); //한글일경우 json 에러때문에
    $data["id"] = iconv("euc-kr","utf-8", $path . '/' . $result);
    $data["cls"] = "folder";
    $sub_folders = getDir($path . '/' . $result); //폴더이므로 그 안에 폴더 목록을 가져오기 위해..
    if(count($sub_folders)){
     $data["leaf"] = false;
     $data["root"] = $sub_folders;
    }else{
     $data["leaf"] = true;
    }
    $arrData[] = $data;
   }
  }
  return $arrData;
 }


 

참고로 위 소스는 가져온 값을 json의 형태로 보낸다.

 

또한 해당 폴더의 서브폴더 목록을 가져오기 위해 재귀 호출을 하였다.

Posted by 작은0악마
2014. 10. 24. 16:37

특정파일을 서버로 못올리게 한다던가 이미지만 올리게 하는등의 기능을 구현하기 위해서는

 

파일의 확장자를 분리할 필요가 있다.

 

얼마전까지는 substr() 함수를 사용하여 처리하였다.

 

그러나 좀더 쉽게 구하는 방법이 있었으니...

 

php의 pathinfo()함수를 이용하는것이다.

 

사용예 :

 

<?php
$path_parts 
pathinfo('/www/htdocs/inc/lib.inc.php'
);

echo 
$path_parts['dirname'], "\n"
;
echo 
$path_parts['basename'], "\n"
;
echo 
$path_parts['extension'], "\n"
;
echo 
$path_parts['filename'], "\n"
// since PHP 5.2.0
?>

 

참고 : http://php.net/manual/en/function.pathinfo.php

Posted by 작은0악마
2014. 10. 13. 12:06

오래전 처음 PHP와 Mysql을 이용하여 프로그램을 시작할때

 

Table에 값을 넣을때는

 

"insert into 테이블이름 (필드이름 ... ) VALUES ( 데이터 ... )"를 사용하였다

 

필드이름의 영역은 데이터의 크기가 필드의 크기와 일치되면 생략도 가능하였지만

 

VALUES 에서 S가 빠지면 syntax error를 표시했다..

 

그런데 오늘 다른 소스를 확인하다보니 S가 빠진 VALUE로 기재를 했는데도

 

정상적으로 삽입이 되는것이 아닌가??

 

뭐...네X버 한테 물어봐야 이런건 알리도 없는게 당연한거고...

 

구글링을 해보니 다음의 글이 있었다.

 

결론은 다르지 않다인데....

 

참고 : http://stackoverflow.com/questions/17445583/what-is-difference-between-insert-value-and-insert-values-in-mysql-statement

 

mysql이 버젼업을 하면서 지원을 하는것이던 아닌것이던 간에...

 

다른 DB로 마이그레이션등을 생각하면 당연히 VALUES를 쓰는것이 맞을것 같다.

Posted by 작은0악마
2014. 10. 1. 09:50

사용자가 마우스로 드래그하여 영역의 크기를 조정하는 기능을 구현하던중

 

3개의 DIV를 가지고 테스트를 할때는 별 무리가 없었는데

 

실제 좀 복잡한 UI에서 적용을 하니 이상한 동작이 일어났다..

 

마우스로 드래그를 하는데 left 값이 순차적으로 변하는게 아니라 널뛰기 하듯 튀는 현상이 발생!!!

 

여러가지로 확인을 해보았으나 이해할 수가 없었는데...

 

브라우저의 개발자 도구로 확인을 해보니 draggable을 적용한 DIV에 내가 지정하지 않은 값이 들어가 있는것을 확인.

 

결론은 div 에 draggable을 적용하면 draggable에서 해당 div의 여러가지 값을 변경하거나 지정한다.

 

이번 경우는 draggable에서 해당 DIV 에 position값을  relative로 변경하여서 발생하였던것..

 

그래서 draggable을 적용하고 바로 다음줄에서 해당 DIV에 position 값을 변경하여 해결!!

 

 

$('#div_b').draggable({
  axis : 'x',
  containment : [
   41,
   0,
   300,
   0
  ],
  drag : splitter
 });
 
 //draggable 함수가 position을 강제로 relative로 변경해서..
 $('#div_b').css("position","static");

Posted by 작은0악마
2014. 9. 30. 13:51

얼마전 네이버 캘린더 앱(안드로이드)을 설치해서

 

위젯으로 등록해 놓고 그냥 있었다..

 

한번인가 두번 실행해 보고는 방치....

 

그런데 무료 데이터가 모두 소진됐다는 문자를 보고

 

이상해서 테이터 사용량을 확인해보니

 

9월 23일 부터 30일 (지금 작성하는 이 시간)까지의 사용량이

 

437MB....

 

이거 미친 앱 아냐??

 

갤린더앱이 뭘 하는게 있다고 일주일에 데이터를 400메가를 쓰냐고....

 

미친앱은 바로 삭제...

 

** 삭제 전에 스샷을 찍었어야 했는데....

 

삭제후 찍은 스샷

 

 

 

Posted by 작은0악마
2014. 9. 30. 12:06

HTML 작업을 진행하다 보면

 

A 태그는 이동을 하는 역활을 하는 것이지만 몇가지의 이유로

 

A 태그에 onClick 이벤트를 써야 하는 경우가 있다.

 

이때 A 태그의 href의 기능을 무효화 해야하는데...

 

이를 위해서는 주로 아래의 방법을 많이 사용한다.

 

<a href='#' onClick='함수();'>

 

이 경우 onClick에 의해서 페이지가 이동하지 않을 경우

 

페이지가 길면 최상단으로 이동을 하는등의 원치 않는 문제를 야기할 수 있다.

 

그래서 구글링을 해본 결과...

 

<a href='#' onClick='함수(); return false'>

 

또는

 

<a href='javascript:void(0);' onClick='함수(); return false'>

 

등을 사용하면 된다.

 

 

'HTML' 카테고리의 다른 글

bootstrap은 또 뭐야?  (0) 2014.06.09
Multi Selectbox 만들기  (0) 2014.01.14
Posted by 작은0악마
2014. 9. 24. 14:35

처음 PHP 프로그램을 시작할 당시에 내가 사용하던 툴은 UltraEdit 였다.

 

기능이 많고 여러가지로 좋았으나 유료이고 가격도 좀 비싸다...

 

 

그후 국산이면서 가벼운 Editplus를 변경을 했다.

 

역시 유료이긴 하지만 가격이 그리 비싼편이 아니다.

 

그리고 가끔 AcroEdit도 사용을 하고 있으나 익숙치가 않아서 보조 툴로 사용을 한다.

 

 

 

안드로이드를 개발하면서 Eclipse를 설치하여 사용하면서 Eclipse에 FTP 플러그인을 설치해서

 

PHP를 Eclipse에서 개발하기도 했었다.

 

 

 

최근에 들어서 특정 테스트가 필요해 구글링을 하다가 NetBeans 라는 툴을 알게됬다.

 

꽤 오래전에 나왔던것 같은데 모르고 있었다

 

일단 무료이고... 원래는 JAVA 개발용으로 만들어진것 같으나 NetBeans for PHP 도 있어서 PHP 개발도 지원이 된다.

 

현재 8.0.1이 배포중이며 JAVA용, C용, PHP용, 통합등 선택해서 다운받아 설치할수 있고

 

Development 버젼도 다운로드가 가능하다.

 

이 툴은 단점은 JAVA로 만들어져 JRE가 설치되어 있어야 하고 좀 무겁다.

 

그런데 프로젝트로 묶어서 작업을 하다가 보니 코드 인사이트 (Assistance) 기능이 너무 마음에 든다.

 

과거에 VC를 공부할때 Visual Assist 와 같은 플러그인 프로그램을 이용했을 때가 생각이 났다.

 

무엇보다 NetBeans에서 놀란것은 소스를 분석해서 사용자(개발자)가 만든 함수도 assist 해준다는것이다.

 

아직 Ultraedit나 Editplus와 같이 FTP로 직접 연결해서 작업은 해보지 않았으나

 

관련 자료를 확인해 보니 원격 프로젝트로 해서 연결하면 로컬로 다 다운받아서 처리하고

 

저장할때 FTP로 올려준다고 한다. 이부분이 좀 귀찮은것 같긴 한데....

 

그래도 assist 기능이 너무 맘에 들고

 

또 브라켓을 연곳이 화면 위로 올라가 안보여도 커서를 가져가면 open한 브라켓의 라인을 알아서

 

보여주는것도 매력적이다.

 

 

 

이참에....PHP는 NetBeans로 갈아탈까???

 

Posted by 작은0악마
2014. 9. 17. 10:15

최근 프로젝트는 PDO를 사용할 수 밖에 없었다

 

그런데 PDO를 쓰다보니 두가지의 답답한 문제에 봉착했다.

 

1. PDO는 mysql_num_rows 와 같은 레코드셋의 row의 수를 가져올 수 있는 기능이 없다.

2. PDO는 mysql_data_seek 과 같은 레코드셋의 포인터를 이동할 수 있는 기능이 없다.

 

이를 해결하기 위해 구글링은 해본 결과 레코드셋을 배열에 저장하고 그 배열을 사용하는 방법이 제일 좋은것 같다.

 

간단한 코드는

 

$stmt 를 PDOStatement 라고 할때

 

$result_array = $stmt->fetchAll();

 

//레코드셋에 row가 있는지 확인

if(count($result_array)){

 

foreach($result_array as $row){

 

//여기서 필요한 처리를 진행...

 

}

 

}

 

위와 같이 하면 $result_array 배열의 인덱스를 가지고 위치도 옮겨 다닐수 있고 순차 처리도 가능해지며 재사용이 가능하다.

 

참고로 fetchAll 메소드를 사용하면 $stmt>fetch(PDO::FETCH_BOTH )와 같은 방식으로 배열로 반환해주기 때문에

 

컬럼의 index나 name으로 다 사용이 가능하다.

 

물론 fetchAll()에 fetch style을 지정할 수 도 있지만....

 

Posted by 작은0악마