cp949 형태의 문자를 utf-8 로 변환하기

프로그래밍/PHP|2020. 6. 4. 10:23
반응형

[ 소스 ]

$ori = "\xb9\xae\xc0\xda\xba\xaf\xc8\xaf\xc5\xd7\xbd\xba\xc6\xae";

echo iconv("CP949", "UTF-8", $ori );



[ 결과 ]

문자변환테스트


반응형

댓글()

php 소스에서 오류 메세지 출력하지 않기

프로그래밍/PHP|2020. 6. 3. 13:58
반응형

소스 상단에 아래 코드를 삽입합니다.


error_reporting(0);



반응형

댓글()

input 으로 작성한 button 자동 클릭하기

반응형

눌러야 실행되는 것을 아래 script 를 추가함으로써 자동 실행 되도록 할 수 있습니다.



<input type="button" id="execute" value="실행" />



<script>

        window.onload = function() {

                document.getElementById('execute').click();

        }

</script>



반응형

댓글()

실시간 페이지 갱신 (ajax 이용)

반응형

index.html

<!DOCTYPE html>
<head>
<meta charset=UTF-8" />
<meta name="robots" content="noindex,nofollow"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no"/>
<meta http-equiv="X-UA Compatible" control="IE=edge,chrome=1" />
<link rel="stylesheet" type="text/css" href="css/table.css" />
<script type="text/javascript" src="//code.jquery.com/jquery.min.js"></script>

<!-- 자동 갱신 스크립트 include -->
<script>
var timerID;
$(document).ready(function() {
    $('#execute').on('click',function(e) {
        e.preventDefault();
        updateData();
    });
    $('#stop').on('click',function(e) {
        e.preventDefault();
        clearTimeout(timerID); // 타이머 중지
        $('#showtime').html('');
    });
});


function updateData() {
    $.ajax({
        url: "getserver.php",
        type: "post",
        cache : false,
        success: function(data) { // getserver.php 파일에서 echo 결과값이 data 임
            $('#showtime').html(data);
        }
    });
    timerID = setTimeout("updateData()", 1000); // 1초 단위로 갱신 처리
}
</script>
</head>

<body>
<p>time : <span id="
showtime"></span></p>
<input type="button" id="execute" value="실행" />
<input type="button" id="stop" value="중지" />
</body>
</html>

 

getserver.php

<?php
    $time = date("H:m:s");
    echo $time;
?>

 

작성 후 index.html 을 불러오면, '실행' 버튼을 눌렀을때 주기적으로 getserver.php 가 실행되어 빨간색 showtime 부분에  출력됩니다.

 

'실행' 버튼 누를 필요없이 자동으로 클릭한 효과를 얻으려면 아래와 같이 조치합니다.

1) input 두개의 type 을 hidden 으로 숨깁니다.

2) 아래 코드를 추가합니다.

<script>

        window.onload = function() {

                document.getElementById('execute').click();

        }

</script>

 

 

출처 : https://link2me.tistory.com/1139 [소소한 일상 및 업무TIP 다루기]

반응형

댓글()

php 에서 mongodb 데이터 읽기, 쓰기, 갱신, 삭제하기 (select, insert, update, delete)

프로그래밍/PHP|2020. 5. 20. 16:53
반응형

아래 코드는 PHP 7.2 에서 MongoDB 4.4.0 에서 확인 되었습니다.


참조 : http://zetcode.com/db/mongodbphp/

> MongoDB 설치에서 부터 PHP 연동을 위한 모듈 설치, 설정.

    그리고 데이터 입출력에 관한 간단한 소스가 예제로 잘 작성 되어 있습니다.



1. Insert


<?php


try {

    $mng = new MongoDB\Driver\Manager("mongodb://127.0.0.1:27017");

    $bulk = new MongoDB\Driver\BulkWrite;

    $doc = ['_id' => new MongoDB\BSON\ObjectID, 'Name' => "CDH", 'City' => "Seoul"];

    $bulk->insert($doc);

    $mng->executeBulkWrite('site.member', $bulk);


} catch (MongoDB\Driver\Exception\Exception $e) {

    $filename = basename(__FILE__);

    echo "The $filename script has experienced an error.\n";

    echo "It failed with the following exception:\n";

    echo "Exception:", $e->getMessage(), "\n";

    echo "In file:", $e->getFile(), "\n";

    echo "On line:", $e->getLine(), "\n";

}


