묻고답하기
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
파일업로드중 에러가 생겼습니다. 어떻게 해야하죠?
2004.11.18 16:21
아래에다 같은 질문을 적었습니다만 어찌해야할지 막막해서 다시 올립니다.
제가 제로보드를 보면서 전에 제가 만들던 자료실형게시판을 수정했습니다.
텍스트만 있는 글쓰기는 이상없이 저장이 됩니다 그런데 파일을 지정한후 저장하기를 하면 에러가 발생합니다.
아래소스는 제가 작성한 write_proc.php 라는 파일의 소스그대로 복사해서 붙였습니다.
정확히 에러가 나는 부분은 //중복파일이 있을때 부분의 if(!move_uploaded_file($userfile,$dest)) ErrMsg
웹상에서 ErrMsg("파일업로드가 제대로 되지 않았습니다2")
alert창(경고창으로뜹니다.) 파일업로드가 제대로 되지않습니다2.
즉 if(){}else{}에서 else{}로 빠지면서 에러가 발생하는것 같습니다.
파일없이 텍스트만 입력하고 저장을 하면 이상없이 저장은 됩니다.
파일처리부분과 관련해서 제가 실수한것 같은데 어떻게 처리해야할지 갈피를 못잡겠습니다.
혼자 해결해 볼려고 애를 쓰지만 정말 해결이 안돼서 그럽니다. 제발 도와주십시오..
<?
include "dbcon.php";
//등록하려는 파일과 동일한 이름을 갖는 파일이 이미 존재하는지를 검사한다.
$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");
@chmod($dest,0706);
@chmod("upfile/" . $b_name,0707);
} else {
if(!move_uploaded_file($userfile,$dest)) ErrMsg("파일업로드가 제대로 되지 않았습니다2");
@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
웹상에서 ErrMsg("파일업로드가 제대로 되지 않았습니다2")
alert창(경고창으로뜹니다.) 파일업로드가 제대로 되지않습니다2.
즉 if(){}else{}에서 else{}로 빠지면서 에러가 발생하는것 같습니다.
파일없이 텍스트만 입력하고 저장을 하면 이상없이 저장은 됩니다.
파일처리부분과 관련해서 제가 실수한것 같은데 어떻게 처리해야할지 갈피를 못잡겠습니다.
혼자 해결해 볼려고 애를 쓰지만 정말 해결이 안돼서 그럽니다. 제발 도와주십시오..
<?
include "dbcon.php";
//등록하려는 파일과 동일한 이름을 갖는 파일이 이미 존재하는지를 검사한다.
$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");
@chmod($dest,0706);
@chmod("upfile/" . $b_name,0707);
} else {
if(!move_uploaded_file($userfile,$dest)) ErrMsg("파일업로드가 제대로 되지 않았습니다2");
@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;
}
?>
댓글 2
-
과일™
2004.11.18 19:48
-
겜방
2004.11.18 20:02
일단
if(!move_uploaded_file($userfile,$dest)) ErrMsg("파일업로드가 제대로 되지 않았습니다2");
@chmod($dest,0706);
이 부분을 주석처리하고
echo "$userfile $dest";
와 같이해서, $userfile, $dest가 파일경로가 맞는지 확인해보는게 어떨까요? ^^
딱히 문제 있을만한 것도 없거든요.
업로드시 뜨는 PHP 에러 메세지도 첨부해 주세요.