묻고답하기
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
php 자료실 질문좀 할께요
2004.11.15 12:16
제가 제로보드 보면서 전에 제가 만들던 자료실게시판을 수정했습니다.
일반 글쓰기는 이상없이 저장이 됩니다 그런데 파일을 지정한후 저장하기를 하면 에러가 발생합니다.
아래소스는 제가 작성한 write_proc.php 라는 파일의 소스그대로 복사해서 붙였습니다.
정확히 에러가 나는 부분은 //중복파일이 있을때 부분의 if(!move_uploaded_file($userfile,$dest)) ErrMsg
부분입니다. 혼자 해결해 볼려고 애를 쓰지만 정말 해결이 안돼서 그럽니다. 제발 도와주십시오..
<?
include "dbcon.php";
//사용자가 아무값도 입력하지 않았거나 입력한 값이 허용되지 않는 값일 경우 에러메시지를 출력하고 스크립트를 종료한다.
if(!ereg("([^[:space:]]+)", $name)) {
ErrMsg("입력하신 이름은 허용되지 않는 값입니다.\n\n다시 입력하여 주십시오");
exit;
}
if(!ereg("([^[:space:]]+)", $subject)) {
ErrMsg("제목을 입력하여주십시오");
exit;
}
if(!ereg("(^[0-9a-zA-Z]{4,}$)", $passwd)) {
ErrMsg("암호는 최소 4자이상의 영문자 또는 숫자여야 합니다.\n\n다시입력하여 주십시오.");
exit;
}
if(!ereg("([^[:space:]]+)", $comment)) {
ErrMsg("본문을 입력하지 않으셨습니다.\n\n다시 입력하여 주십시오.");
exit;
}
//등록한 파일이 업로드가 허용되지 않는 확장자를 갖는 파일인지를 검사한다.
$filename = explode(".", $userfile_name);
$extension = $filename[sizeof($filename)-1];
if(in_array($extension,$prohibited_ext)) {
ErrMsg("해당파일은 자료실 운영지침에 따라 업로드가 허용되지 않는 파일입니다.\n\n가능하면 압축파일의 형태로 등록하여 주십시오.");
exit;
}
//등록하려는 파일과 동일한 이름을 갖는 파일이 이미 존재하는지를 검사한다.
$dest = "/upfile/" . $b_name . "/" . $userfile_name;
if($userfile_size>0&&$userfile){
// 디렉토리를 검사함
if(!is_dir("upfile/" . $b_name)) {
mkdir("upfile/" . $b_name,0777);
@chmod("upfile/" . $b_name,0706);
}
/*if(file_exists($dest)) {
ErrMsg("동일한 이름의 파일이 이미 등록되어 있습니다.\n\n다른 이름으로 업로드하여 주십시오.");
exit;
}*/
//----------------------
// 중복파일이 있을때;;
if(file_exists($dest)) {
if(!move_uploaded_file($userfile,$dest)) ErrMsg("파일업로드가 제대로 되지 않았습니다1 \n\n $userfile:::::$dest");
//$file_name1="data/$id/".$reg_date."/".$s_file_name1;
@chmod($dest,0706);
@chmod("upfile/" . $b_name,0707);
} else {
if(!move_uploaded_file($userfile,$dest)) ErrMsg("파일업로드가 제대로 되지 않았습니다2 \n\n $userfile:::::$dest");
//$file_name1="data/$id/".$s_file_name1;
@chmod($dest,0706);
}
// 작업이 끝난후 임시디렉토리에 저장된 파일을 삭제한다.
if(!@unlink($userfile)) {
ErrMsg("업로드 과정중 오류가 발생하였습니다. \n\n관리자에게 문의하여 주십시오.");
exit;
}
}
$result = mysql_query("SELECT max(uid), max(fid) FROM $code WHERE b_name='$b_name'");
if (!$result) {
ErrMsg("QUERY_ERROR");
exit;
}
$row = mysql_fetch_row($result);
if($row[0]) {
$new_uid = $row[0] + 1;
} else {
$new_uid = 1;
}
if($row[1]) {
$new_fid = $row[1] + 1;
} else {
$new_fid = 1;
}
mysql_free_result($result);
//파일이 등록된 시간을 저장한다.
$signdate = time();
//제목과 내용에 포함된 특수문자를 escape시킨다.
$subject = addslashes($subject);
$comment = addslashes($comment);
// 데이터베이스에 입력값을 삽입한다.
$query = "INSERT INTO $code (fid, b_name, userid, name, email, subject, comment, passwd, signdate, ref, userfile, filesize, thread) VALUES ($new_fid, '$b_name', '$userid', '$name', '$email', '$subject', '$comment', $passwd, $signdate, 1,'$userfile_name','$userfile_size', 'A')";
$result = mysql_query($query);
if($result) {
// 리스트 출력화면으로 이동한다.
echo ("<meta http-equiv='Refresh' content='0; URL=list.php?code=$code&b_name=$b_name'>");
} else {
// 에러가 발생하였으므로 이미 업로드된 파일을 삭제한다.
@unlink($dest);
ErrMsg("QUERY_ERROR2");
exit;
}
?>
일반 글쓰기는 이상없이 저장이 됩니다 그런데 파일을 지정한후 저장하기를 하면 에러가 발생합니다.
아래소스는 제가 작성한 write_proc.php 라는 파일의 소스그대로 복사해서 붙였습니다.
정확히 에러가 나는 부분은 //중복파일이 있을때 부분의 if(!move_uploaded_file($userfile,$dest)) ErrMsg
부분입니다. 혼자 해결해 볼려고 애를 쓰지만 정말 해결이 안돼서 그럽니다. 제발 도와주십시오..
<?
include "dbcon.php";
//사용자가 아무값도 입력하지 않았거나 입력한 값이 허용되지 않는 값일 경우 에러메시지를 출력하고 스크립트를 종료한다.
if(!ereg("([^[:space:]]+)", $name)) {
ErrMsg("입력하신 이름은 허용되지 않는 값입니다.\n\n다시 입력하여 주십시오");
exit;
}
if(!ereg("([^[:space:]]+)", $subject)) {
ErrMsg("제목을 입력하여주십시오");
exit;
}
if(!ereg("(^[0-9a-zA-Z]{4,}$)", $passwd)) {
ErrMsg("암호는 최소 4자이상의 영문자 또는 숫자여야 합니다.\n\n다시입력하여 주십시오.");
exit;
}
if(!ereg("([^[:space:]]+)", $comment)) {
ErrMsg("본문을 입력하지 않으셨습니다.\n\n다시 입력하여 주십시오.");
exit;
}
//등록한 파일이 업로드가 허용되지 않는 확장자를 갖는 파일인지를 검사한다.
$filename = explode(".", $userfile_name);
$extension = $filename[sizeof($filename)-1];
if(in_array($extension,$prohibited_ext)) {
ErrMsg("해당파일은 자료실 운영지침에 따라 업로드가 허용되지 않는 파일입니다.\n\n가능하면 압축파일의 형태로 등록하여 주십시오.");
exit;
}
//등록하려는 파일과 동일한 이름을 갖는 파일이 이미 존재하는지를 검사한다.
$dest = "/upfile/" . $b_name . "/" . $userfile_name;
if($userfile_size>0&&$userfile){
// 디렉토리를 검사함
if(!is_dir("upfile/" . $b_name)) {
mkdir("upfile/" . $b_name,0777);
@chmod("upfile/" . $b_name,0706);
}
/*if(file_exists($dest)) {
ErrMsg("동일한 이름의 파일이 이미 등록되어 있습니다.\n\n다른 이름으로 업로드하여 주십시오.");
exit;
}*/
//----------------------
// 중복파일이 있을때;;
if(file_exists($dest)) {
if(!move_uploaded_file($userfile,$dest)) ErrMsg("파일업로드가 제대로 되지 않았습니다1 \n\n $userfile:::::$dest");
//$file_name1="data/$id/".$reg_date."/".$s_file_name1;
@chmod($dest,0706);
@chmod("upfile/" . $b_name,0707);
} else {
if(!move_uploaded_file($userfile,$dest)) ErrMsg("파일업로드가 제대로 되지 않았습니다2 \n\n $userfile:::::$dest");
//$file_name1="data/$id/".$s_file_name1;
@chmod($dest,0706);
}
// 작업이 끝난후 임시디렉토리에 저장된 파일을 삭제한다.
if(!@unlink($userfile)) {
ErrMsg("업로드 과정중 오류가 발생하였습니다. \n\n관리자에게 문의하여 주십시오.");
exit;
}
}
$result = mysql_query("SELECT max(uid), max(fid) FROM $code WHERE b_name='$b_name'");
if (!$result) {
ErrMsg("QUERY_ERROR");
exit;
}
$row = mysql_fetch_row($result);
if($row[0]) {
$new_uid = $row[0] + 1;
} else {
$new_uid = 1;
}
if($row[1]) {
$new_fid = $row[1] + 1;
} else {
$new_fid = 1;
}
mysql_free_result($result);
//파일이 등록된 시간을 저장한다.
$signdate = time();
//제목과 내용에 포함된 특수문자를 escape시킨다.
$subject = addslashes($subject);
$comment = addslashes($comment);
// 데이터베이스에 입력값을 삽입한다.
$query = "INSERT INTO $code (fid, b_name, userid, name, email, subject, comment, passwd, signdate, ref, userfile, filesize, thread) VALUES ($new_fid, '$b_name', '$userid', '$name', '$email', '$subject', '$comment', $passwd, $signdate, 1,'$userfile_name','$userfile_size', 'A')";
$result = mysql_query($query);
if($result) {
// 리스트 출력화면으로 이동한다.
echo ("<meta http-equiv='Refresh' content='0; URL=list.php?code=$code&b_name=$b_name'>");
} else {
// 에러가 발생하였으므로 이미 업로드된 파일을 삭제한다.
@unlink($dest);
ErrMsg("QUERY_ERROR2");
exit;
}
?>
if(file_exists($dest)) {
if(!move_uploaded_file($userfile,$dest)) ErrMsg("파일업로드가 제대로 되지 않았습니다1 \\n\\n $userfile:::::$dest");
//$file_name1="data/$id/".$reg_date."/".$s_file_name1;
@chmod($dest,0706);
@chmod("upfile/" . $b_name,0707);
} else {
if(!move_uploaded_file($userfile,$dest)) ErrMsg("파일업로드가 제대로 되지 않았습니다2 \\n\\n $userfile:::::$dest");
//$file_name1="data/$id/".$s_file_name1;
@chmod($dest,0706);
}
약간의 이상한부분이 있는데요..
if( true )와
else
속에 실행될 코드들이 틀린부분이 없는데요..-_-
파일이 있으면 다른이름으로 저장하던가..아니면 기존 파일을 지우던가 해야 할것같은데요..
근데 저 조건문의 참 과 거짓의 수행코드는
같은 파일이 있으나 없으나 $dest라는 파일명으로 저장이 되는것 같습니다.