본문 바로가기
IT/PHP

21##]PHP로 홈페이지 만들기>파일 업로드

by 혁이 2017. 4. 22.
반응형


안녕하세요


파일 업로드를 어떻게 하는지 알아보겠습니다.


파일 업로드를 위해선 form 의 input type=file이 필요하죠

그 전 에

enctype를 추가해야합니다 form옵션에..

<form enctype="multipart/form-data">이렇게 추가를 해야합니다.

그 후에 write_ok를 수정해보겠습니다.







write_ok.php 

 <?

                session_start();

include "db_info.php";
$max_thread_result=mysql_query("select max(thread) from $board",$conn);
$max_thread_fetch=mysql_fetch_array($max_thread_result);

$name=$_POST['name'];
$email=$_POST['email'];
$pass=$_POST['pass'];
$title=$_POST['title'];
$comment=$_POST['comment'];
$REMOTE_ADDR=$_SERVER["REMOTE_ADDR"];

$filename=NULL;
$max_thread=ceil($max_thread_fetch[0]/1000)*1000+1000;
if($_FILES['upfile']['name']){
$filename=$_FILES['upfile']['name'];
$path='/files/'.$filename;
move_uploaded_file($_FILES['upfile']['tmp_name'],$path);
}

$query="insert into $board(thread,depth,name,pass,email,title,see,wdate,ip,comment,filename) values('$max_thread',0,'$name','$pass','$email','$title',0,now(),'$REMOTE_ADDR','$comment','$filename')";
$result=mysql_query($query,$conn);


mysql_close($conn);

echo "<meta http-equiv='refresh' content='1; URL=list.php?no=0'>";
?>




수정된 부분을 보자면


if($_FILES['upfile']['name']){
$filename=$_FILES['upfile']['name'];
$path='/files/'.$filename;
move_uploaded_file($_FILES['upfile']['tmp_name'],$path);
}

$query="insert into $board(thread,depth,name,pass,email,title,see,wdate,ip,comment,filename) values('$max_thread',0,'$name','$pass','$email','$title',0,now(),'$REMOTE_ADDR','$comment','$filename')";


로드하는 파일의 이름이 있다면(업로드 파일이 있다면)

$filename함수에 업로드되는 파일의 이름을 저장합니다.

$path에는 파일이 저장될 경로를 저장합니다.


move_uploaded_file(업로드 임시파일,경로)


형태이므로 


업로드되는 파일의 임시이름과, 경로를 적어 파일이 저장이 되게 합니다.



$tmpname=$_FILES['upfile']['tmp_name']     //서버에 저장된 임시 파일입니다.
$filename=$_FILES['upfile']['name'] //업로드한 파일의 이름입니다.





주의사항

파일을 업로드 하는 폴더의 권한이 있어야합니다.

저는 보안을 위해 루트 바로 밑에다가 저장을 하겠습니다.

#chmod 777 /files


주의사항 2

업로드 에러가 0번(정상적인 업로드완료)인데도

업로드 폴더에 없다면 SElinux를 보셔야합니다.

(이것때문에 몇시간을...ㅂㄷㅂㄷ)


#chcon -t httpd_sys_rw_content_t '경로'

를 사용하셔서 적용해주시면 됩니다.

확인은 ls -Z로 확인가능








파일이 있는 경우 글제목 앞에 이미지가 한개가 뜹니다.


list.php에서 코드를 확인할 수 있습니다.


저기에 쓰이는 이미지도 selinux를 설정해주셔야

지 엑박으로 안뜨고 잘보입니다.





반응형