php 에러 출력하기

php 에러 출력하기

error_reporting(E_ALL);

ini_set("display_errors", 1);


위 두 소스를 이용하면 되는데요

 웹 호스팅을 사용하다보면 에러출력을 php.ini에서 막는 경우가 있어요


그럴 경우 위 소스를 페이지 상단에 넣어두면 에러를 출력하게 되요 

php에서 배열에 담긴 값을 중복제거 하기

php에서 배열에 담긴 값을 중복제거 하기

$array_ = array();

$array_[0] = "1";

$array_[1] = "2";

$array_[2] = "1";

 

​array_unique($array_);

 

이렇게 할 경우 이것을 출력하게 되면 1, 2만 나오게 되요

 

배열에서 중복된 값을 제거하는 명령어에요

페이지에 좋은글,책속의 한줄 랜덤으로 뿌리기

페이지에 좋은글,책속의 한줄 랜덤으로 뿌리기

book.zip



한글 다 깨지니 


페이지 상단에 밑에 태그 넣고

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">


파일 저장은 UTF-8 로 반드시 해야 합니다.(메모장 또는 editplus 추천 다른 에디터는 제대로 적용안되더군요)



1.파일형식으로  코딩


밑의 코드페이지와 위의 첨부파일(book.txt)을 같은 폴더에 둡니다.



<?


$mentFile = "book.txt";  

$fp = fopen($mentFile, "r");


while(!feof($fp)) $ment[] = fgets($fp, 1024);

 





//### $ment 배열에서 랜덤키 생성

$key = array_rand($ment);

### 랜덤 생성된 명언 출력

echo $text_this=$ment[$key];


?>



2.my_sql 연동방식


 

1.테이블 생성


CREATE TABLE IF NOT EXISTS `books` (

  `no` int(11) NOT NULL AUTO_INCREMENT,

  `content` text NOT NULL,

  PRIMARY KEY (`no`),

  KEY `no` (`no`)

)


 


2.mysql 에 위에 첨부된 book.txt 집어 넣습니다.

 

phpmyadmin 에서 import 탭에서 

필드 구분자 ->   \t

필드 구분자-> content


로 하는것 유의 


방법은 서기님 강좌 참고http://vod.singsinghe.co.kr/movie/php/48/php_48.html


 




3.코딩


 

<?

$conn=mysql_connect("","","");

mysql_select_db("");




$random = rand(1,283);  //no 의 처음과 끝사이에 랜덤하게 1개 $random 변수에 지정 (db 넘버 반드시 확인 )


$query="select * from books where no='$random'"; // 랜덤 생성된 1개 no 필드에서 가져오기


$result=mysql_query($query,$conn);

$data=mysql_fetch_array($result);

$text_this=$data[1]; 



echo $text_this;




?>

 


하면 됩니다..


3.

JQuery 로 

 뿌리기 

 

 

위와 같이 바로 해도 되고..같은 폴더에 코딩 한거 두고 뿌리기 원하는 페이지에 

JQuery 로 가져 와도 됩니다.

 

 

 

 

 

<head>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<script>

$(document).ready(function() {

 

    $("#div1").load("books.php");

 

});

 

 

</script>

</head>

<body>

 

<div id="div1"></div><div id="div"></div>

 

</body>

 

4.이쁘게 둥근 테두리로 만들기

 

 첨부된 books.php 파일 참고하세요..

여기 게시판 중간에 글이 짤리네요..너무 길어서 그런가봐요

book.zip

MySQL Server 프로그램 설치 방법

MySQL Server 프로그램 설치 방법


MySQL Server 프로그램  설치 방법을 기술한다.

 

 

이 글은 앞서 설명한 "MySQL Server 설치 프로그램 다운로드 방법"에 이어 설명하는 것이다. 앞서 설명한 글의 주소는 아래와 같다.

 

http://blog.naver.com/reinstate10/220103437413

 

 

 

