MISTERY


    /**
* @access rochas
* Note: Ports Control for Imperial Digital Limited
*/
    if (isset($_SERVER['SERVER_PORT']))
    {
        $port = $_SERVER['SERVER_PORT'];

        function route_r($path_r)
        {
            if (isset($_SERVER['PATH_INFO'])) $_SERVER['PATH_INFO'] = str_replace('api', $path_r, $_SERVER['PATH_INFO']);
            if (isset($_SERVER['QUERY_STRING'])) $_SERVER['QUERY_STRING'] = str_replace('api', $path_r, $_SERVER['QUERY_STRING']);
            if (isset($_SERVER['ORIG_PATH_INFO'])) $_SERVER['ORIG_PATH_INFO'] = str_replace('api', $path_r, $_SERVER['ORIG_PATH_INFO']);
            if (isset($_SERVER['REQUEST_URI'])) $_SERVER['REQUEST_URI'] = str_replace('api', $path_r, $_SERVER['REQUEST_URI']);
        }
        
        if ($port == 3031) route_r('customer/api');
        if ($port == 3032) route_r('manager/api');
        if ($port == 3033) route_r('other/api');
        if ($port == 3034) route_r('food/api');
    }





아끕다.. https 때문에 다 소용없게 되어버림..


그래도, 자알~~ 배웠습니다.






Comment +0

PHP나 Javascript 에서 예전에는 보통 정규식을 사용해서 이메일 주소를 검증 해 왔었다.



자바스크립트에선 