?> 


* site 는 컬렉션 명, member 는 도큐멘트 명입니다.



2. Select


<?php


try {

    $mng = new MongoDB\Driver\Manager("mongodb://127.0.0.1:27017");

    $filter = [ 'Name' => 'CDH' ]; // 조건 (완전 일치)

    //$filter = [ 'Name' => array('$regex' => 'C') ]; // 조건 (포함)

    $query = new MongoDB\Driver\Query($filter);

    //$query = new MongoDB\Driver\Query([]); // 조건 없이 전체 조회


    $rows = $mng->executeQuery("site.member", $query);

    foreach ($rows as $row) { // 데이터가 있는대로 반복해서 가져온다.

            echo "이름은 $row->Name 이고, 도시는 $row->City 입니다.";

    }

} catch ......


?>


* 생략된 catch 부분은 Insert 예제와 동일

* 개수 제한 또는 정렬 필요시 filter 아래에 options 추가

$options = [

            'limit' => 50,

            'sort' => ['Date' => -1]

    ];

$query = new MongoDB\Driver\Query($filter, $options);



3. Update


<?php


try {

    $mng = new MongoDB\Driver\Manager("mongodb://127.0.0.1:27017");

    //$filter = [ 'Name' => "CDH", 'City' => "Seoul" ];

    $bulk = new MongoDB\Driver\BulkWrite;

    $bulk->update(

            ['Name' => "CDH", 'City' => "Seoul"], // 조건 (이렇게 직접 입력하거나 위의 $filter 활용)

            ['$set' => ['Name' => "JJE", 'City' => "Busan"]], // 변경값

            ['multi' => True] // 여러개 동시 수정할 경우

    );

    $mng->executeBulkWrite('site.member', $bulk);

} catch ......


?>


* 생략된 catch 부분은 Insert 예제와 동일



4. Delete


<?php


try {

    $mng = new MongoDB\Driver\Manager("mongodb://127.0.0.1:27017");

    $bulk = new MongoDB\Driver\BulkWrite;

    $bulk->delete(['Name' => "CDH"], ['City' => "Seoul"]); // 조건

    $mng->executeBulkWrite('site.member', $bulk);

} catch ......


?>


* 생략된 catch 부분은 Insert 예제와 동일


반응형

댓글()

bash shell 에서 mongodb 읽고 쓰기

프로그래밍/BASH SHELL|2020. 5. 13. 16:37
반응형

1. 입력


# mongo -u packet -p 12345678 --host 127.0.0.1 --port 27017 --authenticationDatabase packet --eval 'db.logs.insert({"date" : "2020-05-05 11:22:33", "body" : "eee"})'

MongoDB shell version v3.4.24

connecting to: mongodb://127.0.0.1:27017/

MongoDB server version: 3.4.24

WriteResult({ "nInserted" : 1 })


[설명]

- packet : 계정

- 12345678 : 계정 비밀번호

- 127.0.0.1 : MongoDB 서버 IP

- 27017 : MongoDB Listening 포트

- logs : Collections (테이블 부분)

- { 부터 } 까지 : Documents (데이터 부분)



2. 조회


# mongo -u packet -p 12345678 --host 127.0.0.1 --port 27017 --authenticationDatabase packet --eval 'db.logs.find()'

{ "_id" : ObjectId("5ebb9ff124bd96fec20b5ff0"), "date" : "2020-05-05 11:22:33", "body" : "eee" }


반응형

댓글()

php 7.x 에서 mongodb 연결하기 (CentOS 8)

프로그래밍/PHP|2020. 5. 13. 15:21
반응형

DB 명 : packet

컬렉션명 : logs

Password : 12345678



# vi test.php


<?php

$manager = new MongoDB\Driver\Manager("mongodb://packet:12345678@localhost:27017/packet");