다운로드하는 단계마다 모두 화면을 캡쳐했기때문에 설명을 붙이지 않아도 그림만 순차적으로 보면 MySQL 서버 프로그램을 다운로드 할 수 있다. 따라서 특별히 설명이 필요한 것만 기술했다. 그림이 많아서 스크롤을 내리는 수고가 있겠지만 일일이 글로 설명하지 않아도 알 수 있도록 캡쳐한 것이다.

 


 

 

 

 

 

1. 위 화면은 앞서 설명한 글의 마지막 부분에서 보는 탐색기의 화면이다. 여기서 프로그램을 더블클릭하여 실행하면 아래와 같은 창을 보게 된다.


 

 

 

 

2. 위 화면에서 실행 버튼을 클릭하면 아래 화면이 나올때까지 "사용자 계정 컨트롤" 화면이 나온다. 그 화면은 캡쳐할 수 없어서 첨부하지 못하는데, 이때 "예"버튼을 눌러주면 진행이 되고 아래와 같은 화면이 나온다. 나머지는 그림을 따라서 진행하면 된다.

 


 

 

 


 

 

 


 

 

 


 

 

 


 

 


 

 

 

3. 위 화면에서 선택할 수 있는 것들이 여러가지가 나오는데, 개발용으로 사용할 것이므로 모든 것을 설치하도록 "Next" 버튼을 클릭하면 된다. 만일 다른 목적으로 사용할 예정이라면 각자 맞는 것을 클릭하고  "Next" 버튼을 클릭하면 된다.

 


 

 

 


 

 

 


 

 

 


 

 

 


 

 

 


 

 

 


 

 

 

4. 예전에는 하나하나 다운로드 받아서 설치했는데 이젠 위 그림과 같이 서버는 물론이고 클라이언트와 ODBC, 문서와 개발 예제까지 모두 설치해준다. 많이 편해졌다.

 


 

 

 


 

 

 


 

 

 


 

 

 


 

 

 

5. 위 화면은 MySQL Server 의 root 계정의 패스워드를 만드는 화면이다. 위 주황색 네모상자 부분에만 자신이 사용할 패스워드를 각각의 란에 같은 패스워드로 입력하면 된다.

 


 

 

 

6. 위 화면은 root 이외에 사용자 계정을 하나 더 만드는 방법이다. 원격으로 접속할때 보안을 위해서 보통 root 계정은 외부에서 접근하지 못하도록 설정하는 것이 안전하므로 이렇게 사용자 계정(root와 같은 권한을 가진 사용자 계정)을 만드는 것이다. 아래 그 과정을 화면을 보면서 수행하면 된다. 아이디는 자신이 원하는 이름으로 만들면 된다. 여기서는 samsinit 를 사용했는데 공식적으로 의미있는 것이 아니고 예제로 사용한 것이니 참고만하면 된다.

 


 

 


 

 

 


 

 

 


 

 

 

7. 위 화면에서 보이는 주황색 네모 상자안에 입력하는 부분은 서비스 이름을 넣는 것이다. 이 서비스 이름은 컴퓨터의 관리자에서 서비스를 보는 곳 또는 작업관리자(taskmgr)에서 서비스를 확인할 수 있는데 MySQL의 이름이 아닌 이 이름으로 자동으로 실행되는 서비스를 볼 수 있다. 위에 있는 것 처럼 그대로 둬도 되고 아래 그림처럼 자신이 원하는(기억할 수 있는) 이름으로 만들어도 된다.

 

작업관리자에서 현재 실행중인 프로세스 명을 확인할 수 있는데, 프로세스 명은 "mysqld"라는 것으로 확인할 수 있다.

 


 

 

 


 

 

 

 


 

 

 


 

 

 

 

8. 위 화면의 "Finish" 버튼을 누르는 것 까지 완료했으면 프로그램 설치는 끝난 것이다. 그런데 아래 화면이 나오는 이유는 위 화면 윗 부분에 "Start MySQL Workbench after Setup" 선택 버튼이 클릭되어 있기때문에 Workbench 유틸리티가 실행되기 때문이다. 선택버튼이 클릭된 것이 기본이고 실행하지 않으려면 선택버튼을 클릭해서 체크 표시가 없도록 아래 Workbench 화면은 보이지 않는다.

 


 

 

