테스트 페이지는 git을 이용해 다운로드 받는다.
그러기 위해 터미널을 열고 다음 명령어로 git을 설치한다.
sudo apt-get install git
git 설치가 완료되면 다음 명령으로 clone 한다.
git clone https://github.com/ppkill00/web_html_template
web_html_template 디렉터리 안에 있는 예제 파일을 /var/www/html 디렉터리 안에 옮겨야 한다.
그 전에 /var/www/html에 있는 index.html, index.php는 다음 명령어로 먼저 지우도록 하자.
sudo rm /var/www/html/index.html
sudo rm /var/www/html/index.php
다음 명령어로 web_html_template 디렉터리에 있는 모든 파일 및 디렉터리를 /var/www/html 디렉터리로 옮긴다.
sudo mv ./web_html_template/* /var/www/html
다음 명령으로 /var/www/html 디렉터리로 이동하자.
cd /var/www/html
index.php는 다음과 같이 수정한다.
펼치기 접기
<?php
SESSION_START();
if($_SESSION['site_id']){
exit("<script>location.href='./main.php';</script>");
}
$site_id = $_SESSION['site_id'];
if($_SERVER['QUERY_STRING'] == "join") {
$_POST['pw'] = md5($_POST['pw']);
include "./config/config.php";
$db=dbconnect();
$query = "select id from user_db where id = '{$_POST[id]}'";
$result = mysqli_fetch_array(mysqli_query($db, $query));
if($result['id']) exit("id exist");
else {
$time = time();
mysqli_query($db, "insert into user_db(`id`, `pw`, `authtime`)
values('{$_POST[id]}', '{$_POST[pw]}', now())");
$_SESSION['site_id'] = $_POST['id'];
echo "<script>location.href = './main.php';</script>";
}
exit;
}
elseif($_SERVER['QUERY_STRING'] == "login") {
$_POST['pw'] = md5($_POST['pw']);
include "./config/config.php";
$db=dbconnect();
$query = "select id from user_db where id = '{$_POST[id]}' and pw = '{$_POST[pw]}'";
$result = mysqli_fetch_array(mysqli_query($db, $query));
if($result['id']) {
$_SESSION['site_id'] = $result['id'];
exit("<script>location.href='./main.php';</script>");
}
else exit("<script>alert('login fail'); history.go(-1);</script>");
}
?>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="//code.jquery.com/ui/1.11.0/themes/smoothness/jquery-ui.css">
<script src="//code.jquery.com/jquery-1.10.2.js"></script>
<script src="//code.jquery.com/ui/1.11.0/jquery-ui.js"></script>
<script src="./script/global.js"></script>
<link rel="stylesheet" href="./style/style.css">
</head>
<body bgcolor="black"><br><br>
<font face="Lucida Calligraphy,Comic Sans MS,Lucida Console" color='white'>
SITE For TEST!!
<div id="loginform" title="Login!!">
<form method="post" action="?login">
id : <input name="id"><br>
pw : <input name="pw" type="password"><br>
<div id="butt" align="right"><input type="button" onClick="join_change();" value="Join"> <input type="submit" value="Login"></div>
</form>
</div>
</font>
</body>
</html>
접기
index.php에서 user_db 라는 이름의 테이블과 board 라는 이름의 테이블을 사용하는 것을 볼 수 있다.
즉, MySQL에 user_db 테이블과 board 테이블이 있어야 한다.
main.php는 다음과 같이 생성한다.
펼치기 접기
<?php
include "./config/config.php";
login_chk();
$db=dbconnect();
echo "<script>console.log(\"$_SESSION[site_id]\");</script>";
if ($_GET[search_word]!="") $add_query = " where $_GET[field] like '%" . $_GET[search_word] . "%' ";
$query = "select * from board ";
$query .= $add_query;
$query .= " order by no desc";
echo "<script>console.log(\"$query\");</script>";
$result = mysqli_query($db, $query);
if($_SERVER['QUERY_STRING'] == "logout"){
$_SESSION['site_id'] = "";
#echo "<script>alert(\"$_SESSION[site_id]\");</script>";
exit("<script>location.href='./index.php';</script>");
}
if($_SERVER['QUERY_STRING'] == "write"){
#echo "<script>console.log(\"$_POST[content]\");</script>";
mysqli_query($db, "insert into board(`no`,`id`,`content`,`time`) values(null,'{$_SESSION[site_id]}','{$_POST[content]}',now())");
echo "<script>location.href='./main.php';</script>";
}
if($_SERVER['QUERY_STRING'] == "upload"){
$dir = 'uploads/';
if(is_uploaded_file($_FILES["myFile"]["tmp_name"]))
{
$name = $_FILES["myFile"]["name"];
$dest = $dir . $_FILES["myFile"]["name"];
echo "<script>alert(\"$dest\");</script>";
if(!move_uploaded_file($_FILES["myFile"]["tmp_name"], $dest))
{
die("upload fail");
}
}
mysqli_query($db, "insert into board(`no`,`id`,`content`,`time`,`filepath`) values(null,'{$_SESSION[site_id]}','{$_POST[content]}',now(),'{$name}')");
echo "<script>location.href='./main.php';</script>";
}
$filename = explode('=',$_SERVER[QUERY_STRING]);
if($filename[0] =='download' )
{
function mb_basename($path) { return end(explode('/',$path)); }
function utf2euc($str) { return iconv("UTF-8","cp949//IGNORE", $str); }
function is_ie() {
if(!isset($_SERVER['HTTP_USER_AGENT'])) return false;
if(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) return true; // IE8
if(strpos($_SERVER['HTTP_USER_AGENT'], 'Windows NT 6.1') !== false) return true; // IE11
return false;
}
$filepath = 'upload/'.$_GET['download'];
echo "<script>console.log(\"$filepath\");</script>";
$filesize = filesize($filepath);
$path_parts = pathinfo($filepath);
$filename = mb_basename($filepath);
if( is_ie() ) $filename = utf2euc($filename);
header("Pragma: public");
header("Expires: 0");
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"$filename\"");
header("Content-Transfer-Encoding: binary");
header("Content-Length: $filesize");
ob_clean();
flush();
readfile($filepath);
}
?>
<head>
<title>Tested Site</title>
<link rel="stylesheet" href="//code.jquery.com/ui/1.11.0/themes/smoothness/jquery-ui.css">
<script src="//code.jquery.com/jquery-1.10.2.js"></script>
<script src="//code.jquery.com/ui/1.11.0/jquery-ui.js"></script>
<script src="./script/global.js"></script>
<link rel=stylesheet href="./style/style.css">
</head>
<body bgcolor=black><center>
<div class='head'>
<form method='post' action='?logout'>
hi <?php echo $_SESSION['site_id']; ?>
<input type='submit' value='LOGOUT' >
</form>
</div>
<div class='blank'>
<div>
<div class='body'>
<div id='inputs'>
<form enctype="multipart/form-data" id='boardform' method='post' action='?write'>
<input type='text' id='content' name='content' size='150' \required>
<input type="hidden" name='myFile' id="file" size=60> <input type='button' onClick="file_upload();" value="upload" id='uploadbut'>
<input id='write' type='submit' value='Write'>
</form>
</div>
<div id='board_contents'>
<table border=1px>
<tr>
<th>NO</th>
<th>Content</th>
<th>File</th>
<th>ID</th>
<th>DATE</th>
</tr>
<?php
while($row = mysqli_fetch_assoc($result))
{
$datetime = explode(' ', $row['time']);
$date = $datetime[0];
$time = $datetime[1];
if($date == Date('Y-m-d'))
$row['time'] = $time;
else
$row['time'] = $date;
?>
<tr>
<td><?php echo $row['no']?></td>
<td><?php
#echo strip_tags($row['content']);
#echo htmlspecialchars($row['content']);
#echo str_replace("<","<",str_replace(">",">",$row['content']));
# echo str_replace("script","",$row['content']);
echo $row['content'];
?></td>
<td><?php
if($row['filepath']) {
echo "<a href='?download={$row['filepath']}'>Down</a>";
#echo $row['filepath'];
}
else echo '';
?></td>
<td><?php echo $row['id']?></td>
<td><?php echo $row['time']?></td>
</tr>
<?php
}
?>
</table>
<form name=search method=get action="<?=$PHP_SELF?>">
<select name=field>
<option value=content>contents</option>
<option value=id>writer</option>
</select><input type=text name=search_word size=20><input type=submit value="search">
</form>
</div>
<div class='footer'>Copy right KITRI</div>
</body>
</html>
접기
/var/www/html/config 디렉터리에 있는 config.php는 다음과 같이 수정한다.
펼치기 접기
<?php
function linkHash($name){
return md5($name."H3l10 +rub1y4 = hehe * W0RLD");
}
function dbconnect(){
header("Content-Type: text/html; charset=UTF-8");
session_start();
$mysql_hostname="localhost";
$mysql_user="root"; // DB user
$mysql_password=""; // DB 'root' 계정 pw
$mysql_database="hack01"; // DBname
$db=mysqli_connect($mysql_hostname,$mysql_user,$mysql_password) or die("db connection error");
mysqli_select_db($db,$mysql_database) or die("db connection error2");
mysqli_query($db,"set names utf8");
return $db;
}
function login_chk(){
SESSION_START();
$id = $_SESSION['site_id'];
if(!$id) exit ("<script>location.href='./';</script>");
}
?>
접기
config.php에서 mysql 데이터베이스와 연동한다.
database는 "hack01"이고 user는 "root"이다.
password는 설정한 값을 적어주면 된다.
코드를 보고 MySQL 유저는 root가 있어야 하고, hack01 이라는 이름의 데이터베이스가 존재해야 하며 해당 데이터베이스 안에 user_db 테이블과 board 테이블이 있어야 한다.
터미널에서 다음 명령어로 MySQL 서버에 접속한다.
mysql -u root -p
패스워드를 입력하면 접속이 된다.
- hack01 데이터베이스 생성
mysql> create database hack01;
- hack01 데이터베이스 접속
mysql> use hack01
- user_db 테이블 생성
mysql> create table user_db(
id varchar(32) character set utf32 collate utf32_unicode_ci not null,
pw varchar(32) not null,
authtime varchar(32) not null
)ENGINE=InnoDB default charset=utf8;
- board 테이블 생성
mysql> create table board(
no int unsigned not null primary key auto_increment,
id varchar(32) character set utf32 collate utf32_unicode_ci not null,
content text not null,
time datetiem not null
)ENGINE=InnoDB default charset=utf8;
- 파일 업로드 추가
mysql> alter table board add(filepath varchar(50));
데이터베이스 설정이 모두 완료가 되면 config.php에서 root 계정의 패스워드를 작성한다.
이로써 모든 구축은 완료가 되었다.
웹 브라우저로 127.0.0.1 에 접속해 보면 다음과 같은 페이지를 볼 수 있다.
join 버튼을 눌러 id, password를 작성하면 다음과 다음과 같이 main.php로 넘어간다.
입력창에 아무거나 입력하고 Write 버튼을 누르면 다음과 같은 화면을 볼 수 있다.