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);



반응형

댓글()

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 예제와 동일


반응형

댓글()

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객체에 내용 전달.

?>

 




반응형

댓글()

php 코드로 json 형태로 출력하기

프로그래밍/PHP|2019. 10. 30. 08:48
반응형

php 로 json 형태의 문자열을 echo 출력 했음에도 불구하고 json 인식이 되지 않는 경우는

php 소스 최상단에 아래 코드를 입력하도록 합니다.

이경우 html 코드가 (예 : <br>) 텍스트로 출력되어 버리니 필요 없는 태그는 미리 삭제 하도록 합니다.



1. 소스 코드 추가


<?

header('Content-Type: application/json');

...

?>



2. 출력 예시


{

    "status": "true",

    "message": "Data fetched successfully!",

    "data": [

    {

        "id": "1",

        "title": "제목",

        "body": "내용을 씁니다.",

    },

    {

        "id": "2",

        "title": "인사말",

        "body": "안녕하세요. 반갑습니다.",

    }

    ]

}


반응형

댓글()

FOPEN, 파일 읽고 쓰기, 첨부하기의 스펙과 예제

프로그래밍/PHP|2019. 4. 2. 09:11
반응형

* PHP에서 파일을 읽는 fopen 기능에 대해서 알아보자.


* fopen 포맷

resource fopen ( string $filename , string $mode [, bool $use_include_path = false [, resource $context ]] )


: 인자를 총 4개 받으며, 1, 2번째 인자는 필수고 3, 4번째 인자는 옵션이다.


* 첫번째 인자: string $filename

: 파일을 로드할 파일명으로, 앞에 "scheme://..."와 같은 프로토콜을 명시하는 경우 해당하는 프로토콜을 이용하는 URL로 판별하여 해당 scheme의 프로토콜 핸들러를 찾아서 파일에 접근하게 된다. 만약 프로토콜이 명시되지 않았다면 서버 로컬의 일반적인 파일로 판단하여 찾게 된다. 만약 로컬의 파일로 판단하게 되면, 파일내용을 stream으로 열게 된다. php.ini에 safe_mode나 open_basedir를 설정하게 되면 fopen에 기본적으로 적용하게 된다.

: 만약 첫번째 인자를 URL로 판단하게 된다면, PHP는 php.ini파일의 allow_url_fopen이 활성화 되었는지 보고, 만약 false로 설정되어있다면 경고와 함께 fopen은 실행되지 않을 것이다.


- 참고로 PHP에서 위의 URL로 판단하는 scheme의 핸들러가 있는 목록은 다음과 같다.

    • file:// - 로컬 파일 시스템 접근
    • http:// - http url
    • ftp:// - ftp url
    • php:// - 다양한 I/O stream
    • zlib:// - 압축된 stream
    • data:// - 데이터 (RFC 2397)
    • glob:// - 패턴에 맞는 경로이름을 검색
    • phar:// - PHP archive
    • ssh2:// - Secure SHell 2
    • rar:// - rar
    • ogg:// - audio stream
    • expect:// Process Interaction Streams

- 주의: 윈도우 플랫폼에서는 백슬래쉬는 2개를 사용해야한다.

<?php
$handle = fopen("c:\\folder\\resource.txt", "r");
?>


* 두번째 인자: string $mode

: 어떠한 모드로 파일을 열 것인지 설정하는 인자. 각 인자는 아래와 같다.



인자 

모드 

포인터 위치 

파일이 존재 유무 

 r

 읽기 전용  파일의 시작 

 파일 내용 보존

 r+

 읽고 쓰기

 파일의 시작

 파일 내용 보존

 w

 쓰기 전용 파일의 시작 파일 내용 삭제, 없으면 새로 생성

 w+

 읽고 쓰기 파일의 시작 파일 내용 삭제, 없으면 새로 생성

 a

 쓰기 전용

 파일의 끝 파일 내용 보존, 없으면 새로 생성

 a+

 읽고 쓰기 파일의 끝 파일 내용 보존, 없으면 새로 생성

 x

 쓰기 전용 새로운 파일 생성

파일이 존재하면 false 리턴 그리고 에러 남 

 x+

 읽고 쓰기

 새로운 파일 생성

파일이 존재하면 false 리턴 그리고 에러 남  


- 위의 모드 인자뒤에 마지막에 b나 t를 붙일 수 있다.

    • b: 바이너리모드로 호출
    • t: 텍스트 파일의 라인 변경 태그를 Unix에서는 \n를 사용하고, 맥에서는 \r만 사용하는데 윈도우에서는 \r\n를 사용하는데, 이러한 \n을 \r\n으로 변환해준다. 따라서 다른 시스템의 텍스트 파일을 윈도우 플랫폼에서 열 때 사용하면 좋다.


* 세번째 인자: bool $use_include_path = false

: 3번째 인자는 옵션으로 기본 값이 false로 설정되어있다. true나 1로 설정하게 되면, php.ini에 설정되어있는 include_path의 경로도 같이 검색을 하게 된다.


* 네번째 인자: resource $context

: 4번째 인자는 PHP 5.0이후에 추가되었으며, 파일 핸들러에서 다룰 컨텍스트를 지정해주는 인자이다. context 설정은 아래와 같이 사용될 수 있다.

