.htaccess 에서 Rewrite 를 이용해 모든 파일을 단 한개의 파일로 몰기 While이 에 작성. 5,153번 읽힘.
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /index.php?$1 [NC,L]
RewriteCond 의 두 옵션에 의해 만약 주소에 실제 파일명이나 폴더명이 호출 됐을때는 해당 파일을 읽어오게 된다. ! 는 부정을 의미하고, -d는 디렉토리가 있을때를 의미, -f는 파일이 있을때를 의미한다.
이 옵션이 있으면 정적파일을 불러올때도 좋지만, 제일 중요한 이유는 index.php 라는 파일명과 겹치게 되면 무한 Rewrite 가 일어날 수 있기 때문에 꼭 필요한 옵션이다.
참고자료: http://apmusers.com/tt/dbckdghk/95
php FILES 관련 While이 에 작성. 614번 읽힘.
파일 업로드 관련소스를 보면 대부분 복잡합니다. 그래서 귀찮아서 책을 안보고 공부하는분들은 접근하기가 어려운데 사실 한번 해보면 쉽습니다.
아래는 기본적인 업로드에 관련된 소스입니다. 폼입니다.
<form method="post" enctype="multipart/form-data" action="upload_ok.php"> <input type="file" name="userfile" style="width: 100%;"></br> <input type="submit" value="파일 업로드" /> </form>
이렇게 보내면 이렇게 변수를 받습니다.
$_FILES['userfile']['name'] = "업로드한파일명.jpg"; $_FILES['userfile']['type'] = "image/jpeg"; // 파일의 포맷 $_FILES['userfile']['tmp_name'] = "/tmp/phpKAI9e1"; // 파일이 서버의 임시 폴더로 업로드되고, 그 파일명입니다. (실제로 서버에 업로드 되는거이긴 하나, 이 임시 폴더는 서버 리붓시마다 내용이 삭제되는 폴더이므로 신경쓰지 않고 실제로 업로드 되는게 아니다라고 생각하셔도 됩니다.) $_FILES['userfile']['error'] = 0; // 오류가 발생했을때 0 이 아닌 다른 숫자가 나옵니다. $_FILES['userfile']['size'] = 77563; // 업로드한 파일의 사이즈입니다. (바이트)
아주 간단하게는 이렇게 하면 끝납니다.
<? move_uploaded_file($_FILES['userfile']['tmp_name'], "img/".$_FILES['userfile']['name']); echo "<img src='img/".$_FILES['userfile']['tmp_name']."' />"; ?>
move_uploaded_file 함수 말고 cp라는 함수도 있는데, 이 함수가 더 낫다고 하네요.
이 코드는 서버의 임시 폴더로 들어간 파일을 현재 php파일이 존재하는 곳의 img 폴더에 업로드한 파일명으로 파일을 옮기는 과정입니다. 간단하게 이렇게 하면 업로드가 끝납니다.
확장자 제한, 오류발생시 무시등은 여러분의 몫입니다.