묻고답하기
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
웹상에서 계정으로 파일업로드 불가
2004.02.01 18:49
제로보드 또는 그외 플러그인에서 파일업로드가 안됩니다.
제로보드 또는 그외 플러그인에서 파일업로드가 안됩니다.
제로보드에서 아이콘 및 이름마크 등록하려고 파일설정하고 확인화면 새로고침처럼 화면만 바뀌어버립니다
제가 생각하기로는 아이콘샵에서도 안되고 아바타 플러그인에서도 안되니
계정문제같은데.. 제로보드도 지나쳐갈 수 없어서요
어떤문제일까요..
한마디로 외부에서 계정으로 파일업로드가 안됩니다
포트번호문제인가요 아니면 PHP설정문제인가요 ㅠ_ㅠ
이외에도 웹상에서 계정으로 파일업로드 불가능합니다
아무 오류도 안뜨는데
제로보드와 그 플러그인에서만 그러는데 PHP 문제인가요?
제로보드 또는 그외 플러그인에서 파일업로드가 안됩니다.
제로보드에서 아이콘 및 이름마크 등록하려고 파일설정하고 확인화면 새로고침처럼 화면만 바뀌어버립니다
제가 생각하기로는 아이콘샵에서도 안되고 아바타 플러그인에서도 안되니
계정문제같은데.. 제로보드도 지나쳐갈 수 없어서요
어떤문제일까요..
한마디로 외부에서 계정으로 파일업로드가 안됩니다
포트번호문제인가요 아니면 PHP설정문제인가요 ㅠ_ㅠ
이외에도 웹상에서 계정으로 파일업로드 불가능합니다
아무 오류도 안뜨는데
제로보드와 그 플러그인에서만 그러는데 PHP 문제인가요?
댓글 4
-
앳플군
2004.02.01 22:45
-
강예나
2004.02.02 09:06
제로보드상에서 안올라가는거라면 권한설정을 한번 확인해보세요 -
하얀피
2004.02.02 13:53
웹상에서 전체적으로 파일 업로드가 불가능 하다면 업로드를 막아놓은 것이겠지요.
그러나 어떤 한 애플리케이션에서 그렇다면 그 프로그램 설정 자체의 문제겠죠.. -
로크
2004.02.17 20:54
이거 함 써보세요
ATTransferCtrl 과 Zeroboard 연동 (업로드, 다운로드)
http://www.allting.com
마지막 수정일 : 2003.12.22
1. 환경
1) 이 문서는 제로보드 4.1 pl4 (http://www.nzeo.com), ATTransferCtrl 1,7,0,1(이하 ATC)을 기준으로 작성되었습니다.
2) 제로보드의 설치 위치는 각 계정 루트아래 /bbs 디렉토리에 설치되어 있다고 가정합니다.
3) 제로보드 스킨은 디폴트로 제공되는 스킨을 이용합니다.
2. 주의 사항
1) 반드시 새로운 제로보드 소스와 새 데이터베이스를 생성하여 기존 시스템에 영향이 미치지 않도록 한 후 작업을 하십시요.
2) 제로보드와 ATC 연동시 발생하는 문제에 대해서 어떠한 책임도 지지 않습니다.
3) 각 수정 파일의 위치 및 파일명에 주의하십시요.
4) 각 파일의 라인은 어떠한 수정도 하지 않은 상태의 라인수 입니다.
파일을 수정하면 각 라인은 변경되므로 원본의 라인을 참조하십시요.
3. 테스트
http://www.allting.com의 Gallery 게시판에서 테스트할 수 있습니다.
잘못된 사항이 있으면 게시판 버그 신고에 알려주시기 바랍니다.
업로드
bbs/write_ok.php (187~198line)
ATC가 전송하는 파일 데이터를 제로보드의 변수와 연결합니다.
기존 코드
187: if($HTTP_POST_FILES[file1]) {
188: $file1 = $HTTP_POST_FILES[file1][tmp_name];
189: $file1_name = $HTTP_POST_FILES[file1][name];
190: $file1_size = $HTTP_POST_FILES[file1][size];
191: $file1_type = $HTTP_POST_FILES[file1][type];
192: }
193: if($HTTP_POST_FILES[file2]) {
194: $file2 = $HTTP_POST_FILES[file2][tmp_name];
195: $file2_name = $HTTP_POST_FILES[file2][name];
196: $file2_size = $HTTP_POST_FILES[file2][size];
197: $file2_type = $HTTP_POST_FILES[file2][type];
198: }
수정 코드
if($_FILES['atc_file']['name'][0] && $_FILES['atc_file']['size'][0]>0) {
$file1 = $_FILES['atc_file']['tmp_name'][0];
$file1_name = $_FILES['atc_file']['name'][0];
$file1_size = $_FILES['atc_file']['size'][0];
$file1_type = $_FILES['atc_file']['type'][0];
}
if($_FILES['atc_file']['name'][1] && $_FILES['atc_file']['size'][1]>0) {
$file2 = $_FILES['atc_file']['tmp_name'][1];
$file2_name = $_FILES['atc_file']['name'][1];
$file2_size = $_FILES['atc_file']['size'][1];
$file2_type = $_FILES['atc_file'+ '+ ']['type'][1];
}
bbs/write_ok.php (530line)
파일 전송후 서버의 응답 페이지로 이동시킴.
ATC 에이전트 명 : AllTing
ATC가 페이지를 이동시키기 위해 이동할 페이지 주소를 반환합니다.
이 주소는 업로드가 완료되었을 때 발생하는 OnUploadDone 이벤트의 2번째 인자가 되고,. 이 이벤트가 발생했을 때 스크립트를 이용하여 페이지를 이동시킵니다.
이전 코드
movepage($view_file."?id=$id&page=$page&page_num=$page_num&select_arrange=$select_arrange&desc=$des&sn=$sn&ss=$ss&sc=$sc&keyword=$keyword&no=$no&category=$category");
수정 코드
$browser = getenv("HTTP_USER_AGENT");
if($browser == "AllTing")
echo($view_file."?id=$id&page=$page&page_num=$page_num&select_arrange=$select_arrange&desc=$des&sn=$sn&ss=$ss&sc=$sc&keyword=$keyword&no=$no&category=$category");
else
movepage($view_file."?id=$id&page=$page&page_num=$page_num&select_arrange=$select_arrange&desc=$des&sn=$sn&ss=$ss&sc=$sc&keyword=$keyword&no=$no&category=$category");
bbs/lib.php (558line)
에러발생시 에러코드를 400으로, 에러 메시지를 출력시킴.
이 에러 코드는 ATC의 OnUploadDone 이벤트의 1번째 인자입니다.
200이 아닌 코드가 들어오면 에러로 간주하여 메시지 박스를 보여주게 되어있습니다.
이전 코드
557라인에 삽입
수정 코드
$browser = getenv("HTTP_USER_AGENT");
if($browser == "AllTing"){
header("HTTP/1.0 400 Bad request");
echo($message);
if($connect) @mysql_close($connect);
exit;
}
bbs/script/script_write.php (112line)
ATC 파일 전송에 필요한 스크립트(메소드,이벤트) 추가
이전 코드
112라인에 삽입
수정 코드
<!-- ALLTING : ATTransferCtrl 파일 전송 관련 메소드 및 이벤트 추가 -->
<!-- ATTransferCtrl 전송 에러 발생시 이벤트 -->
<SCRIPT LANGUAGE="JScript" FOR="ATHttpUploadCtrl" EVENT="OnError(ErrorCode, ErrorDesc)">
window.alert(ErrorDesc + ":" + ErrorCode.toString());
</SCRIPT>
<!-- ATTransferCtrl 파일 리스트 변경 알림 이벤트, 홈페이지 참조(http://www.allting.com) -->
<SCRIPT LANGUAGE="JScript" FOR="ATHttpUploadCtrl" EVENT="OnFileListChanged(CurFileCount, MaxFileCount, CurTotalSize, MaxTotalSize)">
</SCRIPT>
<!-- ATTransferCtrl 전송 시작 이벤트 -->
<SCRIPT LANGUAGE="JScript" FOR="ATHttpUploadCtrl" EVENT="OnUploadStart()">
</SCRIPT>
<!-- ATTransferCtrl 전송 완료 이벤트 -->
<SCRIPT LANGUAGE="JScript" FOR="ATHttpUploadCtrl" EVENT="OnUploadDone(StatusCode, Response)">
<!--
// 에러 발생시 200이 아닌 다른 값으로 설정되도록 lib.php의 error함수에서 설정했습니다.
if(StatusCode != 200){
alert(Response);
window.history.back();
}
else
location.href=Response;
-->
</SCRIPT>
<script>
<!--
// 제로보드의 폼 요소를 추가합니다.
function AddFormElement(){
var form = document.write;
var hf = form.ATHttpUploadCtrl.ATHtmlForm;
// 각각의 폼요소를 추가합니다.
for(i=0; i<form.length; i++){
var ele = form.item(i);
// 선택된 것만 업로드 합니다.
// 다중 선택 박스인 경우 별도로 처리해야 합니다.
if((ele.type=="radio"||ele.type=="checkbox")&& ele.status==false)
continue;
if(ele.type==""||ele.value==""||ele.name=="")
continue;
var element = form.ATHttpUploadCtrl.CreateHtmlFormElement(ele.type, ele.name, ele.value);
if(element)
hf.Add(element);
}
}
function AddFiles(){
return document.write.ATHttpUploadCtrl.AddFiles();
}
function RemoveFiles(){
return document.write.ATHttpUploadCtrl.RemoveFiles();
}
function RemoveAll(){
return document.write.ATHttpUploadCtrl.RemoveAll();
}
function FormUpload(){
// 입력을 확인합니다.
if(!check_submit())
return;
// 파일이 선택되지 않았을 때, 브라우저로 전송합니다.
if(!document.write.ATHttpUploadCtrl ||
(document.write.ATHttpUploadCtrl.CurFileCount<=0 &&
document.write.ATHttpUploadCtrl.CurFileSize<=0)){
document.write.submit();
return;
}
AddFormElement();
return document.write.ATHttpUploadCtrl.StartUpload();
}
-->
</script>
업로드와 관련된 스킨파일 수정입니다.
수정하는 내용은 기존 HTML의 <input type=file…>부분을 ATC 컨트롤로 대체하고,
“작성 완료”시 ATC로 전송하는 것입니다.
스킨이 변경되더라도 위와 같은 태그를 찾아 수정하면 됩니다.
bbs/skin/nzeo_ver3/write.php (84~89line)
“글쓰기”일 때 ATC을 삽입함
각 항목은 홈페이지(http://www.allting.com)의예제를 참조하십시요
ATC 새 버전이 나오면 <OBJECT>태그에 새 버전값을 적용하여 업데이트하십시요.
<PARAM NAME="Action" VALUE="http://서버주소/bbs/write_ok.php">
서버 주소를 입력해야 합니다.
스킨 이미지에 맞게 리스트 색상을 설정하십시요.
각 버튼의 이미지는 제작한 후 스킨 폴더에 저장하여야 합니다.
이전 코드
084: <td><img src=<?=$dir?>/t.gif border=0 height=1><br><table cellspacing=0 cellpadding=0 width=100% height=100%><tr><td align=right><img src=<?=$dir?>/w_upload1.gif></td></tr></table></td>
085: <td><input type=file name=file1 <?=size(50)?> maxlength=255 class=zv3_input> <?=$file_name1?></td>
086: </tr>
087: <tr>
088: <td><img src=<?=$dir?>/t.gif border=0 height=1><br><table cellspacing=0 cellpadding=0 width=100% height=100%><tr><td align=right><img src=<?=$dir?>/w_upload2.gif></td></tr></table></td>
089: <td><input type=file name=file2 <?=size(50)?> maxlength=255 class=zv3_input> <?=$file_name2?></td>
수정 코드
<td colspan="2" style=padding:5px><div align="center">
<OBJECT ID="ATHttpUploadCtrl" CLASSID="CLSID:A9A59730-90AE-4452-9460-4B1D2BA7274C"
CODEBASE="http://www.allting.com/components/ATTransferCtrl.cab#version=1,7,0,1" VIEWASTEXT>
<PARAM NAME="_cx" VALUE="15500">
<PARAM NAME="_cy" VALUE="2000">
<PARAM NAME="Method" VALUE="post">
<PARAM NAME="Action" VALUE="http://서버주소/bbs/write_ok.php">
<PARAM NAME="Filter" VALUE="All Files(*.*)|*.*|">
<PARAM NAME="LimitedExt" VALUE="HTM|PHP|ASP|JSP|CGI|PL">
<PARAM NAME="MaxFileCount" VALUE="2">
<PARAM NAME="MaxFileSize" VALUE="<?=$setup[max_upload_size]?>">
<PARAM NAME="MaxTotalSize" VALUE="<?=$setup[max_upload_size]?>">
<PARAM NAME="HeaderColor" VALUE="ECE9D8">
<PARAM NAME="HeaderTextColor" VALUE="000000">
<PARAM NAME="ListColor" VALUE="FFFFFF">
<PARAM NAME="ListTextColor" VALUE="000000">
</OBJECT>
<a href="javascript:AddFiles()" onfocus=blur()><img src=<?=$dir?>/btn_add_files.gif border=0></a>
<a href="javascript:RemoveFiles()" onfocus=blur()><img src=<?=$dir?>/btn_remove_file.gif border=0></a>
<a href="javascript:RemoveAll()" onfocus=blur()><img src=<?=$dir?>/btn_remove_all.gif border=0></a>
</div></td>
bbs/skin/nzeo_ver3/write.php (104line)
“작성완료” 시 ATC가 전송하도록 연결함.
이전 코드
104: <input type=image src=<?=$dir?>/btn_writeok.gif border=0 onfocus=blur() border=0 accesskey="s">
수정 코드
<a href="javascript:FormUpload()" onfocus=blur()><img src=<?=$dir?>/btn_writeok.gif border=0></a>
이상으로 업로드 연동 끝났습니다.
다운로드
bbs/include/list_check.php (130, 137line)
ATC 다운로드와 연동하기 위한 새로운 링크를 만듦
이전 코드
130: $a_file_link1="<a href='download.php?$href$sort&no=$data[no]&filenum=1'>";
137:$a_file_link2="<a href='download.php?$href$sort&no=$data[no]&filenum=2'>";
수정 코드
$a_file_link1="<a href='javascript:openFile(\"atc_download.php?$href$sort&no=$data[no]&filenum=1\")'>";
$a_file_link2="<a href='javascript:openFile(\"atc_download.php?$href$sort&no=$data[no]&filenum=2\")'>";
bbs/script/script_zbLayer.php (72line)
ATC 다운로드 실행을 위한 새로운 창을 생성하는 스크립트
이전 코드
72line에 삽입
수정 코드
<script language="javascript">
<!--
function openFile(file){
window.open(file, "Download", "toolbar=no, location=no, directories=no, width=410, height=410");
}
-->
</script>
bbs/atc_download.php (새로운 파일 생성)
ATC 다운로드 실행
http://www.allting.com에서 atc_download.php를 다운로드하거나, 아래 내용을 복사하여 atc_download.php로 저장하십시요.
ATC 새 버전이 나오면 <OBJECT>태그에 새 버전값을 적용하여 업데이트하십시요.
78, 84line의 “서버주소”를 자신의 서버주소로 변경하십시요.
<?
/*********************************************************************
* 공통 파일 include *********************************************************************/
include "_head.php";
/* ALLTING : 새창으로 열었을때 referer가 없음.
if(!eregi($HTTP_HOST,$HTTP_REFERER)) die();
*/
/*********************************************************************
* 게시판 설정 체크 *********************************************************************/
// 사용권한 체크
if($setup[grant_view]<$member[level]&&!$is_admin) Error("사용권한이 없습니다","login.php?id=$id&page=$page&page_num=$page_num&category=$category&sn=$sn&ss=$ss&sc=$sc&keyword=$keyword&no=$no&file=zboard.php");
// 현재글의 Download 수를 올림;;
mysql_query("update $t_board"."_$id set download".$filenum."=download".$filenum."+1 where no='$no'");
$data=mysql_fetch_array(mysql_query("select * from $t_board"."_$id where no='$no'"));
// 다운로드;;
$filename="file_name".$filenum;
// header("location:$data[$filename]");
if($connect) {
@mysql_close($connect);
unset($connect);
}
?>
<HTML>
<HEAD>
<title>:::다운로드::: - ATTransferCtrl</title>
<meta http-equiv=Content-Type content=text/html; charset=EUC-KR>
<META name="Author" content="AllTing">
<META name="Title" content="HTTP 파일 전송(업로드, 다운로드) ActiveX 컨트롤">
<META name="Keywords" content="업로드 컨트롤, 다운로드 컨트롤, File, Upload, Download, Form based upload, POST, PUT, ActiveX Control, 폼 기반, 무료">
<Meta name="Description" content="ATTransferCtrl은 HTTP기반 파일 업로드, 다운로드를 지원하는 ActiveX 컨트롤, 무료 배포 AllTing(www.allting.com)에서 개발한 ATTransferCtrl은 RFC2616, RFC1867을 준수하여 파일 업로드,다운로드 함 소켓 API와 ATL을 사용하여 제작되었으므로 작고 빠름 무료">
<SCRIPT LANGUAGE="JScript" FOR="ATTransferCtrl" EVENT="OnEndDownload(Success)">
if(Success == false)
window.alert("다운로드에 실패했습니다.\n관리자에게 문의하십시요.");
</SCRIPT>
<SCRIPT LANGUAGE="JScript" FOR="ATTransferCtrl" EVENT="OnError(ErrorCode, ErrorDesc)">
window.alert(ErrorDesc);
</SCRIPT>
<SCRIPT LANGUAGE="JScript">
function checkReferer(){
var host = "<?=$HTTP_HOST?>";
var referer = "";
if(opener)
referer = opener.location.href;
else
return false;
host = host.toLowerCase();
referer = referer.toLowerCase();
if(referer.indexOf(host)==-1)
return false;
return true;
}
function onLoad(){
if(!checkReferer()){
alert("정상적인 방법으로 이용바랍니다");
document.open();
return;
}
<?
if($data[file_name1] == ""){
print("파일이 없습니다");
return;
}else{
$len1 = @filesize($data[file_name1]);
print("var HOs = ATTransferCtrl.ATHttpObjects;\n");
print("var HO1 = ATTransferCtrl.CreateHttpObject(\"http:// 서버주소/bbs/$data[file_name1]\", \"$data[s_file_name1]\", $len1);\n");
print("HOs.Add(HO1);\n");
}
if($data[file_name2] != ""){
$len2 = @filesize($data[file_name2]);
print("var HO2 = ATTransferCtrl.CreateHttpObject(\"http:// 서버주소/bbs/$data[file_name2]\", \"$data[s_file_name2]\", $len2);\n");
print("HOs.Add(HO2);\n");
}
print("ATTransferCtrl.Init();\n");
?>
return;
}
</SCRIPT>
</HEAD>
<BODY onLoad="onLoad();" bgcolor="#ece9d8" topmargin="0" leftmargin="0" oncontextmenu="return false">
<OBJECT id="ATTransferCtrl" classid="CLSID:9A48FC0D-F45B-4C77-9FE4-09ABE7F095F1"
CODEBASE="http://www.allting.com/components/ATTransferCtrl.cab#version=1,7,0,1" VIEWASTEXT>
<PARAM NAME="_cx" VALUE="12000">
<PARAM NAME="_cy" VALUE="11000">
<!-- 저장 폴더 -->
<PARAM NAME="LocalFolder" VALUE="C:\다운로드">
<!-- 자동종료 1:종료, 0:종료하지 않음 -->
<PARAM NAME="AutoExit" VALUE="1">
<!-- 옵션 0:덮어쓰기, 1:이어받기 -->
<PARAM NAME="Option" VALUE="0">
</OBJECT>
</BODY>
</HTML>
수고하셨습니다. 이상으로 업로드, 다운로드 연동이 끝났습니다.
연동에 성공하기를 바랍니다.
.. 확실한 것은 질문하신 내용만으로 알 수 없군요.
=================================================================================================
ATply, atply@atply.nospam.com http://atply.com
* NZEO 쪽지나 MSN, 메일 등을 통한 질문, 요청은 사절합니다. (답변 받으셨으면 운 좋으신겁니다.)
* 도움이 되셨기를 바랍니다.
=================================================================================================