ubuntu (14.04) 에서 php 업데이트 하기






도쿠위키를 설치하려다가 다음과 같은 에러가 나와서 설치가 중단되었다.  




The installer found some problems, indicated below. You can not continue until you have fixed them.


Your PHP version 5.5.9-1ubuntu4.26 is lower than the needed 5.6.0. You need to upgrade your PHP install.



도쿠위키를 설치하기 위해서는 PHP 버전이 적어도 5.6 은 되어야 한다고 해서 

중간에 아래와 같이 PHP 업데이트를 진행하였다. 




PPA(Personal Package Archive) 라는 개인 패키지 아카이브를 사용해서 (블로그 참조

업데이트를 진행하였다. 

유분투에서 PHP 7.0 설치를 지원하는 PPA 를 일단 추가해보자. 





# sudo add-apt-repository ppa:ondrej/php


Co-installable PHP versions: PHP 5.6, PHP 7.x and most requested extensions are                                                                                              included. Only Supported Versions of PHP (http://php.net/supported-versions.php                                                                                             ) for Supported Ubuntu Releases (https://wiki.ubuntu.com/Releases) are provided.                                                                                              Don't ask for end-of-life PHP versions or Ubuntu release, they won't be provide                                                                                             d.


Debian oldstable and stable packages are provided as well: https://deb.sury.org/                                                                                             #debian-dpa


You can get more information about the packages at https://deb.sury.org


BUGS&FEATURES: This PPA now has a issue tracker:

https://deb.sury.org/#bug-reporting


CAVEATS:

1. If you are using php-gearman, you need to add ppa:ondrej/pkg-gearman

2. If you are using apache2, you are advised to add ppa:ondrej/apache2

3. If you are using nginx, you are advise to add ppa:ondrej/nginx-mainline

   or ppa:ondrej/nginx


PLEASE READ: If you like my work and want to give me a little motivation, please                                                                                              consider donating regularly: https://donate.sury.org/


WARNING: add-apt-repository is broken with non-UTF-8 locales, see

https://github.com/oerdnj/deb.sury.org/issues/56 for workaround:


# LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php

 More info: https://launchpad.net/~ondrej/+archive/ubuntu/php

Press [ENTER] to continue or ctrl-c to cancel adding it


# LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php

 More info: https://launchpad.net/~ondrej/+archive/ubuntu/php

Press [ENTER] to continue or ctrl-c to cancel adding it


gpg: keyring `/tmp/tmpjth0tz09/secring.gpg' created

gpg: keyring `/tmp/tmpjth0tz09/pubring.gpg' created

gpg: requesting key E5267A6C from hkp server keyserver.ubuntu.com

gpg: /tmp/tmpjth0tz09/trustdb.gpg: trustdb created

gpg: key E5267A6C: public key "Launchpad PPA for Ondřej Surý" imported

gpg: Total number processed: 1

gpg:               imported: 1  (RSA: 1)

OK







설치 중간에 apache2를 위한 PPA 주소도 가이드해서 이것도 같이 추가하였다. 



sudo add-apt-repository ppa:ondrej/apache2




PPA 설치가 완료되면 이 내용을 포함할 수 있도록 로컬 패키지 캐시를 업데이트한다. 




sudo apt-get update




그 후 php 7.0 을 설치한다. 






# sudo apt-get install php7.0

Reading package lists... Done

Building dependency tree

Reading state information... Done

The following packages were automatically installed and are no longer required:

  duplicity librsync1 python-lockfile

Use 'apt-get autoremove' to remove them.

The following extra packages will be installed:

  libapache2-mod-php7.0 libpcre16-3 libpcre3 libpcre3-dev libpcre32-3

  libpcrecpp0 libssl1.1 php-common php7.0-cli php7.0-common php7.0-json

  php7.0-opcache php7.0-readline

Suggested packages:

  php-pear

The following NEW packages will be installed:

  libapache2-mod-php7.0 libpcre16-3 libpcre32-3 libssl1.1 php-common php7.0

  php7.0-cli php7.0-common php7.0-json php7.0-opcache php7.0-readline

The following packages will be upgraded:

  libpcre3 libpcre3-dev libpcrecpp0

3 upgraded, 11 newly installed, 0 to remove and 583 not upgraded.

Need to get 6,086 kB of archives.

After this operation, 20.4 MB of additional disk space will be used.

Do you want to continue? [Y/n]




정상적으로 설치가 마무리 되었다. 

mysql 을 사용할 경우 php7.0-mysql 패키지도 설치해준다. 




# sudo apt-get install php7.0-mysql

Reading package lists... Done

Building dependency tree

Reading state information... Done

The following packages were automatically installed and are no longer required:

  duplicity librsync1 python-lockfile

Use 'apt-get autoremove' to remove them.

The following NEW packages will be installed:

  php7.0-mysql

0 upgraded, 1 newly installed, 0 to remove and 583 not upgraded.

Need to get 123 kB of archives.

After this operation, 526 kB of additional disk space will be used.

Get:1 http://ppa.launchpad.net/ondrej/php/ubuntu/ trusty/main php7.0-mysql amd64 7.0.33-1+ubuntu14.04.1+deb.sury.org+1 [123 kB]

Fetched 123 kB in 1s (92.4 kB/s)

Selecting previously unselected package php7.0-mysql.

(Reading database ... 202132 files and directories currently installed.)

Preparing to unpack .../php7.0-mysql_7.0.33-1+ubuntu14.04.1+deb.sury.org+1_amd64.deb ...

Unpacking php7.0-mysql (7.0.33-1+ubuntu14.04.1+deb.sury.org+1) ...

Processing triggers for libapache2-mod-php7.0 (7.0.33-1+ubuntu14.04.1+deb.sury.org+1) ...

Setting up php7.0-mysql (7.0.33-1+ubuntu14.04.1+deb.sury.org+1) ...


Creating config file /etc/php/7.0/mods-available/mysqlnd.ini with new version


Creating config file /etc/php/7.0/mods-available/mysqli.ini with new version


Creating config file /etc/php/7.0/mods-available/pdo_mysql.ini with new version

Processing triggers for libapache2-mod-php7.0 (7.0.33-1+ubuntu14.04.1+deb.sury.org+1) ...







마지막으로 php --version으로 제대로 7.0으로 업데이트 된것을 확인한다. 



# php --version

PHP 7.0.33-1+ubuntu14.04.1+deb.sury.org+1 (cli) (built: Dec  7 2018 09:26:06) ( NTS )

Copyright (c) 1997-2017 The PHP Group

Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies

    with Zend OPcache v7.0.33-1+ubuntu14.04.1+deb.sury.org+1, Copyright (c) 1999-2017, by Zend Technologies






참고 : https://www.digitalocean.com/community/tutorials/how-to-upgrade-to-php-7-on-ubuntu-14-04





정규식 online tester - regex101 & preg_match_all




자연어처리를 하다보면 종종 정규식을 사용하게 되는데

정규식 (pcre)를 코드에 반영하기 이전에 

온라인에서 내가 짠 정규식이 제대로 작동하는지 확인하고 싶을 경우가 있다. 




그럴때 사용할 수 있는 온라인 정규식 tester & debugger 사이트를 소개 한다. 


https://regex101.com/


사이트 바로가기 







왼쪽의 FLAVOR 메뉴에서 php의 pcre, javascrip, python, golang등의 

다양한 정규식 처리를 할 수 있는 프로그램 언어를 선택할 수 있다. 



빌라 이름에서 ()로 들어가 있는 문자열을 찾아 

()에 들어가 있는 세부 정보를 제거 하고 

대표 빌라 이름들만 추출하고 싶어 정규식을 작성하였다. 

한글도 되어 있는 빌라 이름이 없으면 그냥 숫자라도 남기기로 했다. 



REGULAR EXPLRESSION  에서 자신이 원하는 정규식을 작성하면 

아래 TEST STRING에서 정규식에 속하는 샘플들만 하이라이트 된다. 

그리고 오른쪽의 MATCH INFORMATION에서 

TEST STRING에서 정규식에서 추출된 이름들이 나열된다. 











현재 정규식으로도 내가 찾기 원하는 패턴을 찾을 수 있지만 

정규식에서는 추출하기를 원하는 패턴을  ()을 묶어 세부 패턴으로 지정할 수 있다. 

앞에 있는 빌라 이름만 추출하고 싶어 첫번째 세부 패턴 ()를 추가 하였다. 

문자열에 들어가 있는 문자 ( ) 와 세부 패턴은 escape 문자인 \로 구분이 된다. 

문자인 ( 과 )는 \로 escape   처리를 해 주었다. 






테스트 한 결과가 마음에 들면 

왼쪽의 TOOLS에서 code generator에서 

프로그래밍 언어별로 코드를 생성할 수도 있다. 







preg_match_all 함수는 링크에서 자세한 내용을 확인할 수 있다. 


preg_match_all( string $pattern, string $subject, 

[, array $matches [, int $flags = PREG_PATTERN_ORDER [, int $offset = 0 ]]]



필수 옵션은 $pattern (정규식), $subject(문자열)이 있고 

그 외 옵션은 아래와 같다. 


$matches : 정규식을 찾은 결과를 저장하는 다차원 배열

$flags : 정규식으로 찾은 문자열을 저장하는 방식 

 (PREG_PATTERN_ORDER, PREG_SET_ORDER 등) 


PREG_PATTERN_ORDER으로 하면 $matches[0]에 찾은 전체 문자열이 들어가고

 $matches[1] 부터 ()으로 명시한 세부 패턴의 문자열이 들어간다. 


PREG_SET_ORDER 으로 하면 

$matches[*][0]에 찾은 전체 문자열이 들어가고

$matches[*][1] 부터 ()으로 명시한 세부 패턴의 문자열이 들어간다. 

*은 전체 세부 패턴의 개수만큼 있다. 


 $offset : 패턴이 찾기 시작하는 위치. 처음부터 찾기 시작하면 0. 



preg_match 


function get_alias($str)

{

        $re = '/(.+)\(.+\)/';


               preg_match($re, $str, $matches);


        // Print the entire match result

        var_dump($matches);

        return $matches[1];


}


string : 중앙힐타운(나)(450-11)


array(2) {

  [0]=>

  string(28) "중앙힐타운(나)(450-11)"

  [1]=>

  string(20) "중앙힐타운(나)"

}














dialogflow - curl 호출 php 스크립트




웹페이지에서 직접 dialogflow 를 사용할 일이 있어서 

php curl 로 dialogflow 서비스를 호출하는 스크립트를 작성했다



dialogflow 참고 사이트 




참고로 터미널에서는 아래와 같이 curl 호출을 할 수 있다. 


curl 'https://api.dialogflow.com/v1/query?v=20170712&query=test&lang=ko&sessionId=95aadeec-*** 78dd939&timezone=Asia/Seoul' -H 'Authorization:Bearer 9***'






여기서 본인의 인증 코드를 모르는 사람은 

dialogflow 서비스의 설정의 General 탭에서 확인 가능하다. 











링크한 문서의 access token을 보면 query 질의에는 client access token 을 사용하면 된다고 한다. 




참고로 access token 설정이 잘못 될 경우 

아래와 같은 에러 메세지가 나온다. 





{"status":{"code":401,"errorType":"unauthorized","errorDetails":"You are not authorized for this operation. Invalid access token"}}






아래는 전체 php 스크립트이다. 




<?

// Get cURL resource

$curl = curl_init();


// Set some options - we are passing in a useragent too here

$accesstoken = "9***";

$developertoken = "9****";

$headr = array();

$headr[] = 'Content-type: application/json';

$header[] = 'Authorization:Bearer '.$developertoken;

$query = "test";

curl_setopt_array($curl, array(

    CURLOPT_RETURNTRANSFER => 1,

    CURLOPT_URL => 'https://api.dialogflow.com/v1/query?v=20170712&query='.$query.'&lang=ko&sessionId=***-b320c78dd939&timezone=Asia/Seoul',

    #CURLOPT_USERAGENT => 'Codular Sample cURL Request',

    CURLOPT_HTTPHEADER => $header

));



// Send the request & save response to $resp

$resp = curl_exec($curl);


// Close request to clear up some resources

print_r($resp);


curl_close($curl);

?>




터미널에서 스크립트를 실행할 경우 

아래와 같이 정상적으로 dialogflow 실행  결과가 나온다. 




php client.php

{

  "id": "****",

  "timestamp": "2018-04-04T02:55:07.413Z",

  "lang": "ko",

  "result": {

    "source": "agent",

    "resolvedQuery": "test",

    "action": "s**",

    "actionIncomplete": false,

    "parameters": {},

    "contexts": [

      {

        "name": "test-followup",

        "parameters": {},

        "lifespan": 2

      }

    ],

    "metadata": {

      "intentId": "***",

      "webhookUsed": "true",

      "webhookForSlotFillingUsed": "false",

      "webhookResponseTime": 1297,

      "intentName": "test"

    },

    "fulfillment": {

      "speech": "Hello from webhook",

      "source": "agent",

      "displayText": "Hello from webhook",

      "messages": [

        {

          "type": 0,

          "speech": "Hello from webhook"

        }

      ]

    },

    "score": 1.0

  },

  "status": {

    "code": 200,

    "errorType": "success",

    "webhookTimedOut": false

  },

  "sessionId": "***dd939"

}




[ php ] csv 파일 테이블로 import 하기 ( LOAD DATA INFILE )





디렉토리에 들어있는 csv 파일들을 DB에 저장할 일이 생겼다.

파일 개수가 많아 php로 파일 리스트를 읽어 테이블들로 일괄 저장하려고 한다.

 

mysqlimport도 생각해봤는데 LOAD DATA INFILE 문 처리속도가 더 빠르다고 한다.

 

일단 DB에 접속하자.

 

$conn = mysqli_connect('localhost', 'userid', 'password','dbname');
if (mysqli_connect_errno($conn)) 
     echo "데이터베이스 연결 실패: " . mysqli_connect_error();
else
 echo "connection success";

 

csv파일을 import할 테이블도 생성하자.

기존 csv파일에 없는 idx필드를 생성해 primary key값으로 설정하고 자동 증가 옵션을 주었다.

 

$sql = "CREATE TABLE `테이블이름` (
     `idx` INT(11) NOT NULL AUTO_INCREMENT,
     PRIMARY KEY(idx),
     `날짜` INT(8) NOT NULL,
     `가격` INT(5) NOT NULL,
     ...

`시간` INT(4) NOT NULL 
 )";

 

if(mysqli_query($conn, $sql))

    echo "Table created successfully"; 

else
    echo "Error creating table:".mysqli_error($conn);
  

 

LOAD DATA INFILE 구문 규칙은 아래와 같다.

 

LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name' [REPLACE | IGNORE] INTO TABLE tbl_name [CHARACTER SET charset_name] [{FIELDS | COLUMNS} [TERMINATED BY 'string'] [[OPTIONALLY] ENCLOSED BY 'char'] [ESCAPED BY 'char'] ] [LINES [STARTING BY 'string'] [TERMINATED BY 'string'] ] [IGNORE number LINES] [(col_name_or_user_var,...)] [SET col_name = expr,...]

[각주:1]

 

기본적으로 csv 파일 이름과 테이블 이름만 입력해도 사용 가능하다.

이럴 경우 나머지 옵션들은 기본 옵션으로 실행되게 된다.

 

파일 이름은 경로와 함께 나타낼 수 있으며 상대 경로 절대 경로 다 사용 가능하다.

기본적으로 현재 데이터베이스가 있는 디렉토리가 기본 경로가 된다.

csv파일이 데이터베이스와 다른 경로에 있기 때문에 절대 경로로 나타낸다.

필드가 , 로 구분되어 있기 때문에 FIELDS TERMINATED BY ',' 옵션을 추가했다.

 

참고로 기본 필드 값은 아래와 같다.

 

FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\'
LINES TERMINATED BY '\n' STARTING BY ''

 

 

응용프로그램에서 생성되는 많은 csv파일이 아래와 같은 포맷을 사용한다고 하니 참고하자.

 

LOAD DATA INFILE 'data.txt' INTO TABLE tbl_name
  FIELDS TERMINATED BY ',' ENCLOSED BY '"'
  LINES TERMINATED BY '\r\n'
  IGNORE 1 LINES;

 

 

csv파일의 첫 라인에는 필드 이름이 있었기 때문에 IGNORE 1 LINES"; 옵션도 추가했다.

IGNORE N LINES 옵션은 파일 N번째 라인부터 테이블로 저장하게 한다.

 

만약 테이블의 필드와 csv파일의 필드가 정확히 일치하면 그냥 아래와 같이 적어주면 된다.

 

$sql = "LOAD DATA INFILE '/var/lib/mysql-files/파일이름.csv'
     INTO TABLE `테이블이름`
     FIELDS TERMINATED BY ','
     IGNORE 1 LINES";
  

 

간혹 파일이 존재하는데 파일이 없다는 에러가 나올 수 있다. 



mysql> LOAD DATA INFILE '/home/changelist.csv' INTO TABLE changelist

    ->   FIELDS TERMINATED BY '\t'

    ->   IGNORE 1 LINES;

ERROR 29 (HY000): File '/home/changelist.csv' not found (Errcode: 13)



그럴 경우는 주로 권한의 문제로 파일이 있는 폴더나 파일 소유자를 mysql로 변경하면 해결 된다. 


chown mysql:mysql changelist.csv


 

그런데 나는 인덱스 필드를 추가했기 때문에 ( ) 옵션으로 필드들 이름을 하나하나 적어주기로 한다(...)

여기서 필드들 이름 순서는 파일에 나타나는 필드  순서와 동일해야 한다.


$sql = "LOAD DATA INFILE '/var/www/html/파일이름.csv'
     INTO TABLE `테이블이름`
     FIELDS TERMINATED BY ','
     IGNORE 1 LINES"

     (`날짜`,`가격`,... ,`시간`)";

 

if(mysqli_query($conn, $sql))
    echo "LOAD DATA INFILE successfully"; 
else
    echo "Error LOAD DATA INFILE:".mysqli_error($conn);

 

$conn->close();

 


필드 명까지 다 입력하고 php 파일을 실행하자 테이블이 생성되고 csv 파일이 테이블로 잘 변환된 것을 확인할 수 있었다 : )

 

만약 테이블에 null 값을 입력해야 한다면 (그리고 csv 파일에는 빈 입력값으로 들어있다면) 

빈 입력값을 \N으로 입력해야 한다



MySQL manual says:


When reading data with LOAD DATA INFILE, empty or missing columns are updated with ''. If you want a NULL value in a column, you should use \N in the data file. The literal word “NULL” may also be used under some circumstances.

So you need to replace the blanks with \N like this:


예시: 

1,2,3,4,5

1,2,3,\N,5

1,2,3



 

 

  1. 출처:http://dev.mysql.com/doc/refman/5.1/en/load-data.html [본문으로]
  • 2017.03.30 13:40 ADDR 수정/삭제 답글

    비밀댓글입니다

    • adana 2017.03.30 21:28 신고 수정/삭제

      네 이메일주소 알려주세요

[ php ] mysql / mysqli - select / insert / update 문 사용 예시

 

 

1. DB 연결하기


$conn = mysqli_connect('localhost', 'username', 'password','dbname');
if (mysqli_connect_errno($conn))
{
  echo "데이터베이스 연결 실패: " . mysqli_connect_error();
}
else
{

// to do something

}

 


2. select 문 사용


mysql_query 결과로 영향받은 row수를 알기 위해서는 mysqli_affected_rows 함수를 사용한다. 

- select 결과를 associative array로 반환받기 

$check_query = "SELECT * from ".$table." where code='".$code."' and period='".$period."'";

 $result=mysqli_query($conn,$check_query);

if(mysqli_affected_rows($conn) > 0)
{

  

 // mysqli_fetch_assoc 함수 

 // Fetch a result row as a numeric array and as an associative array:


 while ($row = mysqli_fetch_assoc($result))
 {
            $id = $row['id']."\t";
            $name = $row['name']."\t";
            $news .= $row['news'];

  }
                                 

}

mysqli_free_result($result);


 참고: http://www.w3schools.com/php/func_mysqli_fetch_array.asp

- sum 함수를 사용한 select 문 예시 


 $sum_query = "select Sum(`scores`) as value_sum from tablename";
        $result = $conn->query($sum_query);
        $row = mysqli_fetch_assoc($result);
        $sum_up_short = $row['value_sum'];



참고: http://www.tizag.com/mysqlTutorial/mysqlsum.php

3. insert 문 사용

$query = "INSERT INTO ".$table."(code, name_kor,name_eng, market, type, period,`".$field."`) VALUES ('".$code."','".$name_kor."','".$name_eng."','".$market."','".$type."','".$period."','".$value."');";

   if(mysqli_query($conn, $query))
       echo "insert successfully";
      else
       echo "Error:".$query."mesage:".mysqli_error($conn);  

3. update 문 사용

 $query = "UPDATE ".$tablename." SET `field0`='".$value0."' ,`field1`='".$value1."' ,`field2`='".$value2."' ,`".$field3."`='".$value3."' WHERE 날짜='".$time."' AND 종목코드='".$stockcode."'";
    
    if(mysqli_query($conn, $query))
       echo "update successfully";
      else
       echo "Error:".$query."mesage:".mysqli_error($conn);  
       

 

 4. DB 연결 닫기 

$conn->close();



 

php 시간 표현 예시 - dateTime 사용 예시



- 현재 시간 구하기 (YYYY-mm-dd) format




        $current_date = new DateTime();

        $current_date->format('Y-m-d');

  



- 현재 요일 구하기




function get_day_of_week($sql_date)

{

        $updated_date = new DateTime($sql_dat);

        $day_of_week = $updated_date->format('D');

        return $day_of_week;

}







- 두 시간 표현 간 시간 차이 구하기 

참고: http://haruair.com/blog/1871, http://php.net/manual/kr/datetime.diff.php





public DateInterval DateTime::diff ( DateTimeInterface $datetime2 [, bool $absolute = false ] )





       $date_db= new DateTime();

        $date_news=new DateTime("2014-01-28");

        $diff=$date_db->diff($date_news);

        print "\ndiff days".$diff->days; // 522



        if($date_news <= $date_db)

        {

            echo "\nnews data is older than or same as db\n";

            break;

        }

        else

        {

            echo "\nnews data is newer than db\n";




<?php
$date1 = new DateTime("now"); or $date1= new DateTime();

$date2 = new DateTime("tomorrow");

var_dump($date1 == $date2);
var_dump($date1 < $date2);
var_dump($date1 > $date2);
?>

위 예제의 출력:

bool(false)
bool(true)
bool(false)





- 특정 날짜의 하루 전 날 구하기 

참고: http://php.net/manual/en/datetime.modify.php



<?php
$date = new DateTime('2006-12-12');
$date->modify('-1 day');
echo $date->format('Y-m-d');
?>


  • dd 2018.01.09 21:30 ADDR 수정/삭제 답글


    $date->modify('+1 month');

리눅스(centos)에 phpmyadmin 설치하기



이미 APM 설치가 되어있는 서버에 phpmyadmin를 추가로 설치하였다.


서버: CentOS 




shell> yum install epel-release

shell> yum update

shell> yum install phpmyadmin





보통 로컬서버에서 접속하지 않으면 아래와 같은 접속 권한이 없다는 오류가 나온다. 



Forbidden


You don't have permission to access /phpmyadmin/ on this server.




그럴 경우 phpmyadmin의 설정파일에서 phpmyadmin에 접근할 수 있는 ip를 추가하도록 하자. 

또는 보안에는 약해지겠지만 ip 제한 정책을 아예 없앨 수 도 있다. 

아래는 phpmyadmin의 기본 설정파일 내용이다. 


vi /etc/httpd/conf.d/phpMyAdmin.conf





Alias /phpMyAdmin /usr/share/phpMyAdmin

Alias /phpmyadmin /usr/share/phpMyAdmin


<Directory /usr/share/phpMyAdmin/>

   AddDefaultCharset UTF-8


   <IfModule mod_authz_core.c>

     # Apache 2.4

     <RequireAny>

       Require ip 127.0.0.1

       Require ip ::1

     </RequireAny>

   </IfModule>

   <IfModule !mod_authz_core.c>

     # Apache 2.2

     Order Deny,Allow

     Deny from All

     Allow from 127.0.0.1

     Allow from ::1

   </IfModule>

</Directory>





예시 1 ) 223.170.188.0/24 대역대의 ip전체 접속 허용 



Alias /phpMyAdmin /usr/share/phpMyAdmin

Alias /phpmyadmin /usr/share/phpMyAdmin


<Directory /usr/share/phpMyAdmin/>

   AddDefaultCharset UTF-8


   <IfModule mod_authz_core.c>

     # Apache 2.4

     <RequireAny>

       Require ip 127.0.0.1, 223.170.188.0/24

       Require ip ::1

     </RequireAny>

   </IfModule>

   <IfModule !mod_authz_core.c>

     # Apache 2.2

     Order Deny,Allow

     Deny from All

     Allow from 127.0.0.1, 223.170.188.0/24

     Allow from ::1

   </IfModule>

</Directory>




예시 2 ) ip 접속 제한 없앰