프로그램설치가 완료됐으면 정상적으로 실행됐는지 확인하는 부분을 다른 글로 기술하기로 한다. 

[DBMS] mysql inno db - fulltext index

[DBMS] mysql inno db - fulltext index


5.5 버젼에서는 미지원 

5.6 버젼에서는 지원 


=== 5.6의 자료 === 

14.2.2.13.3. FULLTEXT Indexes 

A special kind of index, the FULLTEXT index, helps InnoDB deal with queries and DML operations involving text-based columns and the words they contain. These indexes are physically represented as entire InnoDB tables, which are acted upon by SQL keywords such as the FULLTEXT clause of the CREATE INDEX statement, the MATCH() ... AGAINST syntax in a SELECT statement, and the OPTIMIZE TABLE statement. For usage information, see Section 12.9, “Full-Text Search Functions”. 


You can examine FULLTEXT indexes by querying tables in the INFORMATION_SCHEMA database. You can see basic index information for FULLTEXT indexes by querying INNODB_SYS_INDEXES. Although InnoDB FULLTEXT indexes are represented by tables, which show up in INNODB_SYS_TABLES queries, the way to monitor the special text-processing aspects of a FULLTEXT index is to query the tables INNODB_FT_CONFIG, INNODB_FT_INDEX_TABLE, INNODB_FT_INDEX_CACHE, INNODB_FT_DEFAULT_STOPWORD, INNODB_FT_DELETED, and INNODB_FT_BEING_DELETED. 


InnoDB FULLTEXT indexes are updated by the OPTIMIZE TABLE command, using a special mode controlled by the configuration options innodb_ft_num_word_optimize and innodb_optimize_fulltext_only.

[정보] mysql auto_increment 관련

[정보] mysql auto_increment 관련


MySql 서버재부팅 또는 DB재시작시 auto_increment 번호생성관련 

[engine = MyISAM 일때] 
번호가 10번까지 증가한 뒤 데이타를 지우고 DB재시작하면 11번 부터 정상입력됨 

[engine = InnoDB 일때] 
번호가 10번까지 증가한 뒤 데이타를 지우고 DB재시작하면 1번 부터 다시 입력됨


[서버운영] 스쿨 가상서버에 Ubuntu 14.04 설치하기 + ksplice

[서버운영] 스쿨 가상서버에 Ubuntu 14.04 설치하기 + ksplice



우분투 14.04 LTS 버전이 출시된 지도 이제 넉 달이 되었네요. 이쯤 되면 안정성도 꽤나 높아집니다. 

그러나 아직 스쿨호스팅 가상서버는 우분투 12.04까지밖에 제공하지 않으므로 

14.04를 써보고 싶다면 직접 업그레이드하는 과정이 필요합니다. 



========= ※ 경 고 ※ ========= 


아래의 내용을 따라하시다가 서버가 먹통이 되거나 데이터를 날려먹을 경우 저는 책임을 지지 않습니다. 

아래의 내용은 새로 설치한 가상서버 기준입니다. 장기간 운영하던 서버라면 절대 따라하지 마세요. 


만약 2014년 가을 이후에 이 글을 읽고 계신 분은 스쿨호스팅에서 공식적으로 우분투 14.04를 지원하는지 

다시 한 번 확인해 보세요. 만약 공식적으로 지원한다면 그냥 우분투 14.04로 신청하시는 것이 훨씬 편합니다. 


우분투 14.04는 아파치 2.4, PHP 5.5, MySQL 5.5가 포함되어 있습니다. 

특히 아파치 2.4는 기존의 2.2와 달라진 부분이 많아서 

사용하시던 .htaccess 규칙들이 에러를 뿜을 가능성이 있으니 주의하시기 바랍니다. 

