그림게시판을 서명게시판으로 활용하려는데 path부분을 다 손대 보아도 이미지가 저장이 되질않습니다. 확인좀 해주십시요 선배님들 ㅠ
본문
write.php이고요
<?php
<!-- } 게시물 작성/수정 끝 -->
$id = uniqid();
$g5_path = "";// 여기에 그누 보드 설치 폴더를 넣으세요. 없으면 공란으로 두세요.
$menu_path = "/skin/board/paint/";
$image_prefix = date('Ymdms').$id.".png";
$upload_path = "/skin/board/paint/upload.php?bo_table=".$bo_table."$save_prefix=".$image_prefix;
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
add_stylesheet('<link rel="stylesheet" href="'.$board_skin_url.'/style.css">', 0);
?>
<style type="text/css">
.mybox { border:1px solid; padding:10px; }
</style>
<section id="bo_w">
<h2 id="container_title"><?php echo $g5['title'] ?></h2>
<!-- 게시물 작성/수정 시작 { -->
<form name="fwrite" id="fwrite" action="<?php echo $action_url ?>" onsubmit="return fwrite_submit(this);" method="post" enctype="multipart/form-data" autocomplete="off" style="width:<?php echo $width; ?>">
<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="<?php echo $wr_id ?>">
<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="image_prefix" value="<?php echo $image_prefix."png" ?>">
<?php
$option = '';
$option_hidden = '';
if ($is_notice || $is_html || $is_secret || $is_mail) {
$option = '';
if ($is_notice) {
$option .= "\n".'<input type="checkbox" id="notice" name="notice" value="1" '.$notice_checked.'>'."\n".'<label for="notice">공지</label>';
}
if ($is_html) {
if ($is_dhtml_editor) {
$option_hidden .= '<input type="hidden" value="html1" name="html">';
} else {
$option .= "\n".'<input type="checkbox" id="html" name="html" onclick="html_auto_br(this);" value="'.$html_value.'" '.$html_checked.'>'."\n".'<label for="html">html</label>';
}
}
if ($is_secret) {
if ($is_admin || $is_secret==1) {
$option .= "\n".'<input type="checkbox" id="secret" name="secret" value="secret" '.$secret_checked.'>'."\n".'<label for="secret">비밀글</label>';
} else {
$option_hidden .= '<input type="hidden" name="secret" value="secret">';
}
}
if ($is_mail) {
$option .= "\n".'<input type="checkbox" id="mail" name="mail" value="mail" '.$recv_email_checked.'>'."\n".'<label for="mail">답변메일받기</label>';
}
}
echo $option_hidden;
?>
<div class="tbl_frm01 tbl_wrap">
<table>
<tbody>
<? if($w != "u") { ?>
<tr>
<td colspan=2><img src="<? echo $board_skin_url?>/img/help.jpg"></td>
</tr>
<?php } ?>
<?php if ($is_name) { ?>
<tr>
<th scope="row"><label for="wr_name">이름<strong class="sound_only">필수</strong></label></th>
<td><input type="text" name="wr_name" value="<?php echo $name ?>" id="wr_name" required class="frm_input required" size="10" maxlength="20"></td>
</tr>
<?php } ?>
<?php if ($is_password) { ?>
<tr>
<th scope="row"><label for="wr_password">비밀번호<strong class="sound_only">필수</strong></label></th>
<td><input type="password" name="wr_password" id="wr_password" <?php echo $password_required ?> class="frm_input <?php echo $password_required ?>" maxlength="20"></td>
</tr>
<?php } ?>
<?php if ($is_email) { ?>
<tr>
<th scope="row"><label for="wr_email">이메일</label></th>
<td><input type="text" name="wr_email" value="<?php echo $email ?>" id="wr_email" class="frm_input email" size="50" maxlength="100"></td>
</tr>
<?php } ?>
<?php if ($is_homepage) { ?>
<tr>
<th scope="row"><label for="wr_homepage">홈페이지</label></th>
<td><input type="text" name="wr_homepage" value="<?php echo $homepage ?>" id="wr_homepage" class="frm_input" size="50"></td>
</tr>
<?php } ?>
<?php if ($option) { ?>
<tr>
<th scope="row">옵션</th>
<td><?php echo $option ?></td>
</tr>
<?php } ?>
<?php if ($is_category) { ?>
<tr>
<th scope="row"><label for="ca_name">분류<strong class="sound_only">필수</strong></label></th>
<td>
<select name="ca_name" id="ca_name" required class="required" >
<option value="">선택하세요</option>
<?php echo $category_option ?>
</select>
</td>
</tr>
<?php } ?>
<tr>
<th scope="row"><label for="wr_subject">제목<strong class="sound_only">필수</strong></label></th>
<td>
<div id="autosave_wrapper">
<input type="text" name="wr_subject" value="<?php echo $subject ?>" id="wr_subject" required class="frm_input required" size="50" maxlength="255">
<?php if ($is_member) { // 임시 저장된 글 기능 ?>
<script src="<?php echo G5_JS_URL; ?>/autosave.js"></script>
<button type="button" id="btn_autosave" class="btn_frmline">임시 저장된 글 (<span id="autosave_count"><?php echo $autosave_count; ?></span>)</button>
<div id="autosave_pop">
<strong>임시 저장된 글 목록</strong>
<div><button type="button" class="autosave_close"><img src="<?php echo $board_skin_url; ?>/img/btn_close.gif" alt="닫기"></button></div>
<ul></ul>
<div><button type="button" class="autosave_close"><img src="<?php echo $board_skin_url; ?>/img/btn_close.gif" alt="닫기"></button></div>
</div>
<?php } ?>
</div>
</td>
</tr>
<? if($w == "u") { ?>
<tr>
<td colspan=2>
<?php
// 파일 출력
$query5 = "select bf_source from g5_board_file where wr_id = '$wr_id' ";
$result5 = sql_query($query5);
while($row = sql_fetch_array($result5)) {
$bf_source = $row[bf_source]; //parts
}
echo "<div class='mybox'><img src='../data/file/".$bo_table."/".$bf_source."'></div>";
?>
</td>
</tr>
<?php } ?>
<? if($w != "u") { ?>
<tr>
<td colspan=2>
<script type="text/javascript" src="../js/jquery-1.8.3.min.js"></script>
<!-- jQuery UI -->
<script type="text/javascript" src="<? echo $board_skin_url?>/lib/jquery.ui.core.1.10.3.min.js"></script>
<script type="text/javascript" src="<? echo $board_skin_url?>/lib/jquery.ui.widget.1.10.3.min.js"></script>
<script type="text/javascript" src="<? echo $board_skin_url?>/lib/jquery.ui.mouse.1.10.3.min.js"></script>
<script type="text/javascript" src="<? echo $board_skin_url?>/lib/jquery.ui.draggable.1.10.3.min.js"></script>
<!-- wColorPicker -->
<link rel="Stylesheet" type="text/css" href="<? echo $board_skin_url?>/lib/wColorPicker.min.css" />
<script type="text/javascript" src="<? echo $board_skin_url?>/lib/wColorPicker.min.js"></script>
<!-- wPaint -->
<link rel="Stylesheet" type="text/css" href="<? echo $board_skin_url?>/lib/wPaint.min.css" />
<script type="text/javascript" src="<? echo $board_skin_url?>/lib/wPaint.min.js"></script>
<script type="text/javascript" src="<? echo $board_skin_url?>/plugins/main/wPaint.menu.main.min.js"></script>
<script type="text/javascript" src="<? echo $board_skin_url?>/plugins/text/wPaint.menu.text.min.js"></script>
<script type="text/javascript" src="<? echo $board_skin_url?>/plugins/shapes/wPaint.menu.main.shapes.min.js"></script>
<script type="text/javascript" src="<? echo $board_skin_url?>/plugins/file/wPaint.menu.main.file.min.js"></script>
<div id="wPaint" style="position:relative; width:600px; height:450px; background-color:#7a7a7a; margin:70px auto 20px auto;border: 5px solid gray;"></div>
<center style="margin-bottom: 50px;">
<input type="button" value="toggle menu" onclick="console.log($('#wPaint').wPaint('menuOrientation')); $('#wPaint').wPaint('menuOrientation', $('#wPaint').wPaint('menuOrientation') === 'vertical' ? 'horizontal' : 'vertical');"/>
</center>
<center id="wPaint-img"></center>
<script type="text/javascript">
var images = [
'/wPaint.png',
];
function saveImg(image) {
var _this = this;
$.ajax({
type: 'POST',
url: '<? echo $upload_path?>',
data: {image: image},
success: function (resp) {
// internal function for displaying status messages in the canvas
_this._displayStatus('서명이 완료되었습니다.');
// doesn't have to be json, can be anything
// returned from server after upload as long
// as it contains the path to the image url
// or a base64 encoded png, either will work
resp = $.parseJSON(resp);
// update images array / object or whatever
// is being used to keep track of the images
// can store path or base64 here (but path is better since it's much smaller)
images.push(resp.img);
// do something with the image
$('#wPaint-img').attr('src', image);
}
});
}
function loadImgBg () {
// internal function for displaying background images modal
// where images is an array of images (base64 or url path)
// NOTE: that if you can't see the bg image changing it's probably
// becasue the foregroud image is not transparent.
this._showFileModal('bg', images);
}
function loadImgFg () {
// internal function for displaying foreground images modal
// where images is an array of images (base64 or url path)
this._showFileModal('fg', images);
}
// init wPaint
$('#wPaint').wPaint({
menuOffsetLeft: -35,
menuOffsetTop: -50,
saveImg: saveImg,
loadImgBg: loadImgBg,
loadImgFg: loadImgFg,
path: '<? echo $menu_path ?>',
fontFamily : '굴림', // active font family for text input
bg: '#ffffff',
lineWidth: '1',
strokeStyle: '#000000'
});
</script>
</td>
</tr>
<?php } ?>
<tr>
<th scope="row"><label for="wr_content">내용<strong class="sound_only">필수</strong></label></th>
<td class="wr_content">
<?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 } ?>
</td>
</tr>
<?php if ($is_guest) { //자동등록방지 ?>
<tr>
<th scope="row">자동등록방지</th>
<td>
<?php echo $captcha_html ?>
</td>
</tr>
<?php } ?>
</tbody>
</table>
</div>
<div class="btn_confirm">
<input type="submit" value="작성완료" id="btn_submit" accesskey="s" class="btn_submit">
<a href="./board.php?bo_table=<?php echo $bo_table ?>" class="btn_cancel">취소</a>
</div>
</form>
<script>
<?php if($write_min || $write_max) { ?>
// 글자수 제한
var char_min = parseInt(<?php echo $write_min; ?>); // 최소
var char_max = parseInt(<?php echo $write_max; ?>); // 최대
check_byte("wr_content", "char_count");
$(function() {
$("#wr_content").on("keyup", function() {
check_byte("wr_content", "char_count");
});
});
<?php } ?>
function html_auto_br(obj)
{
if (obj.checked) {
result = confirm("자동 줄바꿈을 하시겠습니까?\n\n자동 줄바꿈은 게시물 내용중 줄바뀐 곳을<br>태그로 변환하는 기능입니다.");
if (result)
obj.value = "html2";
else
obj.value = "html1";
}
else
obj.value = "";
}
function fwrite_submit(f)
{
<?php echo $editor_js; // 에디터 사용시 자바스크립트에서 내용을 폼필드로 넣어주며 내용이 입력되었는지 검사함 ?>
var subject = "";
var content = "";
$.ajax({
url: g5_bbs_url+"/ajax.filter.php",
type: "POST",
data: {
"subject": f.wr_subject.value,
"content": f.wr_content.value
},
dataType: "json",
async: false,
cache: false,
success: function(data, textStatus) {
subject = data.subject;
content = data.content;
}
});
if (subject) {
alert("제목에 금지단어('"+subject+"')가 포함되어있습니다");
f.wr_subject.focus();
return false;
}
if (content) {
alert("내용에 금지단어('"+content+"')가 포함되어있습니다");
if (typeof(ed_wr_content) != "undefined")
ed_wr_content.returnFalse();
else
f.wr_content.focus();
return false;
}
if (document.getElementById("char_count")) {
if (char_min > 0 || char_max > 0) {
var cnt = parseInt(check_byte("wr_content", "char_count"));
if (char_min > 0 && char_min > cnt) {
alert("내용은 "+char_min+"글자 이상 쓰셔야 합니다.");
return false;
}
else if (char_max > 0 && char_max < cnt) {
alert("내용은 "+char_max+"글자 이하로 쓰셔야 합니다.");
return false;
}
}
}
<?php echo $captcha_js; // 캡챠 사용시 자바스크립트에서 입력된 캡챠를 검사함 ?>
document.getElementById("btn_submit").disabled = "disabled";
return true;
}
</script>
</section>
<!-- } 게시물 작성/수정 끝 -->
upload.php 입니다.
<?php
?>
$image = imagecreatefrompng($_POST['image']);
//$id = uniqid();
imagealphablending($image, false);
imagesavealpha($image, true);
$bo_table = $_GET['bo_table'];
@mkdir(G5_DATA_PATH.'/file/'.$bo_table, G5_DIR_PERMISSION);
@chmod(G5_DATA_PATH.'/file/'.$bo_table, G5_DIR_PERMISSION);
$save_file = '/data/file/'.$bo_table.'/'.$save_prefix;
imagepng($image, $save_file);
// return image path
echo '{"img": "/data/file/'.$bo_table.'/wPaint-' . $id . '.png"}';
?>
처음 스킨으로 설치했을때는 path가 않맞는지 그림판 메뉴도 안보이고 저장됐다는 문구도 안나타났었는데
일단 이렇게 조정하고 나서는 그림이 저장 되었다는 문구까지는 나오고 ftp 상으로 /data/file/테이블명/파일명
디렉토리까지는 잘 생성이 되는데 그 디렉토리 안에 그렸던 이미지 파일이 저장이 되질 않고 있습니다.
현재 테스트 중인 곳의 주소 입니다.
왜 그림파일이 저장이 되질 않는지 꼭 해결하고 싶습니다.
원본 소스를 올려주신 분글을 다 숙지 했지만 답을 알 수 없기에 질게에 남깁니다.
!-->!-->
답변 3
root 로
가서 .htaccess 파일 열고
PHP_flag allow_url_fopen 1
추가하시면됩니다. 원격으로 파일 업로드 하느느php 설정인데 보안상 off 이라서 안올라가는거입니다
우선 퍼미션 확인해보세요 퍼미션 바뀌면 이미지 저장안됩니다
퍼미션은 707로 디렉토리 생성되게끔 해놔서 FTP확인해 봐도 퍼미션은 제대로 먹히고 있습니다.
경로부분이 미흡해서 그런거 같은데 제대로 안되니 답답할 따름입니다 ㅠ
답변을 작성하시기 전에 로그인 해주세요.