<Directory /usr/share/phpMyAdmin/>

   AddDefaultCharset UTF-8


   <IfModule mod_authz_core.c>

     # Apache 2.4

     <RequireAny>

       Require all granted

       Require ip 127.0.0.1

       Require ip ::1

     </RequireAny>

   </IfModule>

   <IfModule !mod_authz_core.c>

     # Apache 2.2

     Order Allow,Deny

     Allow from All

     Allow from 127.0.0.1

     Allow from ::1

   </IfModule>

</Directory>




마지막으로 설정파일에서 기본 alias를 설정한다. 

alias는 phpmyadmin 접속주소인데 보통 http://yourdomain/phpmyadmin 이 기본 phpmyadmin의 접속 주소가 된다. 


기본 설정은 아래와 같지만  자신만이 알수 있는 alias로 변경하는것이 보안에 좋다. 

Alias /phpMyAdmin /usr/share/phpMyAdmin

Alias /phpmyadmin /usr/share/phpMyAdmin 



참고로 예전 서버에 남아있던 해킹시도 로그 기록들이다. 

phpmyadmin에 대한 다양한 주소로 접속을 시도하는 것을 확인할 수 있다. 

여기에서 언급되는 주소를 피해서 alias를 설정하는 것이 좋을 것 같다. 