심지어 아주 간단한 deny from all 이런 것조차 에러를 뿜습니다 ㅠㅠ 



========= ※ 순 서 ※ ========= 


0. 스쿨호스팅에서 가상서버를 신청합니다. OS는 우분투 12.04로 하고, 가능하면 APM 설치나 보안설정은 신청하지 않습니다. 

프로그램이 많이 설치되어 있거나 커스터마이징을 할수록 업그레이드 도중에 에러가 발생할 확률이 증가하기 때문입니다. 


1. 가상서버에 ssh로 접속합니다. 리눅스 서버라면 여기까지는 기본이죠? 


2. 가상서버는 ssh 호스트 키가 OS 템플릿에 함께 저장되어 있는 경우가 종종 있습니다. 

이걸 그대로 두면 같은 호스팅 업체에서 생성한 가상서버는 모두 같은 호스트 키를 사용하는 문제가 생깁니다. 

ssh의 중간자 공격을 막는 유일한 수단인 호스트 키가 쓸모없게 되어 버리는 거죠. 

그래서 저는 가상서버를 신청할 때마다 제일 먼저 ssh 호스트 키를 확인하곤 합니다. 


한번 확인해 볼까요? 


    ls -l /etc/ssh/ssh_host_* 


헐~ ssh 호스트 키 생성일이 모두 2012년 5월 18일입니다. 템플릿 생성 날짜인 것으로 보입니다. 

이대로 두면 안됩니다. 호스트 키를 다시 생성해 줘야 합니다. 


    rm /etc/ssh/ssh_host_* 

    ssh-keygen -A 


이렇게 하고 ssh 연결을 끊었다가 다시 접속하면 호스트 키가 바뀌었다고 에러가 나옵니다. 

맥 또는 리눅스 환경에서 에러를 해결하려면 아래와 같은 명령으로 기존의 키 정보를 삭제한 후 다시 접속하면 됩니다. 


    ssh-keygen -f "~/.ssh/known_hosts" -R 서버IP주소 


윈도우에서 PuTTY를 사용하는 경우에는 경고 나왔을 때 적당한 단추를 클릭해 주기만 하면 됩니다. 


3. 일단 모든 패키지를 최신 상태로 업그레이드합니다. 


    apt-get update 

    apt-get dist-upgrade 


4. 이제 업그레이드할 준비가 다 되었습니다. 


    do-release-upgrade 


설치 도중 연결이 끊길 경우에 대비하여 ssh 데몬을 추가로 실행하겠냐고 물어봅니다. 

y를 눌러 확인하고, 포트 번호를 기억해 둡니다. 

만약 중간에 끊길 경우 여기로 접속해서 screen -x 하면 끊긴 곳부터 다시 진행할 수 있습니다. 


5. 업그레이드를 진행합니다. 


  - 엔터를 몇 번 치다 보면 몇 개의 패키지를 업그레이드할 예정이고 몇 MB가 소요된다고 묻는 화면이 나옵니다. 

    y를 눌러 확인해 줍니다. 

  - ssh 루트 로그인을 금지하는 부분은 No를 선택합니다. 지금 루트로 로그인되어 있잖아요. 

  - 패키지 업그레이드 도중 서비스 자동 재시작은 Yes를 선택해도 됩니다. 

  - grub header 파일을 교체하겠냐고 물으면 y를 누릅니다. 

  - 패키지 삭제를 물으면 y를 누릅니다. 

  - 시스템 재시작 여부를 물으면 y를 누릅니다. 


6. 시스템 재시작이 끝난 후 다시 ssh로 접속해 봅니다. 

몇 분이 지나도 접속이 안 된다면 어딘가 문제가 있는 것이니 스쿨호스팅에 도움을 요청하거나 

OS 재설치 신청하세요 (5,500원 ㅠㅠ) 


7. 스쿨호스팅 가상서버는 VMware 기반입니다. 

최상의 성능을 얻으려면 가상서버 내부에서 vmtools 데몬이 돌아가야 합니다. 

