php
php 파일 중복 방지
폼태그 구성
- file_form.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
</head>
<body>
<form enctype="multipart/form-data" action="file_result.php" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="3000000" />
<input name="userfile" type="file" />
<input type="submit" value="upload" />
</form>
</body>
</html>
전송용 PHP
- file_result.php
<?php
// uploads디렉토리에 파일을 업로드합니다.
$uploaddir = './files/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
echo '<pre>';
if($_POST['MAX_FILE_SIZE'] < $_FILES['userfile']['size']){
echo "업로드 파일이 지정된 파일크기보다 큽니다.\n";
} else {
if(($_FILES['userfile']['error'] > 0) || ($_FILES['userfile']['size'] <= 0)){
echo "파일 업로드에 실패하였습니다. <br />";
// 실패 내용을 출력
switch ($_FILES['userfile']['error']) {
case 1:
echo 'php.ini 파일의 upload_max_filesize 설정값을 초과함(업로드 최대용량 초과)';
break;
case 2:
echo 'Form에서 설정된 MAX_FILE_SIZE 설정값을 초과함(업로드 최대용량 초과)';
break;
case 3:
echo '파일 일부만 업로드 됨';
break;
case 4:
echo '업로드된 파일이 없음';
break;
case 6:
echo '사용가능한 임시폴더가 없음';
break;
case 7:
echo '디스크에 저장할수 없음';
break;
case 8:
echo '파일 업로드가 중지됨';
break;
default:
echo '시스템 오류가 발생';
break;
} // switch
echo "<br />";
} else {
// HTTP post로 전송된 것인지 체크합니다.
if(!is_uploaded_file($_FILES['userfile']['tmp_name'])) {
echo "HTTP로 전송된 파일이 아닙니다.";
} else {
// move_uploaded_file은 임시 저장되어 있는 파일을 ./uploads 디렉토리로 이동합니다.
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
echo "성공적으로 업로드 되었습니다.\n";
} else {
echo "파일 업로드 실패입니다.\n";
}
}
}
}
print_r($_FILES);
?>
임의의 문자 생성기
- random.php
<?php
function RandomString()
{
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randstring = '';
for ($i = 0; $i < 15; $i++) {
$randstring = $randstring.$characters[rand(0, strlen($characters)-1)];
}
return $randstring;
}
$result_string = RandomString();
echo $result_string;
?>
파일의 존재여부 확인
- exist.php
echo("*echo:");
echo(file_exists("./files/test.txt"));
echo("<br />");
//echo : string형 변수만 표시 합니다.
echo("*var_dump:");
var_dump(file_exists("./files/test.txt"));
echo("<br />");
//var_dump : 괄호안의 값의 type과 value를 동시에 표시합니다.
?>
겹치지 않는 파일명 생성기
- random_file_name.php
<?php
function RandomString()
{
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randstring = '';
for ($i = 0; $i < 15; $i++) {
$randstring = $randstring.$characters[rand(0, strlen($characters)-1)];
}
return $randstring;
}
function random_file_name($original_file_name){
$result_name; //결과 문자 - 리턴용
$directory = "./files/";
$File_ext = substr(strrchr($original_file_name, "."), 1); // 확장자 추출
var_dump(strrchr("파일명.확장자", "."));
//strrchr("파일명.확장자", ".");
//.(마침표) 있는 부분부터 리턴
echo "<br />";
var_dump(substr("text", 1));
//substr("text", 1)
//1번주소 부터 리턴
echo "<br />";
$randstring = RandomString(); //임의의 문자 생성
while(file_exists($directory.$randstring.".".$File_ext)){
//만약 파일명이 존재 한다면
$randstring = RandomString(); //임의의 문자 생성
}//만약 파일명이 존재하지 않는다면
$result_name = $directory.$randstring.".".$File_ext;
return $result_name; //파일명을 리턴
}
$original_file_name = "./test/sub_folder/test.txt";
echo random_file_name($original_file_name);
?>
최종결과
- random_uploader.php
<?php
// uploads디렉토리에 파일을 업로드합니다.
$uploaddir = './files/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
echo '<pre>';
if($_POST['MAX_FILE_SIZE'] < $_FILES['userfile']['size']){
echo "업로드 파일이 지정된 파일크기보다 큽니다.\n";
} else {
if(($_FILES['userfile']['error'] > 0) || ($_FILES['userfile']['size'] <= 0)){
echo "파일 업로드에 실패하였습니다. <br />";
// 실패 내용을 출력
switch ($_FILES['userfile']['error']) {
case 1:
echo 'php.ini 파일의 upload_max_filesize 설정값을 초과함(업로드 최대용량 초과)';
break;
case 2:
echo 'Form에서 설정된 MAX_FILE_SIZE 설정값을 초과함(업로드 최대용량 초과)';
break;
case 3:
echo '파일 일부만 업로드 됨';
break;
case 4:
echo '업로드된 파일이 없음';
break;
case 6:
echo '사용가능한 임시폴더가 없음';
break;
case 7:
echo '디스크에 저장할수 없음';
break;
case 8:
echo '파일 업로드가 중지됨';
break;
default:
echo '시스템 오류가 발생';
break;
} // switch
echo "<br />";
} else {
// HTTP post로 전송된 것인지 체크합니다.
if(!is_uploaded_file($_FILES['userfile']['tmp_name'])) {
echo "HTTP로 전송된 파일이 아닙니다.";
} else {
// move_uploaded_file은 임시 저장되어 있는 파일을 ./uploads 디렉토리로 이동합니다.
//if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
if (move_uploaded_file($_FILES['userfile']['tmp_name'], random_file_name($uploadfile))) {
//random_file_name($original_file_name)
echo "성공적으로 업로드 되었습니다.\n";
} else {
echo "파일 업로드 실패입니다.\n";
}
}
}
}
print_r($_FILES);
function RandomString()
{
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randstring = '';
for ($i = 0; $i < 15; $i++) {
$randstring = $randstring.$characters[rand(0, strlen($characters)-1)];
}
return $randstring;
}
function random_file_name($original_file_name){
$result_name; //결과 문자 - 리턴용
$directory = "./files/";
$File_ext = substr(strrchr($original_file_name, "."), 1); // 확장자 추출
var_dump(strrchr("파일명.확장자", "."));
//strrchr("파일명.확장자", ".");
//.(마침표) 있는 부분부터 리턴
echo "<br />";
var_dump(substr("text", 1));
//substr("text", 1)
//1번주소 부터 리턴
echo "<br />";
$randstring = RandomString(); //임의의 문자 생성
while(file_exists($directory.$randstring.".".$File_ext)){
//만약 파일명이 존재 한다면
$randstring = RandomString(); //임의의 문자 생성
}//만약 파일명이 존재하지 않는다면
$result_name = $directory.$randstring.".".$File_ext;
return $result_name; //파일명을 리턴
}
//$original_file_name = "./test/sub_folder/test.txt";
//echo random_file_name($original_file_name);
$prevPage = $_SERVER['HTTP_REFERER'];
// 변수에 이전페이지 정보를 저장
header('location:'.$prevPage);
// 페이지 이동
?>