[Tue Jul 07 14:09:28 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/admin

[Tue Jul 07 14:09:31 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/administrator

[Tue Jul 07 14:09:31 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/database

[Tue Jul 07 14:09:35 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/db

[Tue Jul 07 14:09:37 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/dbadmin

[Tue Jul 07 14:09:37 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/myadmin

[Tue Jul 07 14:09:37 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/myadminphp

[Tue Jul 07 14:09:38 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/mysql-admin

[Tue Jul 07 14:09:39 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/mysql

[Tue Jul 07 14:09:41 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/mysql

[Tue Jul 07 14:09:42 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/mysqladmin

[Tue Jul 07 14:09:42 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/mysqlmanager

[Tue Jul 07 14:09:43 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/php-my-admin

[Tue Jul 07 14:09:43 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/php-myadmin

[Tue Jul 07 14:09:43 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/phpMyAdmin-2

[Tue Jul 07 14:09:44 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/phpMyAdmin-3

[Tue Jul 07 14:09:44 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/phpMyAdmin-4

[Tue Jul 07 14:09:52 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/phpMyAdmin2

[Tue Jul 07 14:09:52 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/phpMyAdmin3

[Tue Jul 07 14:09:53 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/phpMyAdmin4

[Tue Jul 07 14:09:53 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/phpMyadmin

[Tue Jul 07 14:09:53 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/phpmanager

[Tue Jul 07 14:09:54 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/phpmy-admin

[Tue Jul 07 14:09:54 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/phpmy

[Tue Jul 07 14:09:55 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/phpmyAdmin

[Tue Jul 07 14:09:55 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/phpmyadmin

[Tue Jul 07 14:09:55 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/phpmyadmin1

[Tue Jul 07 14:09:56 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/phpmyadmin2

[Tue Jul 07 14:09:56 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/phpmyadmin3

[Tue Jul 07 14:09:57 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/phpmyadmin4

[Tue Jul 07 14:09:57 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/phppma

[Tue Jul 07 14:09:57 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/pma

[Tue Jul 07 14:09:58 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/pma2011

[Tue Jul 07 14:09:58 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/pma2012

[Tue Jul 07 14:09:58 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/pma2013

[Tue Jul 07 14:09:59 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/pma2014

[Tue Jul 07 14:09:59 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/pma2015

[Tue Jul 07 14:10:00 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/program

[Tue Jul 07 14:10:00 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/shopdb

[Tue Jul 07 14:10:00 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/sql

[Tue Jul 07 14:10:01 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/sql


..

[Thu Jun 25 15:16:23 2015] [error] [client 104.243.24.211] File does not exist: /var/www/html/phpMyAdmin-2.10.0.0

[Thu Jun 25 15:16:24 2015] [error] [client 104.243.24.211] File does not exist: /var/www/html/phpMyAdmin-2.10.0.1

[Thu Jun 25 15:16:24 2015] [error] [client 104.243.24.211] File does not exist: /var/www/html/phpMyAdmin-2.10.0.2

[Thu Jun 25 15:16:25 2015] [error] [client 104.243.24.211] File does not exist: /var/www/html/phpMyAdmin-2.10.0

[Thu Jun 25 15:16:25 2015] [error] [client 104.243.24.211] File does not exist: /var/www/html/phpMyAdmin-2.10.1.0

[Thu Jun 25 15:16:26 2015] [error] [client 104.243.24.211] File does not exist: /var/www/html/phpMyAdmin-2.10.2.0

[Thu Jun 25 15:16:26 2015] [error] [client 104.243.24.211] File does not exist: /var/www/html/phpMyAdmin-2.11.0.0

[Thu Jun 25 15:16:27 2015] [error] [client 104.243.24.211] File does not exist: /var/www/html/phpMyAdmin-2.11.1-all-languages

[Thu Jun 25 15:16:27 2015] [error] [client 104.243.24.211] File does not exist: /var/www/html/phpMyAdmin-2.11.1.0

[Thu Jun 25 15:16:28 2015] [error] [client 104.243.24.211] File does not exist: /var/www/html/phpMyAdmin-2.11.1.1

[Thu Jun 25 15:16:28 2015] [error] [client 104.243.24.211] File does not exist: /var/www/html/phpMyAdmin-2.11.1.2

[Thu Jun 25 15:16:29 2015] [error] [client 104.243.24.211] File does not exist: /var/www/html/phpMyAdmin-2.6.1-pl2

[Thu Jun 25 15:16:29 2015] [error] [client 104.243.24.211] File does not exist: /var/www/html/phpMyAdmin-2.6.1-pl3

[Thu Jun 25 15:16:30 2015] [error] [client 104.243.24.211] File does not exist: /var/www/html/phpMyAdmin-2.6.4-pl3

[Thu Jun 25 15:16:30 2015] [error] [client 104.243.24.211] File does not exist: /var/www/html/phpMyAdmin-2.6.4-pl4

[Thu Jun 25 15:16:31 2015] [error] [client 104.243.24.211] File does not exist: /var/www/html/phpMyAdmin-2.6.4-rc1

[Thu Jun 25 15:16:31 2015] [error] [client 104.243.24.211] File does not exist: /var/www/html/phpMyAdmin-2.6.5

[Thu Jun 25 15:16:31 2015] [error] [client 104.243.24.211] File does not exist: /var/www/html/phpMyAdmin-2.6.6

[Thu Jun 25 15:16:32 2015] [error] [client 104.243.24.211] File does not exist: /var/www/html/phpMyAdmin-2.6.9





마지막으로 httpd 재시작하면 변경된 설정이 반영 된다. 


shell> service httpd restart

httpd 를 정지 중:                                          [  OK  ]

httpd (을)를 시작 중:                                      [  OK  ]









아마존 클라우드 (AWS) 시작하기 6 - apache php mysql 설치하기


참고: http://luckyyowu.tistory.com/105

 

 

 OS : Ubuntu 14.04

 

이제 기본 환경 설정이 완료되었으니 실제로 APM (apache + php + mysql)을 설치해본다.

 

1. 서버 정보와 기존 패키지들을 업데이트 한다.

 

#sudo apt-get update

 

패키지 설치정보가 있는 서버 정보를 업데이트 한다.

 

#sudo apt-get upgrade

 

기존에 설치되어 있는 패키지들을 업데이트 한다.

 

 

 

 

upgrade중에 아래와 같은 메세지가 나오면서 설치가 멈추었다.

(A new version of /boot/grub/menu.lst is available, but the version installed currently has been locally modified)

검색해보니 세번째 메뉴로 차이점을 보고 별 문제 없으면 

install the package maintainer's version을 선택하면 되는 듯 하다.

 

(참고: http://unix.stackexchange.com/questions/113732/a-new-version-of-configuration-file-etc-default-grub-is-available-but-the-vers)

 

 

 

 

일단 install the package maintainer's version을 선택하고

혹시 나중에 이슈있을 때를 대비하여 diff 결과도 저장해두었다.

 

 

2. 아파치를 설치한다.

 

#sudo apt-get install apache2 

 

 

아파치를 문제없이 설치되고 설치 과정 중에 자동으로 아파치 서비스가 실행된다.

 

3. php를 설치한다.

 

 

#sudo apt-get intall php5

 

 

 

 

4. mysql server와 client를 설치한다.

 

#sudo apt-get install mysql-server

 

mysql DB 구동을 위해 mysql-server를 설치한다.

설치 과정에 아래 스크린샷과 같이 root 암호를 입력한다.

나중에 phpmyadmin 설정할때 지금 설정한 root 암호를 입력해야 한다.

 

#sudo apt-get install mysql-client

 

mysql 접속을 위해 mysql-client 도 설치해준다.

 

php와 mysql을 설치하다 보면 설치 중간중간 알아서

아파치도 다시 재시작해 주어 꽤 편리하다

 

 

 

 

#sudo apt-get install php5-mysql

 

mysql과 php를 연동시키는 패키지도 설치한다.

#sudo apt-get install phpmyadmin

 

web mysql 관리 툴인 phpmyadmin도 설치한다.

설치중 몇가지 확인 창이 뜨는데 첫번째 웹 서버 자동 설정에서

apache2를 선택하도록 한다.

스페이스를 눌러 제대로 *가 뜨는 것을 확인해야 한다.

 

 그냥 엔터 누르고 지나갔다가 나중에 http 404 에러가 나와서

 phpmyadmin 다시 설정하지 않으려면 ㅠㅠ

 

db구성을 dbconfig-common으로 설정하겠냐고도 물어보는데

수동으로 설정하거나 이미 DB가 설치되어 구성되어 있는 경우 아니면

그냥 dbconfig-common으로 설치하면 된다.

 

중간에  mysql 설정할때 넣었던 root 비밀번호도 입력하면 설치 완료.

 

 

 

 

 

 

 

 

 

이제 모든 설치가 끝이 났다.

이제차례대로  apache, php, mysql이 제대로 설치되었나 확인해보자.

 

5. 아파치 설치 확인

 

 

http://ip주소(고정 ip또는 aws 도메인 이름)

을 입력하여 아래와 같이 나오면 apache설정이 제대로 된 것이다.

 

 

 

 

 

 

 

 

 

 

 

6. php 설치 확인

 

 

아래와 같이 대충 test.php를 만들어서 제대로 출력되나 확인해본다. 



 <?php echo "hello"; ?>

 

기본적으로 /var/www/html/의 소유자는 root로 되어있어 

파일 수정할때마다 sudo 하기 귀찮아 sudo chown ubuntu -R /var/www/hml로 

폴더 소유자를 ubuntu 로 수정한다.

 

ubuntu@ip-**:/var/www$ ll
total 12
drwxr-xr-x  3 root root 4096 Apr  2 04:56 ./
drwxr-xr-x 13 root root 4096 Apr  2 04:56 ../
drwxr-xr-x  2 root root 4096 Apr  2 05:29 html/

 

 

 

 

ubuntu@ip-**:/var/www$ sudo chown ubuntu -R /var/www/html
ubuntu@ip-**:/var/www$ ll
total 12
drwxr-xr-x  3 root   root 4096 Apr  2 04:56 ./
drwxr-xr-x 13 root   root 4096 Apr  2 04:56 ../
drwxr-xr-x  2 ubuntu root 4096 Apr  2 05:29 html/

 

 

7. phpmyadmin 설치 확인 


http://고정 ip 또는 aws domain/phpmyadmin으로 접속해서 

제대로 작동하나 확인해본다. 


그런데 위에 이야기한 것 같이 apache2를 phpmyadmin으로 설정하는 부분을 패스해서 

HTTP 404 "Not Found" 에러가 나서 결국 sudo dpkg-reconfigure -plow phpmyadmin으로 

phpmyadmin을 아래와 같이 재설정 하니 문제없이 phpmyadmin으로 접속이 가능했다. 



모든 설치가 제대로 된 것을 확인 완료하였다. 



 

 


부록. phpmyadmin재설정 방법



 

 

Once phpMyAdmin is installed point your browser to http://localhost/phpmyadmin to start using it. You should be able to login using any users you've setup in MySQL. If no users have been setup, use admin with no password to login.

Should you get a 404 "Not Found" error when you point your browser to the location of phpMyAdmin (such as: http://localhost/phpmyadmin) the issue is likely caused by not checking the 'Apache 2' selection during installation. To redo the installation run the following:

 sudo dpkg-reconfigure -plow phpmyadmin

Then select Apache 2 for the webserver you wish to configure.

 

 

참고: https://help.ubuntu.com/community/phpMyAdmin

 





 


 


 

 

 


  • 2015.07.16 16:52 ADDR 수정/삭제 답글

    비밀댓글입니다

php.ini 수정 - upload_max_filesize, memory_limit, post_max_size 증가

 

 

 

phpMyAdmin에서 외부 Mysql DB를 가져오기 하기 할떄 아래와 같은 메세지가 나왔다.

 

 너무 큰 파일을 업로드하려고 시도했습니다. 제한을 해결하기 위해서는 documentation를 참조하여 주십시오.

 

 

Starting with version 2.7.0, the import engine has been re–written and these problems should not occur. If possible, upgrade your phpMyAdmin to the latest version to take advantage of the new import features.

The first things to check (or ask your host provider to check) are the values of upload_max_filesize, memory_limit and post_max_size in the php.ini configuration file. All of these three settings limit the maximum size of data that can be submitted and handled by PHP. One user also said that post_max_size and memory_limit need to be larger than upload_max_filesize. There exist several workarounds if your upload is too big or your hosting provider is unwilling to change the settings

 

해당 문서를 확인해보니 php.ini의 upload_max_filesize, memory_limit and post_max_size 를 더 증가시켜야한다고 한다. 

일단 whereis로  php.ini가 어디있는지 찾는다.

 

#whereis php

 

찾은 php.ini파일을 일단 백업하고 아래와 같이 수정작업 ㄱㄱ

memory limit은 무제한으로 하기 위해 -1로 설정했다.

 

 ; Maximum allowed size for uploaded files.
; http://www.php.net/manual/en/ini.core.php#ini.upload-max-filesize
upload_max_filesize = 200M

 

; Maximum amount of memory a script may consume (128MB)
; http://www.php.net/manual/en/ini.core.php#ini.memory-limit
memory_limit = -1

 

; Maximum size of POST data that PHP will accept.
; http://www.php.net/manual/en/ini.core.php#ini.post-max-size
post_max_size = 300M


 

 

 

그리고 http 서비스를 재시작해서 변경사항을 반영하였다.

 

service httpd restart

 

이제 정상적으로 큰 사이즈 DB도 가져오기 가능해졌다.

 

 

CENT OS 5 에서 php 5.4로 업데이트 하기

 

json_encode($array, JSON_UNESCAPED_UNICODE) 를 사용하려고 했는데

PHP5.3은 JSON_UNESCAPED_UNICODE를 지원하지 않는다고 하여 php 버전을 업데이트 하기로 했다.

 

yum update php 를 해보았으나 아무 업데이트도 일어나지 않았다.

기본적으로 사용되는 저장소에 있는 php 버전이 낮아 자동으로 업데이트가 실행되지 않은 듯하다.  

 

yum에 추가적으로 사용할 만한 repository들을 검색하여 epel, remi, webtatic 저장소를 추가시켰다.

(참조:  http://lesstif.com/pages/viewpage.action?pageId=6979743)

 

 

 

 

yum repolist명령어로 새로운 저장소가 잘 추가되었는 지 확인하였다.

 

 

 

# yum repolist
repo id            repo name                                             status
addons             CentOS-5 - Addons                                           0
base               CentOS-5 - Base                                       3,654+8
epel               Extra Packages for Enterprise Linux 5 - x86_64          7,705
extras             CentOS-5 - Extras                                         265
updates            CentOS-5 - Updates                                     482+48
webtatic-el5       Webtatic Repository EL5 - x86_64                          135
repolist: 12,241

 

다른 저장소는 다 보이는데 remi가 리스트에 보이지 않는다.

이럴 경우에는   /etc/yum.repos.d/{repositoryname}.repo  를 열어서 enabled= 1 로 수정한다.

 

vi /etc/yum.repos.d/remi.repo

 

 

[remi]
name=Les RPM de remi pour Enterprise Linux 5 - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/5/remi/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/5/remi/mirror
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

 

 

다시 yum repolist를 입력하면 아래와 같이 remi를 포함한 새로 추가된 세 개의 저장소가 모두 나타나는 것을 확인 할 수 있다.

 

# yum repolist
repo id                                                            repo name                                                                                              status
addons                                                             CentOS-5 - Addons                                                                                            0
base                                                               CentOS-5 - Base                                                                                        3,654+8
epel                                                               Extra Packages for Enterprise Linux 5 - x86_64                                                           7,705
extras                                                             CentOS-5 - Extras                                                                                          265
remi                                                               Les RPM de remi pour Enterprise Linux 5 - x86_64                                                         1,605
updates                                                            CentOS-5 - Updates                                                                                      482+48
webtatic-el5                                                       Webtatic Repository EL5 - x86_64                                                                           135
repolist: 13,846

 

 

각각의 저장소에서 가능한 php 정보를 확인해본다.

 

 

 # yum --enablerepo=remi info php
Installed Packages
Name       : php
Arch       : x86_64
Version    : 5.4.30
Release    : 1.el5.remi
Size       : 8.9 M
Repo       : installed
Summary    : PHP HTML-내장된 스크립트 언어. (PHP: Hypertext Preprocessor)
URL        : http://www.php.net/
License    : PHP and Zend and BSD
Description: PHP is an HTML-embedded scripting language. PHP attempts to make it
           : easy for developers to write dynamically generated webpages. PHP
           : also offers built-in database integration for several commercial
           : and non-commercial database management systems, so writing a
           : database-enabled webpage with PHP is fairly simple. The most common
           : use of PHP coding is probably as a replacement for CGI scripts.
           :
           : The php package contains the module which adds support for the PHP
           : language to Apache HTTP Server.

 

 

remi 저장소에 내가 찾던 5.4 버전이 있어 사용하기로 한다.  

--enablerepo=remi 옵션으로 사용할 저장소를 지정하고 php를 업데이트 한다.

#yum --enablerepo=remi update php


Dependency Installed:
  libXaw.x86_64 0:1.0.2-8.1
  libXmu.x86_64 0:1.0.2-5
  libXt.x86_64 0:1.0.2-3.2.el5
  libcurl.x86_64 0:7.21.7-5.el5.remi.2
  libedit.x86_64 0:2.11-2.20080712cvs.el5
  libssh2.x86_64 0:1.2.7-1.el5.remi
  mysql-libs.x86_64 0:5.5.38-1.el5.remi
  mysqlclient15.x86_64 0:5.0.67-1.el5.remi
  t1lib.x86_64 0:5.1.1-9.el5

Dependency Updated:
  mysql.i386 0:5.0.95-5.el5_9
  mysql.x86_64 0:5.5.38-1.el5.remi
  mysql-devel.i386 0:5.0.95-5.el5_9
  mysql-devel.x86_64 0:5.5.38-1.el5.remi
  mysql-server.x86_64 0:5.5.38-1.el5.remi

Replaced:
  php53.x86_64 0:5.3.3-22.el5_10        php53-cli.x86_64 0:5.3.3-22.el5_10
  php53-common.x86_64 0:5.3.3-22.el5_10 php53-devel.x86_64 0:5.3.3-22.el5_10
  php53-gd.x86_64 0:5.3.3-22.el5_10     php53-mbstring.x86_64 0:5.3.3-22.el5_10
  php53-mysql.x86_64 0:5.3.3-22.el5_10  php53-pdo.x86_64 0:5.3.3-22.el5_10

Complete!

 

 

업데이트가 끝난후 service httpd restart 로 웹서버 재구동하고 php -v 로 제대로 업데이트가 완료 된 것을 확인한다.

 

# php -v
PHP 5.4.30 (cli) (built: Jun 25 2014 15:41:34)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies