아직미분류2011. 4. 24. 02:31

설치 방법은 http://noexists.tistory.com/193 참고

이 글은 정리되지 않은 글이다. (그렇다고 다른 글이 특별히 정리된 건 아니지만...)

파일로도 제출 받는 기능

submitpage.php의 form에 enctype="multipart/form-data" 넣는다.
<script type="text/javascript">
function tg(bool) {
document.getElementById('source_file').disabled = !bool;
document.getElementById('source').disabled = bool;
}                       
</script>               
<hr />
<input type="radio" name="source_sel" value="file" checked="true" onclick="tg(true)" /> Use a file <br />
<input type="hidden" name="MAX_FILE_SIZE" value="65536" />
<input type="file" id="source_file" name="source_file" /> <br />
<hr />
<input type="radio" name="source_sel" value="textarea" onclick="tg(false)" /> Use the textarea <br />
<textarea cols=80 rows=20 id="source" name="source" disabled="disabled"></textarea><br>
if ($_POST['source_sel']=='file') {
        $uploaddir = '/var/www/uploads/';
        $uploadfile = $uploaddir . $user_id . "_" . basename($_FILES['source_file']['name']);
        if (move_uploaded_file($_FILES['source_file']['tmp_name'], $uploadfile)) {
                $source = file_get_contents($uploadfile);
        //      unlink($uploadfile);
        } else {
                require_once("oj-header.php");
                echo "Upload error";
                require_once("oj-footer.php");
                exit(0);
        }
} else {
        $source=$_POST['source'];
        if(get_magic_quotes_gpc())
                $source=stripslashes($source);
}
/var/www/uploads 디렉토리도 만들어야한다. chown www-data도 해주고

소스 코드 다운로드 기능
downloadsource.php을 만든다.
showsource.php를 뜯어 고침.
하이라이트 기능 제거, htmlspecialchars 제거.
불필요한 것 최대한 제거.
헤더를 고쳐서 c 파일로 다운로드 되게 만들기.
줄바꿈 문자 수정.
소스코드 보는 링크 부분에 링크 추가.

status.php, problemstatus.php
기본적으로 자신의 결과만 보이게 함. (남의 결과를 보는 것을 막는 것은 아님)
source_browser는 다 보는 것이 기본
$user_id="";
if (isset($_GET['user_id'])){
        $user_id=trim($_GET['user_id']);                                                                              
        if (is_valid_user_name($user_id) && $user_id!=""){
                $sql=$sql."AND `user_id`='".$user_id."' ";                                                            
                if ($str2!="") $str2=$str2."&";                                                                       
                $str2=$str2."user_id=".$user_id;                                                                      
        }else $user_id="";
} else {                                                                                                              
        if(! isset($_SESSION['source_browser'])) {                                                                    
                $user_id = $_SESSION['user_id'];                                                                      
                if (is_valid_user_name($user_id) && $user_id!=""){                                                    
                        $sql=$sql."AND `user_id`='".$user_id."' ";                                                    
                        if ($str2!="") $str2=$str2."&";                                                               
                        $str2=$str2."user_id=".$user_id;                                                              
                }else $user_id="";
        }       
}

showsource.php
관리자에게는 제출 시간과 IP 정보가 보이게 바꿈. 카피 잡을 때 유용

if (isset($_SESSION['administrator'])) {                                                          
	echo "\tIP: $row->ip\n";
	echo "\tSubmission Time: $row->in_date\n";                                                            
}


Posted by asdfzxcv