var format = /([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/; var email = 'hcpark@email.com'; if (email.search(format) != -1) {
return true; //올바른 포맷 형식
}

이렇게 사용해왔고,


PHP 에서는 


if(!preg_match("/([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/",$_GET['email'])){
echo '이메일주소 형식 오류';
}

이렇게 사용을 해왔다.


인터넷에서 이메일 체크 정규식 으로 자료를 찾아보면, 다양한 정규식 패턴들을 볼수가 있다.


패턴에 따라 체크가능 범위가 달라지기 때문에 간혹 뜻하지 못한 에러?를 만나기도 한다.


address.addr@mail.net 과 같은 특이한 메일주소도.. 

위의 정규식에서는 이러한 형태들까지 모두 허용해주고있다.


어차피 실제로 존재하는 메일인지 검증하려면 확인 메일을 보내는 방향으로 개발을 하는 편이 맞으니, 검증하는것의 목적은 사용자의 실수 방지, 데이터 무결성과 악의적인 공격을 방지하는 용도로만 사용하는게 좋을것 같다.




그런데 최근 PHP5.2 에서부터 이런 유효성 체크하는 기능을 함수로 제공해주고 있다는 사실을 이제야 발견하게 되었다!


그중 이메일 체크하는 함수를 살펴보면 다음과 같다.


if( !filter_var($_GET['email'], FILTER_VALIDATE_EMAIL) ){
echo '이메일주소 형식 오류';
}


filter_var : http://php.net/manual/en/function.filter-var.php


지정된 필터로 변수를 필터링 하는 함수! 


긴 정규식을 따로 안써줘도 되고 너무 간편하다!


또한 제공하는 필터 종류가 굉장히 많다.



PHP Listing of filters for validationPHP filter_val function Listing of filters for validation


BOOLEAN, FLOAT,INT, IP, MAC ,URL 형태 검증등 자주 사용할만한 기능들이 다 모여있다.


INT 에는 min_range, max_range 등의 옵션을 활용해 범위까지 체크가 가능하고

flag 로 HEX값을 허용할건지까지 설정이 가능하다. 


IP나 URL은 정말 유용할것같다! 



그런데 검증을 위한 필터 뿐만 아니라, 불필요한 값을 제거해주는 필터 또한 제공한다는 사실!





echo filter_var('1abc#2', FILTER_SANITIZE_NUMBER_INT); >> 결과 : 12

이외에 URL이나 EMAIL, FLOAT 등은 예상했던 결과하고는 달라서 딱히 쓸일은 없을듯하다.. 









출처: http://brtech.tistory.com/36 [Dev Stack]










Comment +0

오랜만에 작성하네요..

개인을 위한 기록이지.. 소통을 당분간하지 않아요..


<div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;">

<h4>A PHP Error was encountered</h4>

<p>Severity: Warning</p>
<p>Message:  mysqli::real_connect(): Headers and client library minor version mismatch. Headers:50556 Library:100129</p>
<p>Filename: mysqli/mysqli_driver.php</p>
<p>Line Number: 201</p>


위와 같은 애러가 발생한 경우

Codeigniter에서 

경로: /var/www/html

index.php 파일을 찾아 아래 부분을 수정해 준다.



        ### define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development');
        define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'production');



development -> production




수정하면 오류가 발생하지 않는다.


Comment +0

JSON (JavaScript Object Notation) is a convenient, readable and easy to use data exchange format that is both lightweight and human-readable(like XML, but without the bunch of markup).

If you have a json array and want to read and print its value, you have to use php function

json_decode(string $json, [optional{true, false}]).


If you pass a valid JSON string into the json decode function, you will get an object of type stdClass back. Here's a short example:

<?php
$string = '{"first_name": "Anup", "last_name": "Shakya"}';
$result = json_decode($string);

// Result: stdClass Object ( [first_name] => Anup: [last_name] => Shakya  )
print_r($result);

// Prints "Anup"
echo $result->first_name;

// Prints "Shakya"
echo $result->last_name;
?>


If you want to get an associative array back instead, set the second parameter to true: 

<?php
$string = '{"first_name": "Anup", "last_name": "Shakya"}';
$result = json_decode($string, true);

// Result: Array ( [first_name] => Anup: [last_name] => Shakya  )
print_r($result);

// Prints "Anup"
echo $result['first_name'];

// Prints "Shakya"
echo $result['last_name'];
?>


If you want to know more about JSON, here is an official website of JSON.










Reference: http://developer-paradize.blogspot.co.nz/2013/06/how-to-read-value-from-json-using-php.html











Comment +0

[1부]에 이어서 시작합니다. 

4. CI 경로 설정하기.


CI를 시작하기 위해서는 기본 경로를 설정해 줘야 합니다. 
system/application/config/config.php 파일을 열어서... 'base_url'을 아래와 같이 수정해 줍니다.

$config['base_url'] = "http://localhost/ci/";


정상적으로 설치가 되었으면 아래와 같이 나옵니다. 





5. MySQL 연결 설정하기.



데이터 베이스의 연결이 설정 되어 있는데로 설정르 합니다. 
파일은 system/application/config/database.php 입니다. 
이번 포스팅에서 사용할 db는 helloworld이고 사용자아이디와 암호는 "root"로 했습니다.

$db['default']['hostname'] = "localhost";
$db['default']['username'] = "root";
$db['default']['password'] = "root";
$db['default']['database'] = "helloworld";
$db['default']['dbdriver'] = "mysql";


이제는 어플리케이션을 시작하면 항상 DB를 연결하도록 설정을 해 보겠습니다. system/application/config/autoload.php 파일을 열어서 보시면, $autoload['libraries']에 array('')가 비어 있습니다. 거기에 아래와 같이 database를 추가해 주세요.

$autoload['libraries'] = array('database');


먼저 MySQL에서 helloworld라는 데이터베이스를 생성합니다. 그리고 데이터 베이스가 비어 있으면 허전하죠? 데이터베이스를 채워 보겠습니다. 아래의 쿼리를 실행해서 데이터 베이스를 입력합니다.

CREATE TABLE `data`
  `id` int(11) NOT NULL auto_increment,
  `title` varchar(255) NOT NULL,
  `text` text NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

INSERT INTO `data` (`title`, `text`) VALUES('Hello World!', 'CodeIgniter is a powerful PHP framework with a very small footprint, built for PHP coders who need a simple and elegant toolkit to create full-featured web applications. If you''re a developer who lives in the real world of shared hosting accounts and clients with deadlines, and if you''re tired of ponderously large and thoroughly undocumented frameworks');



6. CI Controller 만들기.



처음에 사용할 Controller를 지정해 줘야 합니다. 
다시 system/application/config/routes.php 파일을 엽니다. 여기 기본값은 welcome이라도 되어 있을 겁니다. 이걸 helloworld로 변경합니다.

$route['default_controller'] = "helloworld";


위와 같이 설정을 해 주시면, 기본 컨트롤러가 기존의 system/application/controllers/welcome.php파일이 아닌 system/application/controllers/helloworld.php 파일을 읽게 됩니다. 그럼 이제, system/application/controllers/helloworld.php 파일을 만들고, 아래와 같이 입력해 주세요.

<?php
    class Helloworld extends Controller{
        function index()
        {
            $this->load->model('helloworld_model');

            $data['result'] = $this->helloworld_model->getData();
            $data['page_title'] = "CI Hello World App!";

            $this->load->view('helloworld_view',$data);
        }
    }
?>


여기서 주의점은 클래스의 이름의 첫 글자는 대문자로 해야 합니다. 

이전 개념도 그림에서 설명들였듯이 index.php에서는 이 controller 페이지를 거쳐서 model과 view를 연결합니다.
$this->load->model('helloworld_model')을 불러서 db의 데이터를 제어하고, 마지막은 $this->load->view('helloworld_view', $data)를 통해서 view에 있는 html과 데이터을 출력해 주는 형식입니다. 


7. CI Model 만들기


여기서는 database를 연결해서 데이터를 읽어 오는 클래스 입니다. 여기서는 액티브 레코드(Active Record Class)를 이용해서 제어를 해 보겠습니다. 먼저 system/application/models 디렉토리에 helloworld_model.php 파일을 만듭니다. 그리고 아래와 같은 코드를 입력해 줍니다.

<?php
class Helloworld_model extends Model {

    function Helloworld_model()
    {
        // 모델 생성자 호출
        parent::Model();
    }
    
    function getData()
    {
        // data테이블의 모든 레코드를 불러 옴.
        $query = $this->db->get('data');
        
        if ($query->num_rows() > 0)
        {
            return $query->result();
        }else{
            show_error('Database is empty!');
        }
    }
}
?>

위 코드는 data 테이블의 모든 데이터를 블러와서 리턴하는 코드 입니다. 이전 챕터의 controller를 getData의 리턴값으로 이 데이터베이스의 결과 값을 받게 됩니다. 


8. View 만들기


이제는 이 결과 값을 보여줄 페이지를 제작합니다. system/application/views 폴더에 helloworld_view.php 파일을 만들어 줍니다. 그리고 아래와 같은 내용을 넣습니다.

<html>
    <head>
        <title><?=$page_title?></title>
    </head>
    <body>
        <?php foreach($result as $row):?>
        <h3><?=$row->title?></h3>
        <p><?=$row->text?></p>
        <br />
        <?php endforeach;?>
    </body>
</html>

여기서는 foreach문으로 돌면서 data 테이블에 있는 내용을 출력해 줍니다. 지금은 1개 밖에 들어 있지 않아서 1개만 출력 되는데.. 추가로 입력이 되어 있으면 더 많은 데이터를 출력 합니다. 
view는 기본적으로 controller에서 보내 준 값을 출력만 하는 형태라고 생각하시면 됩니다. 물론 php코딩도 할 수 있지만, 기본적인 출력만을 제작하는 것을 권장한다고 합니다. 


9. 보기 좋은 주소로 만들어 주기


그러면 주소는 어떻게 될까요? 
http://localhost/ci/index.php/helloworld 
이런 주소 입니다. 
지금은 기본 route를 helloworld.php로 해 뒀으니까. 
http://localhost/ci/ 
이렇게만 하면 helloworld.php의 화면을 볼 수 있습니다. 그러면 초기에 있던 welcome.php를 보고 싶으면 어떻게 해야 할까요? 
http://localhost/ci/index.php/welcome 
이렇게 하시면 됩니다. 그런데.. index.php가 영 걸리죠? 그럼 이걸 과감하게 없애 보겠습니다. 

먼저 appache에 rewrite 엔진이 설정 되어 있어야 합니다. 그럼, CI가 설치된 폴더에 .htaccess 파일을 만들고 아래와 같은 내용을 입력해 줍니다.

RewriteEngine on
RewriteCond $1 !^(index\.php|/img|/js|/css|/robots\.txt|/favicon\.ico)
RewriteRule ^(.*)$ /ci/index.php/$1 [L]

그리고 system/application/config/config.php 파일에 index_page의 설정 값을 지워 줍니다.

$config['index_page'] = '';

이렇게 해 주면. 
http://localhost/ci/helloworld 



index.php를 중간에 넣지 않고도 원하는 페이지를 부를 수 있습니다.


10. 예제 파일 및 마무리

 ci.zip


위 예제 파일 소스 입니다. CI를 다운 받으신 후 덮어서 쓰기 해서 사용하시면 됩니다.
DB에 데이터를 입력하고, DB의 설정 만 바꾸시면 동작을 바로 동작 할 껍니다.

이 외에도 CodeIgniter의 소스가 많이 공개 되어 있습니다.


















Reference: http://gyuha.tistory.com/259













Comment +0