/*

  샘플 컬랙션을 아래와같이 정의하자.

  test {

    name : string,

    name2 : string,

    number : int

  }

*/


//첫번째 배열 값은 질의문이다. 질의할 대상은 도큐먼트이다.

//두번째 배열 값은 옵션이다. projection, skip, limit, sort 같은 것을 줄 수 있다.

$query = new MongoDB\Driver\Query(['date' => '2020-05-05 11:22:33', 'body' => 'aaa'], []);



$rows = $manager->executeQuery("packet.logs", $query);

foreach ($rows as $row) {

    $result1 = $row->name;     //name이라고 불리우는 것이 결과이다.

    $result2 = $row->name2;

}



$bulk = new MongoDB\Driver\BulkWrite;  //저장을 담당하는 객체

$document = [    //저장할 배열

        '_id' => new MongoDB\BSON\ObjectID,

        'name' => '텍스트',

        'number' => 1234,

        'date' => date(),

        'arrayStyle' =>  ['text' => '텍스트', 'num' => 5678]

];

$bulk->insert($document);  //객체에서의 함수 실행

$manager->executeBulkWrite('대상db.컬렉션이름', $bulk); //Manager객체에 내용 전달.

?>

 




반응형

댓글()

스크롤바 항상 출력 시키기

반응형

본문 길이가 길어서 화면을 벗어날 경우 스크롤바가 자동으로 생기는데,

이때 본문의 위치가 스크롤바로 인해 좌측으로 약간 밀리는 현상이 발생됩니다.


이를 방지하기 위해 스크롤바를 항상 출력 시키도록 합니다.

<head> 내에 아래 소스 코드를 첨부합니다.


<style>

<!--

html {overflow-y:scroll;}

-->

</style> 




반응형

댓글()

구글맵 마커 사이즈 조절하기

반응형

int height = 200;

int width = 200;

BitmapDrawable bitmapdraw=(BitmapDrawable)getResources().getDrawable(R.mipmap.marker);

Bitmap b=bitmapdraw.getBitmap();

Bitmap smallMarker = Bitmap.createScaledBitmap(b, width, height, false);


map.addMarker(new MarkerOptions()

                .position(POSITION)

                .title("Your title")

                .icon(BitmapDescriptorFactory.fromBitmap(smallMarker))

                );



[출처] https://stackoverflow.com/questions/14851641/change-marker-size-in-google-maps-api-v2 



반응형

댓글()

google map 에서 움직이는 마커 사용하기

반응형

[출처] https://exceptionshub.com/rotate-marker-and-move-animation-on-map-like-uber-android-2.html


아래 소스는 출력된 마커를 터치하면 목적지까지 부드럽게 마커가 이동하는 소스입니다.

(녹색 부분 제외하면 터치 없이 실행 됩니다)

어렵게 구했습니다.. ㅜ.ㅜ

목적에 맞게 수정해서 사용하면 됩니다.



1. onCreate 에서


SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);

mapFragment.getMapAsync(this);



2. onMapReady 에서