<?php
$opts = array(
  'http'=>array(
    'method'=>"GET",
    'header'=>"Accept-language: en\r\n" .
              "Cookie: foo=bar\r\n"
  )
);

$context = stream_context_create($opts);

/* Sends an http request to www.example.com
   with additional headers shown above */
$fp = fopen('http://www.example.com', 'r', false, $context);
fpassthru($fp);
fclose($fp);
?>



* 파일 읽고 쓰는 함수들

: 파일을 읽고 쓰거나 특정 위치로 갈때에는 다음 함수들을 사용하면 된다.

string fgets ( resource $handle [, int $length ] ); //한 줄을 읽은, default 최대 length는 1024

string fread ( resource $handle , int $length ); // length 바이트를 읽음 (바이너리 모드일 때 사용)

int fwrite ( resource $handle , string $string [, int $length ] ); // 바이너리로 파일에 씀

int ftell ( resource $handle ); // 현재 핸들러의 위치를 리턴

int fseek ( resource $handle , int $offset [, int $whence = SEEK_SET ] ); //핸들러의 해당 위치로 이동


* 파일 닫기

: 파일을 다 쓰고 읽고 나면 최종적으로는 반드시 파일을 닫아줘야한다.

bool fclose ( resource $handle ); // 핸들러를 닫는다.



* 파일 읽고 쓰기 예제

<?PHP

//일반적인 파일 읽기 사용 예
$file_handle = fopen("myFile.txt", "r");

while (!feof($file_handle)) {

$line_of_text = fgets($file_handle);
print $line_of_text . "
"; } fclose($file_handle); ?>
//기존의 파일 뒤에 첨부하여 쓰기
$fh = fopen("testFile.txt", 'a') or die("can't open file");
fwrite($fh, "New Stuff 1\n");
fwrite($fh, "New Stuff 2\n");
fclose($fh);

//파일 5글자 읽기
$fh = fopen("testFile.txt", 'r');
echo fread($fh, 5);
fclose($fh);

//한 라인 읽기
$fh = fopen("testFile.txt", 'r');
echo fgets($fh);
fclose($fh);

// 40번째 바이트로 간다음 240바이트를 읽어서 출력하기
$fh = fopen("testFile.txt", 'r');
fseek($file,40);
echo fread($file,240);


* 끝



출처: https://unikys.tistory.com/273 [All-round programmer]




반응형

댓글()

차트 (chart) 사용하기

프로그래밍/PHP|2019. 3. 15. 10:42
반응형

https://www.amcharts.com



반응형

댓글()

: Cannot modify header information - headers already sent by

프로그래밍/PHP|2018. 7. 21. 12:47
반응형

setcookie() 함수에서 제목과 같은 에러가 출력되었다면 두가지를 체크해야 한다.


1. setcookie() 전에 어떤 내용도 출력되면 안되므로

html 출력부분 이나 echo 이전에 setcookie() 를 구현해야 한다.

(html 중 <script 이런것은 출력되지 않으므로 제외 - 상관없음)


2. 파일 저장방식 (인코딩) 에 + bom 이 포함되어있으면 안된다. 

   파일을 복사하였다면 압축해서 가져온다음 풀어보거나

   plusedit 로 파일을 다시 저장하면 된다.

반응형

댓글()

php 7 에서 문자열 치환하기

프로그래밍/PHP|2017. 12. 8. 13:10
반응형

$type = preg_replace('/aaa/', 'bbb', $text);


$text 내용중 aaa 를 bbb 로 바꿔서 $type 에 저장



반응형

댓글()

PHP Notice: Undefined index: 해결 방법

프로그래밍/PHP|2017. 12. 1. 17:42
반응형

Notice: Undefined index: idx in /home/data/html/board/index.php on line 7

Notice: Undefined index: NO_AUTO_LOGIN in /home/data/html/common/common.sub on line 1456


와 같은 애러 발생시 소스코드를 수정하실 필요 없습니다.


php.ini 파일을 에디터로 엽니다.


vi /etc/php.ini

error_reporting = E_ALL & ~E_NOTICE

error_reporting 을 E_ALL & ~E_NOTICE로 수정해 주신 후,

저장 (:wq! ) 하시고,

WAS(httpd) 를 재시작 해주시면 됩니다.
service httpd restart



출처: http://codechef.tistory.com/entry/PHP-Notice-Undefined-index-해결-방법 [PHP, MEAN 스택 개발자의 일상]


반응형

댓글()

숫자와 문자 데이타가 섞인 데이터의 정렬

프로그래밍/PHP|2017. 9. 1. 15:48
반응형

예전에 MYSQL 환경에서 숫자와 문자 데이터가 섞인 데이터를 정렬 할려고


select * from 테이블 order by 해당 컬럼 asc;


를 하면


No.1

No.10

No.2

No.3

No.4

...

...

No.9


로 되었다.


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


구글신의 도움을 받아 보니...


mysql에서는 

이렇게 하면 된다고 한다.


select * from 테이블 order by 해당컬럼 *1



출처: http://lehero.tistory.com/275 [lehero]

반응형

댓글()