멀티 업로더 질문입니다
본문
https://sir.kr/g5_skin/36497 현재 이 테마를 사용 중인데여
글을 적고 작성하기를 누르면 404.html 페이지가 뜨는데 뭐가 문제일까요..?ㅠㅠ
<?php
if (! defined('_GNUBOARD_'))
exit(); // 개별 페이지 접근 불가
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
add_stylesheet('<link rel="stylesheet" href="' . $board_skin_url . '/style.css">', 0);
switch (true) {
case (isset($_GET['upload'])):
{
include_once $board_skin_path . '/write.upload.php';
break;
}
case (isset($_GET['mutipleUplad'])):
{
?>
<div class="bo_wrap">
<section id="bo_w">
<h2 class="sound_only"><?php echo $g5['title'] ?></h2>
<form method='post' action='/bbs/write.php?bo_table=<?=$bo_table?>&upload'
multipart="" enctype="multipart/form-data">
<input type="hidden" name="uid" value="<?php echo get_uniqid(); ?>"> <input
type="hidden" name="w" value="<?php echo $w ?>"> <input type="hidden"
name="bo_table" value="<?php echo $bo_table ?>"> <input type="hidden"
name="wr_id" value=""> <input type="hidden" name="sca"
value="<?php echo $sca ?>"> <input type="hidden" name="sfl"
value="<?php echo $sfl ?>"> <input type="hidden" name="stx"
value="<?php echo $stx ?>"> <input type="hidden" name="spt"
value="<?php echo $spt ?>"> <input type="hidden" name="sst"
value="<?php echo $sst ?>"> <input type="hidden" name="sod"
value="<?php echo $sod ?>"> <input type="hidden" name="page"
value="<?php echo $page ?>"> <input type="hidden" name="wr_name"
value="<?php echo $name ?>"> <input type="text" name="wr_subject"
value="<?php echo $subject ?>" id="wr_subject" required
class="frm_input full_input required" size="50" maxlength="255"
placeholder="제목">
<div class="write_div">
<label for="wr_content" class="sound_only">내용<strong>필수</strong></label>
<div
class="wr_content <?php echo $is_dhtml_editor ? $config['cf_editor'] : ''; ?>">
<?php if($write_min || $write_max) { ?>
<!-- 최소/최대 글자 수 사용 시 -->
<p id="char_count_desc">
이 게시판은 최소 <strong><?php echo $write_min; ?></strong>글자 이상, 최대 <strong><?php echo $write_max; ?></strong>글자
이하까지 글을 쓰실 수 있습니다.
</p>
<?php } ?>
<?php echo $editor_html; // 에디터 사용시는 에디터로, 아니면 textarea 로 노출 ?>
<?php if($write_min || $write_max) { ?>
<!-- 최소/최대 글자 수 사용 시 -->
<div id="char_count_wrap">
<span id="char_count"></span>글자
</div>
<?php } ?>
</div>
</div>
<input type="file" name='img[]' class='frm_input' multiple>
<div class="btn_confirm write_div">
<a href="<?php echo get_pretty_url($bo_table); ?>" class="btn_cancel btn">취소</a>
<button type="submit" id="btn_submit" accesskey="s" class="btn_submit btn">작성완료</button>
</div>
</form>
</section>
</div>
<?php
break;
}
case (true):
{
?>
해당 코드이고
파일이 들어가 있는 디렉토리 입니다 원래는 board > multiupload.gallery 였는데
제가 그냥
갤러리 디렉토리에 복사 붙여넣기로 덮었거든요 거기서 경로 문제가 일어났을까요?ㅠㅠ
답변 3
잘못봤네요 스킨에서 업데이트를 하네요
write.upload.php에서 글 작성후 넘어가는 페이지 경로가 잘못된겁니다
write.upload.php 소스, 올려주시거나 저장후 넘어가는 페이지 내용을 수정하세욤
엥? 잘못봤네요 스킨에서 업데이트를 하네요
write.upload.php에서 글 작성후 넘어가는 페이지 경로가 잘못된겁니다
<?php
function reArrayFiles($file)
{
$file_ary = array();
$file_count = count($file['name']);
$file_key = array_keys($file);
for($i=0;$i<$file_count;$i++)
{
foreach($file_key as $val)
{
$file_ary[$i][$val] = $file[$val][$i];
}
}
return $file_ary;
}
$img = $_FILES["img"];
/* // 업르도파일을 저장하는 파일 패스를 지정
$filename = $board_skin_path."/".$_FILES["img"]["name"];
// 업로드 된 임시파일을 파일 저장 패스에 카피함
$file = move_uploaded_file($tmpname, $filename);
*/
if(!empty($img))
{
$img_desc = reArrayFiles($img);
//print_r($img_desc);
$count = count($img_desc);
$i_count = 0;
// 디렉토리가 없다면 생성합니다. (퍼미션도 변경하구요.)
@mkdir(G5_DATA_PATH.'/file/'.$bo_table, G5_DIR_PERMISSION);
@chmod(G5_DATA_PATH.'/file/'.$bo_table, G5_DIR_PERMISSION);
foreach($img_desc as $val)
{
$i_count++;
//echo $filename = G5_DATA_PATH."/".$val["name"];
//echo $newname = date('YmdHis',time()).mt_rand().'.jpg';
//move_uploaded_file($val['tmp_name'],$filename);
$tmp_file = $val['tmp_name'];
$filesize = $val['size'];
$filename = $val['name'];
$filename = get_safe_filename($filename);
$timg = @getimagesize($tmp_file);
$val['img'] = $timg;
// 관리자가 아니면서 설정한 업로드 사이즈보다 크다면 건너뜀
if (!$is_admin && $filesize > $board['bo_upload_size']) {
$file_upload_msg .= '\"'.$filename.'\" 파일의 용량('.number_format($filesize).' 바이트)이 게시판에 설정('.number_format($board['bo_upload_size']).' 바이트)된 값보다 크므로 업로드 하지 않습니다.\\n';
continue;
}
//=================================================================\
// 090714
// 이미지나 플래시 파일에 악성코드를 심어 업로드 하는 경우를 방지
// 에러메세지는 출력하지 않는다.
//-----------------------------------------------------------------
// image type
if ( preg_match("/\.({$config['cf_image_extension']})$/i", $filename) ||
preg_match("/\.({$config['cf_flash_extension']})$/i", $filename) ) {
if ($timg['2'] < 1 || $timg['2'] > 16)
continue;
}
//=================================================================
// 프로그램 원래 파일명
$val['source'] = $filename;
$val['filesize'] = $filesize;
// 아래의 문자열이 들어간 파일은 -x 를 붙여서 웹경로를 알더라도 실행을 하지 못하도록 함
$filename = preg_replace("/\.(php|pht|phtm|htm|cgi|pl|exe|jsp|asp|inc)/i", "$0-x", $filename);
shuffle($chars_array);
$shuffle = implode('', $chars_array);
// 첨부파일 첨부시 첨부파일명에 공백이 포함되어 있으면 일부 PC에서 보이지 않거나 다운로드 되지 않는 현상이 있습니다. (길상여의 님 090925)
$val['file'] = abs(ip2long($_SERVER['REMOTE_ADDR'])).'_'.substr($shuffle,0,8).'_'.replace_filename($filename);
$dest_file = G5_DATA_PATH.'/file/'.$bo_table.'/'.$val['file'];
// 업로드가 안된다면 에러메세지 출력하고 죽어버립니다.
$error_code = move_uploaded_file($tmp_file, $dest_file) or die($val['error']);
// 올라간 파일의 퍼미션을 변경합니다.
chmod($dest_file, G5_FILE_PERMISSION);
$dest_file = run_replace('write_update_upload_file', $dest_file, $board, $wr_id, $w);
$val = run_replace('write_update_upload_array', $val, $dest_file, $board, $wr_id, $w);
if ($member['mb_id']) {
$mb_id = $member['mb_id'];
$wr_name = addslashes(clean_xss_tags($board['bo_use_name'] ? $member['mb_name'] : $member['mb_nick']));
$wr_password = '';
$wr_email = addslashes($member['mb_email']);
$wr_homepage = addslashes(clean_xss_tags($member['mb_homepage']));
} else {
$mb_id = '';
// 비회원의 경우 이름이 누락되는 경우가 있음
$wr_name = clean_xss_tags(trim($_POST['wr_name']));
if (!$wr_name)
alert('이름은 필히 입력하셔야 합니다.');
$wr_password = get_encrypt_string($wr_password);
$wr_email = get_email_address(trim($_POST['wr_email']));
$wr_homepage = clean_xss_tags($wr_homepage);
}
$wr_num = get_next_num($write_table);
$sql = " insert into $write_table
set wr_num = '$wr_num',
wr_reply = '$wr_reply',
wr_comment = 0,
ca_name = '$ca_name',
wr_option = '$html,$secret,$mail',
wr_subject = '$wr_subject',
wr_content = '$wr_content',
wr_seo_title = '$wr_seo_title',
wr_link1 = '$wr_link1',
wr_link2 = '$wr_link2',
wr_link1_hit = 0,
wr_link2_hit = 0,
wr_hit = 0,
wr_good = 0,
wr_nogood = 0,
mb_id = '{$member['mb_id']}',
wr_password = '$wr_password',
wr_name = '$wr_name',
wr_email = 'https://참소식.한국인터넷.한국',
wr_homepage = '$wr_homepage',
wr_datetime = '".G5_TIME_YMDHIS."',
wr_last = '".G5_TIME_YMDHIS."',
wr_ip = '{$_SERVER['REMOTE_ADDR']}',
wr_1 = '$wr_1',
wr_2 = '$wr_2',
wr_3 = '$wr_3',
wr_4 = '$wr_4',
wr_5 = '$wr_5',
wr_6 = '$wr_6',
wr_7 = '$wr_7',
wr_8 = '$wr_8',
wr_9 = '$wr_9',
wr_10 = '$wr_10' ";
sql_query($sql);
$wr_id = sql_insert_id();
// 부모 아이디에 UPDATE
sql_query(" update $write_table set wr_parent = '$wr_id' where wr_id = '$wr_id' ");
// 새글 INSERT
sql_query(" insert into {$g5['board_new_table']} ( bo_table, wr_id, wr_parent, bn_datetime, mb_id ) values ( '{$bo_table}', '{$wr_id}', '{$wr_id}', '".G5_TIME_YMDHIS."', '{$member['mb_id']}' ) ");
// 게시글 1 증가
sql_query("update {$g5['board_table']} set bo_count_write = bo_count_write + 1 where bo_table = '{$bo_table}'");
$sql = " insert into {$g5['board_file_table']}
set bo_table = '{$bo_table}',
wr_id = '{$wr_id}',
bf_no = '0',
bf_source = '{$val['source']}',
bf_file = '{$val['file']}',
bf_content = '',
bf_fileurl = '',
bf_thumburl = '',
bf_storage = '',
bf_download = 0,
bf_filesize = '{$val['filesize']}',
bf_width = '{$val['img']['0']}',
bf_height = '{$val['img']['1']}',
bf_type = '{$val['img']['2']}',
bf_datetime = '".G5_TIME_YMDHIS."' ";
sql_query($sql);
run_event('write_update_file_insert', $bo_table, $wr_id, $val, $w);
delete_cache_latest($bo_table);
$redirect_url = run_replace('write_update_move_url', short_url_clean(G5_HTTP_BBS_URL.'/board.php?bo_table='.$bo_table.'&wr_id='.$wr_id.$qstr), $board, $wr_id, $w, $qstr, $file_upload_msg);
run_event('write_update_after', $board, $wr_id, $w, $qstr, $redirect_url);
// 파일의 개수를 게시물에 업데이트 한다.
$row = sql_fetch(" select count(*) as cnt from {$g5['board_file_table']} where bo_table = '{$bo_table}' and wr_id = '{$wr_id}' ");
sql_query(" update {$write_table} set wr_file = '{$row['cnt']}' where wr_id = '{$wr_id}' ");
// 자동저장된 레코드를 삭제한다.
sql_query(" delete from {$g5['autosave_table']} where as_uid = '{$uid}' ");
//------------------------------------------------------------------------------
}
}
안의 내용입니다 ㅠㅠ
if($count==$i_count) {
echo '파일 업로드 성공 !';
?>
<script>
window.location.href='<?=G5_BBS_URL.'/board.php?bo_table='.$_GET['bo_table']?>';
</script>
<?php
}
?>