@Override

    public void onMapReady(final GoogleMap googleMap) {


        mMap = googleMap;


        final LatLng SomePos = new LatLng(37.52487, 126.92723); // 시작 지점


        try {

            googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); // 지도 타입

            googleMap.setMyLocationEnabled(true); // 내 위치 표시

            googleMap.setTrafficEnabled(false); // 교통정보 레이어

            googleMap.setIndoorEnabled(false); // 실내 지도 여부. 향후 normal 지도 유형에서만 지원 예정

            googleMap.setBuildingsEnabled(true); // 건물 표시

            googleMap.getUiSettings().setZoomControlsEnabled(true); // 줌 컨트롤러 표시 (확대, 축소)

            googleMap.moveCamera(CameraUpdateFactory.newLatLng(SomePos));

            googleMap.moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition.Builder()

                    .target(googleMap.getCameraPosition().target)

                    .zoom(17)

                    .bearing(30) // 지도를 돌려서 보기 (각도)

                    .tilt(45) // 지도를 눞여서 보기 (각도)

                    .build()));


            // 마커 이미지 및 사이즈 변경

            int height = 200;

            int width = 200;

            BitmapDrawable bitmapdraw = (BitmapDrawable)getResources().getDrawable(R.drawable.img_marker);

            Bitmap b = bitmapdraw.getBitmap();

            Bitmap smallMarker = Bitmap.createScaledBitmap(b, width, height, false);


            final Marker myMarker = googleMap.addMarker(new MarkerOptions()

                    .position(SomePos)

                    .icon(BitmapDescriptorFactory.fromBitmap(smallMarker))

                    .title("Hello world"));


            googleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {

                @Override

                public boolean onMarkerClick(Marker arg0) {


                    final LatLng startPosition = myMarker.getPosition();

                    final LatLng finalPosition = new LatLng(37.62487, 127.02723); // 끝 지점

                    final Handler handler = new Handler();

                    final long start = SystemClock.uptimeMillis();

                    // AccelerateDecelerateInterpolator 는 마커 이동 유형 (움직이는 스타일)

                    //final Interpolator interpolator = new AccelerateDecelerateInterpolator();

                    final float durationInMs = 4000; // 이동 시간 (ms)


                    handler.post(new Runnable() {

                        long elapsed;

                        float t;


                        @Override

                        public void run() {

                            // Calculate progress using interpolator

                            elapsed = SystemClock.uptimeMillis() - start;

                            t = elapsed / durationInMs;


                            LatLng currentPosition = new LatLng(

                                    startPosition.latitude * (1 - t) + finalPosition.latitude * t,

                                    startPosition.longitude * (1 - t) + finalPosition.longitude * t);


                            myMarker.setPosition(currentPosition);


                            // Repeat till progress is complete.

                            if (t < 1) {

                                // Post again 16ms later.

                                handler.postDelayed(this, 16);

                            }

                        }

                    });

                    return true;

                }

            });


        } catch (Exception e) {

            e.printStackTrace();

        }


    } 



반응형

댓글()

슬라이드 레이어 만들기 (AndroidSlidingUpPanel 라이브러리)

프로그래밍/Android (Java)|2020. 4. 28. 07:36
반응형

소스 출처 및 라이브러리 배포

https://github.com/umano/AndroidSlidingUpPanel



activity_main.xml


<com.sothree.slidinguppanel.SlidingUpPanelLayout

        xmlns:sothree="http://schemas.android.com/apk/res-auto"

        android:id="@+id/sliding_layout"

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:gravity="bottom"

        sothree:umanoPanelHeight="68dp"

        sothree:umanoShadowHeight="4dp">


       <!-- 메인 화면 -->

        <TextView

            android:layout_width="match_parent"

            android:layout_height="match_parent"

            android:gravity="center"

            android:text="Main Content"

            android:textSize="16sp" />


       <!-- 슬라이드 레이어 부분 -->

        <TextView

            android:layout_width="match_parent"

            android:layout_height="match_parent"

            android:gravity="center|top"

            android:text="The Awesome Sliding Up Panel"

            android:textSize="16sp" />


    </com.sothree.slidinguppanel.SlidingUpPanelLayout> 



MainActivity.java


        // 슬라이드 레이어

        SlidingUpPanelLayout slidingUpPanelLayout = (SlidingUpPanelLayout) findViewById(R.id.sliding_layout);

        slidingUpPanelLayout.addPanelSlideListener(new SlidingUpPanelLayout.PanelSlideListener() {

            @Override

            public void onPanelSlide(View panel, float slideOffset) {


            }


            @Override

            public void onPanelStateChanged(View panel, SlidingUpPanelLayout.PanelState previousState, SlidingUpPanelLayout.PanelState newState) {

            //Toast.makeText(getApplicationContext(),newState.name().toString(),Toast.LENGTH_SHORT).show();


                if(newState.name().toString().equalsIgnoreCase("Collapsed")){


                    // 닫혔을때 처리하는 부분


                }else if(newState.name().equalsIgnoreCase("Expanded")){


                    // 열렸을때 처리하는 부분


                }


            }

        }); 



반응형

댓글()