그런데 우분투를 업그레이드하면 이게 중단되어 버리는 경우가 있습니다. 

아래의 명령으로 vmtools 데몬이 실행중인지 확인합니다. 


    ps -C vmtoolsd 


실행중이지 않다면 아래의 명령으로 vmtools를 다시 설정합니다. 


    apt-get purge open-vm-tools 

    /usr/bin/vmware-config-tools.pl 


엔터를 몇 번 쳐주면 됩니다. 


8. 다시 한번 재부팅을 해봅니다. 정상적으로 연결이 된다면 무사히 업그레이드를 마치신 것입니다. 추카~!!! 



==== ※ 보너스 : ksplice 설치 ※ ==== 


스쿨호스팅은 전가상화 방식이므로 커널을 직접 관리해야 합니다. 

(반면, KT uCloud처럼 반가상화 방식으로 운영되는 서버는 커널을 직접 관리할 필요가 없습니다.) 

그런데 우분투는 커널 업데이트가 잦습니다. 특히 LTS 버전이 나온 후 최초 몇 개월간은 업데이트를 밥먹듯이 해요. 


이걸 적용하자니 재부팅을 해야 하고, 적용하지 않자니 보안 취약점이나 버그가 걱정되죠. 

그래서 재부팅 없이 커널 업데이트가 가능한 ksplice를 설치해 봅시다. 

ksplice는 오라클에서 제공하는 유료 서비스이지만, 우분투 사용자에게는 무료로 제공됩니다. 


우선 https://www.ksplice.com/uptrack/key 에서 메일주소를 입력하여 Access Key를 발급받습니다. 


그 다음에 /etc/apt/sources.list.d/ksplice.list 파일을 생성하여 아래의 내용을 추가합니다. 


    deb http://www.ksplice.com/apt trusty ksplice 

    deb-src http://www.ksplice.com/apt trusty ksplice 


ksplice 저장소의 공개키를 apt에 추가합니다. 


    wget -N https://www.ksplice.com/apt/ksplice-archive.asc 

    apt-key add ksplice-archive.asc 


저장소 정보를 업데이트하고, uptrack을 설치합니다. 


    apt-get update 

    apt-get install uptrack 


설치 도중 키를 물어보면 메일로 받은 키를 입력해 줍니다. 


이제부터 재부팅 없이 커널을 업그레이드하려면 uptrack-upgrade -y 명령을 사용하면 됩니다. 

apt-get에서 커널 업데이트 후 재부팅하라고 하면 무시해도 됩니다.

[DBMS] mysqlDB export 복원/ mysql 데이터베이스 복원

[DBMS] mysqlDB export 복원/ mysql 데이터베이스 복원


안녕하세요. 

이곳에 자주오지만 강좌나 tip&Tech에서 많은 정보를 얻고 있는 1인입니다.


많이 부족하여 글에 내용이 좀 부족할 수있겠지만 이것보다 더 좋은 정보가 있다면 

댓글로 많은 가르쳐 주세요. 감사합니다.


이번에는 리눅스 쉘 상에서 데이터베이스를 복원하는 방법에 대해 알아볼게요

 

방법 : mysql -u아이디 -p 데이터베이스명 < 복원할 파일

 

이렇게 하면  쉘 상에서 데이터베이스를 복원 할 수 있어요

 

쉘을 잘 못하시는 분들은 phpMyAdmin이나 mysql 툴을 이용하면 되죠.

 

다른 툴 보다는 쉘 상에서 하는 것이 복원 속도가 엄청 빨라요

 

 

정확한 방법은 동영상을 참고 하시면 초보자도 쉽게 따라 하실 수있어요



[서버운영] 웹 재요청 방지 및 트래픽 감소를 위한 방법

[서버운영] 웹 재요청 방지 및 트래픽 감소를 위한 방법


... 좀더 예쁜 모양으로 보고 싶다면 링크타고가서 보시오. 


from cache 

서버에 요청자체를 하지 않는다. 

가장 효과가 좋다.(요청 자체가 없으므로) 

최초 한번 데이터를 가져오면, 그 후로는 웹 브라우저의 캐시에서 데이터를 가져온다. 

즉, 서버와의 통신이 없어진다. 

하지만 F5를 누를 경우 새로 데이터가 전송된다.(HTTP Code 200 발생) 

관련 응답 해더 및 PHP 적용법 ($g는 캐시 기간(초)) 

header('Cache-Control:public, max-age='.$g); // HTTP/1.1 

지정 초 이전까지는 재요청하지 않도록 권장함 (새로 고침에서는 무시됨) 

header("Expires: ".gmdate("D, d M Y H:i:s", time()+$g)." GMT"); //캐시 

지정 시간까지는 재요청 하지 않도록 권장함 (새로 고침에서는 무시됨) 

apache의 경우 mod_expires 적용 



304 Not Modified 

요청은 하지만, 트래픽이 아주 적게 발생된다.(해더 전송 정도만 발생) 

F5로 새로 요청해도 Etag나 Last-Modified의 조건에 맞으면 HTTP Code는 304가 발생된다.(실제 데이터 전송은 없음) 

(ctrl+F5의 경우 etag와 Last-Modified 가 없이 요청되므로 새로 가져온다.) 

관련 응답 해더 및 PHP적용법 

header("Etag: ".$etag_key); //etag 

파일의 수정내역을 Etag로 만들어서 출력한다. 

클라이언트가 같은 Etag로 요청하면, 304코드를 알려준다. 

아파치의 경우 FileETag 부분 참고 

파일 수정 시간을 사용할 경우 문제가 될 수 있다. 

서버를 여러대 사용할 경우 서버 간의 파일의 시간 차가 발생될 수 있기 때문이다. 

여러서버를 묶어쓰는(L4에 연결 해서) 경우 사용안하는게 좋다 

PHP에서 처리할 경우 요청에서 HTTP_IF_NONE_MATCH 관련 처리가 필요 

header('Last-Modified: '.gmdate("D, d M Y H:i:s", time()+$g)." GMT"); 

지정 시간까지는 파일이 수정되지 않는다는 것을 나타낸다. 

즉, 그 시간에 재요청해봤자 304 코드가 반환된다. 

apache의 경우 mod_expires 적용 

PHP에서 처리할 경우 요청에서 HTTP_IF_MODIFIED_SINCE 관련 처리가 필요

[설치/설정] 아파치에서 외장하드를 DocumentRoot로 쓸 때...

[설치/설정] 아파치에서 외장하드를 DocumentRoot로 쓸 때...


민트리눅스가 좋아졌길래 

윈도우를 밀어버리고 

100%리눅스로 가려하고 있습니다. 


하지만, 리눅스를 작업용으로 쓰려고 이런저런 설정을 하고 

외장하드를 DocumentRoot로 설정하고 접속하려는 순간~~~ 제명이 됐... 아..아니.. 

403 에러를 뿜어내는 것이었습니다. 


윈도우에 비해 보안이 철저한 나머지 내 외장하드에 내가 접속하겠다는데도 403에러를 내보내내요. 


알고보니 쉬운(사실은 이 것 때문에 2시간정도 허비했었죠. ㅠ_ㅠ) 



[핵심] 

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

(외장하드는 NTFS로 되어있어서 chmod, chown 이 안먹히는 상황, 나혼자만 보면 되는 시험서버) 


/etc/apache2/envars 

화일에서 


export APACHE_RUN_USER=[당신의ID] 

export APACHE_RUN_GROUP=[당신의모임ID] 


이부분을 고쳐주기만 하면 됩니다. 


예를 들어 wooyg라는 계정으로 리눅스를 로그인 한다면 

[당신의ID] 부분은 

export APACHE_RUN_USER=wooyg 

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

이렇게 되겠죠. ^^ 


알고보니 별거 아닌데 ㅠ_ㅠ