당신은 주제를 찾고 있습니까 “php 웹 게임 – [NO.61] 파천일검 18년간 한 게임에 머문 72세 할머니 『돈벼락』 – 파천일검TMI,게임인물탐색,KBS안녕하세요“? 다음 카테고리의 웹사이트 you.tfvp.org 에서 귀하의 모든 질문에 답변해 드립니다: you.tfvp.org/blog. 바로 아래에서 답을 찾을 수 있습니다. 작성자 무작전 이(가) 작성한 기사에는 조회수 1,134,276회 및 좋아요 5,170개 개의 좋아요가 있습니다.
php 웹 게임 주제에 대한 동영상 보기
여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!
d여기에서 [NO.61] 파천일검 18년간 한 게임에 머문 72세 할머니 『돈벼락』 – 파천일검TMI,게임인물탐색,KBS안녕하세요 – php 웹 게임 주제에 대한 세부정보를 참조하세요
✅’안녕하세요’ 풀버전 보실분은 이쪽으로^^!✅
출처: KSB Entertain
https://youtu.be/pDM8aH97oS8
🎈그시절 소중한 추억을 인터뷰해주실 레전드 유저의 제보가 필요합니다
💁♂️제보 및 문의메일 [email protected] / kakao: gawos (작전)
────────────────────────────
🎬 영상편집 : 무작전 [ Premiere Pro / Photoshop / After Effects ]🎤 나래이션 : 무작전 [ 슈어 MV7 ]💌 자료수집 : 무작전
────────────────────────────
🎼BGM 사용출처
────────────────────────────
🔸채널소개🔸
1. 무작전은 1인채널 입니다
2. 그시절 추억을 회상하고자 영상을 제작합니다
3. 시청자의 재미를 위해 픽션이 있을수있습니다.
4. 정보의 순서나 틀린 정보의 내용이 있을수있습니다
5. 추가정보는 댓글로 남겨주세요🙌
6. 진지함 보단 가벼운 마음으로 그시절을 즐겨주세요 🤗
7. 표현은 자유지만 적당선의 악플로 달아주세요!(언어폭력도 폭력입니다😰)
8. 주변 지인중에 그당시 유명인이 있다면 소개시켜주세요!
9. 무작전의 컨셉은 옛날 게임잡지의 느낌으로 다가갈예정입니다💪
10. 자신이 추천하는 인물이 안나왔을땐 조금더 기다려주세요🙇♂️
────────────────────────────
항상 영상을 봐주시는 분들에게 감사드립니다
점점 발전할수있는 영상으로 찾아뵙도록 하겠습니다🙇♂️
────────────────────────────
php 웹 게임 주제에 대한 자세한 내용은 여기를 참조하세요.
ajax, php와 mysql을 이용해 직접만든 웹게임 – Ratatui Reviews
요즘 포스팅이 뜸한 이유는 바로 이것 때문이다. php, ajax, mysql을 이용해 간단한 게임을 만드는데 재미가 붙어서 끝까지 작업을 완료하게 되었다.
Source: ratatui.tistory.com
Date Published: 9/24/2022
View: 8857
2D 세계의 용자 0.1Beta
본 웹게임은 PHP+Mysql로 이루어진 PHP웹게임입니다. CGI웹게임과는 달라서 거히 모든 호스팅서버에 설치가능합니다.
Source: dreamboard.tistory.com
Date Published: 9/13/2021
View: 3107
PHP+MySQL을 이용한 웹게임 개발 – Narr’s THE WORLD
이 문서는 PHP + MySQL로 웹게임 제작시 고려해야할 기술적인 문제에 … 의 사용자가 게임에 접근하게 되면 database의 쿼리나 PHP코드 실행 순서 …
Source: narr.tistory.com
Date Published: 7/16/2022
View: 4498
[자바스크립트/PHP/MYSQL] Hello World 웹 게임(두더지 잡기)
게임은 javascript를 사용해서 만들었고, 그림은 GIMP를 사용하여 직접 한 도트 한 도트 일일이 찍었습니다. 계정및 점수저장은 PHP, MYSQL를 사용 …
Source: blog.naver.com
Date Published: 12/3/2021
View: 4094
PHP+MySQL을 이용한 웹게임 개발
PHP+MySQL을 이용한 웹게임 개발. by jacob … Posted in: 프로그래밍 ⋅ Tagged: game, mysql, php, 제작. Comments are closed.
Source: jacob-yo.net
Date Published: 6/25/2021
View: 7812
게임개발자 입장에서 본 PHP : 클리앙
게임엔진을 처음 배울때 존카멕이 만든 퀘이크2 공개 소스를 가지고서 … 현재 모바일 게임업계에서 웹개발 언어로는 PHP가 구인이 가장 많습니다.
Source: www.clien.net
Date Published: 2/25/2021
View: 9870
이런 웹게임을 만드려면 뭘 배워야할까요? – XETOWN
(사진은 chuing.net 입니다.) 사진과 같은 웹게임을 xe에서 구현하고 싶은 꿈도 큰 초보자입니다. 아직 php나 html 같이 프로그래밍 쪽은 문외한 …
Source: xetown.com
Date Published: 5/1/2021
View: 7573
웹해킹 4주차 [ PHP 학습 & 워 게임~]
웹해킹 4주차 [ PHP 학습 & 워 게임~]. caputdraconis 2020. 4. 16. 20:18. 이전에 ‘지옥방 멘토링’에서 했던 PHP 학습. https://caputdraconis.tistory.com/10.
Source: caputdraconis.tistory.com
Date Published: 6/2/2021
View: 9610
주제와 관련된 이미지 php 웹 게임
주제와 관련된 더 많은 사진을 참조하십시오 [NO.61] 파천일검 18년간 한 게임에 머문 72세 할머니 『돈벼락』 – 파천일검TMI,게임인물탐색,KBS안녕하세요. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.
주제에 대한 기사 평가 php 웹 게임
- Author: 무작전
- Views: 조회수 1,134,276회
- Likes: 좋아요 5,170개
- Date Published: 2021. 9. 14.
- Video Url link: https://www.youtube.com/watch?v=uvYpfQIM_CU
Dream Baord :: 2D 세계의 용자 0.1Beta
본 웹게임은 PHP+Mysql로 이루어진 PHP웹게임입니다.
CGI웹게임과는 달라서 거히 모든 호스팅서버에 설치가능합니다.
하지만 무료호스팅서버에 설치했다가 트래픽이 과도하게 초과해서 짤릴 수있으니 조심하세요!
설치가 번거로워서 싫다?
그러면 현재 운영중인 2D 세계의 용자를 플레이하세요!
아래는 압축파일에 동봉된 README.TXT 입니다.
## 본 텍스트 파일을 삭제하시지 마세요! ##
## 본 웹게임은 2차배포를 허락하지 않습니다. ##
## 배포시 웹게임소스를 업로드하시지 마시고 제 블로그로 링크거는 것은 괜찮습니다. ##
안녕하세요! 구름입니다^^
현재 Dragon Knight(2D세계의 용자)의 번역 및 기능 개조를 하고 있습니다.
본 웹게임은 PHP+Mysql 로 이뤄진 웹게임으로 해당 분야에 조금 아는 분만 설치하시기 바랍니다.
(질문하셔도 답변 못해드린단 소리입니다…ㅇㅅㅇ;;)
음.. 본 웹게임은 현재 제가 운영하고 있는 웹게임으로 원래는 Dragon Knight 라는 판타지 웹게임이지만,
제가 번역 및 개조를 하면서 2D세계의 용자로 명명햇습니다..
뭐 이름을 어떻게 바꾸든 상관은 없습니다ㅎㅎ
그저 자신의 서버에 맡게 바꿔주세요!
업데이트 로그 폴더로 가시면 본 웹게임의 예전 업데이트 로그를 읽으실 수 있습니다.
더욱 자세한 기능소개는 블로그에서 보실 수 있습니다.
### v0.1 Beta (2010.12.29) ###
### http://dreamboard.wo.tc/ << 제작자 블로그입니다. 🙂 *기능 추가 -몬스터 이미지 출력 -babblebox 한글 출력 가능하게 수정 *한글화 -admin.php 한글화 -explore.php 한글화 -users.php 한글화 *templates 한글화 -admin.php 한글화 -fight.php 한글화 -leftnav.php 한글화 -login.php 한글화 -lostpassword.php 한글화 -primary.php 한글화 -register.php 한글화 -rightnav.php 한글화 -showchar.php 한글화 -towns.php 한글화 -verify.php 한글화 ↓ 다운로드 ↓ 현재 최신버전이 나왔습니다.
PHP+MySQL을 이용한 웹게임 개발
http://115.68.7.121/mediawiki/index.php/Engineering_php%2Bmysql_web_games
이 문서는 PHP + MySQL로 웹게임 제작시 고려해야할 기술적인 문제에 대해 정리한 것이다.
[ edit ] Concurrency control여러 명이 서버에 여러명이 접근하게 되면 웹게임이든 온라인 게임이든 동시성(concurreny)을 고려하고 제작을 해야한다. 동시에 여러명의 사용자가 게임에 접근하게 되면 database의 쿼리나 PHP코드 실행 순서 동기화가 깨지면서개발자가 생각하지 못한 식으로 갱신이 이루어지게 될 수 있다.
예를 들어 PHP 스크립트를 통해 다음과 같은 MySQL쿼리문 두개를 요청하였다고 하자. 다음 쿼리는 uid가 1인 플레이어가 가진 돈을 가져온후 100증가시키는 일을 하고 있다.
$result = mysql_query ( “SELECT money FROM player WHERE uid=1” ) ; $row = mysql_fetch_row ( $result ) ; mysql_query ( “UPDATE SET money= $row[0] + 100 FROM player WHERE uid=1” ) ;
위와 같은 코드가 PHP 스크립트를 실행하는 프로세스 여러개에서 실행된다면 무슨 일이 일어날까? 위 PHP 코드를 두번 실행하면 돈이 200상승 한다고 생각하는게 자연스럽다. 하지만 다음과 같은 상황이 발생하면 돈은 100만 상승하게 된다. Process #1,#2 모두 같은 값의 돈의 크기에 100을 더해주는 상황이 발생하는 것이다.
1. process #1이 SELECT쿼리 요청
2. process #2가 SELETT쿼리 요청
3. process #1이 UPDATE쿼리 요청
4. process #2가 UPDATE쿼리 요청
이와 같은 동시 접근에 따른 순서가 보장되지 않는 문제는 MySQL의 storage engine을 MyISAM을 쓴다면 table lock으로, InnoDB라면 row level lock을 통해 해결할 수 있다. InnDB라면 위의 두개의 쿼리를 하나의 Transaction으로 묶어주고 SELECT … FOR UPDATE문으로 SELECT 쿼리를 변경해준다.
mysql_query ( “START TRANSACTION” ) ; $result = mysql_query ( “SELECT money FROM player WHERE uid=1 FOR UPDATE” ) ; $row = mysql_fetch_row ( $result ) ; mysql_query ( “UPDATE SET money= $row[0] + 100 FROM player WHERE uid=1” ) ; mysql_query ( “COMMIT” ) ;
위와같이 수정하게 되면 SELECT FOR UPDATE에서 접근된 row들은 다른 클라이언트에서 정보를 변경하지 못하게 lock이 걸리게 되어 쿼리 순서 직렬화를 보장받을 수 있는 것이다. 그런데 MySQL의 lock 기법은 transaction isolation level, storage engine에 따라 동작 방법이 틀려진다. 내부에서 일어나는 복잡한 동기화 구현방식을 이해하지 못하게 되면 문제 발생시 해결이 어려워질 수 있다. 게다가 row level lock은 table lock에 비해 빠르게 동작하지만 dead lock의 발생 위험을 지니고 있다. MySQL의 복잡한 row level locking 동작방식을 신경쓰지 않고 다른 방법으로 쿼리 순서 동기화를 처리할 수 있는 방법이 없을까? 순서 동기화 문제는 MySQL만의 이슈가 아니다. 다른 시스템을 이용하여 동시성 문제를 해결할 수도 있다는 말이다. 그럼 웹게임 제작시 사용될 수 잇는 여러가지 동기화 기법에 대해 알아보자.
platform solution Game server (one thread) Not Required Game server (multi thread) Critical Section WebServer + PHP Semaphore, Custom lock (ex)memcached lock) MySQL table lock, row level lock, 하나의 쿼리문으로 합쳐서 요청, procedure로 요청
제일 먼저 보통 온라인 게임에서 쓰이는 socket방식의 game server부터 알아보자. 해당 서버가 원스레드라면 동기화 문제는 일어나지 않으므로 해결할 필요가 없다. 만약 멀티스레드라면 critical section과 같은 동기화 객체를 이용하여 실행 순서를 보장하면 된다.
PHP는 코드 실행 동기화를 위해 Semaphore 함수를 제공한다. web serve가 여러개의 PHP프로세스를 실행하더라도 Sempaphore객체가 순서를 보장해주기 때문에 동시성 문제가 일어나지 않지만 Semaphore 함수는 해당 서버 머신에서만 동기화를 보장하기 때문에 확장성이 떨어진다. 여러 머신간의 코드 실행 동기화는 Memcached를 이용한 lock기법을 사용할 수 있다(이는 PHP가 여러 머신간의 세션 공유를 위해 Memcached에 세션정보를 저장하고 있는 방식과 유사한 개념이다)
MySQL은 쿼리의 실행 동기화를 위해 transaction을 통한 lock 기법을 사용한다.
정리하면 웹게임 제작시에 추천하는 쿼리 순서 동기화 방법은 다음과 같다.
1. Gamer server의 critical section을 통한 쿼리 동기화
2. MySQL의 Transaciotn을 통한 lock 기법을 통한 쿼리 동기화(InnoDB)
3. Memcached로 구현된 custom lock을 구현해 쿼리 동기화
Critical section을 통해 특정 코드 영역을 동기화 하면 쿼리문 요청 순서도 같이 동기화 된다. 타 머신간의 쿼리 동기화가 불가능하므로 확장성면에서는 불리하다. MySQL의 transction을 통한 lock은 숙련자가 사용하면 동시성 보장이 되면서 성능도 우수하게 만들 수 있다. 하지만 isolation level, transacion, storage engine에 따라 같은 쿼리문도 lock의 동작이 틀려져 transaction이 적은 웹게임에서는 과한 해결방법이 될 수 있다.
과거 바이시티 개발시에 MySQL의 쿼리 순서 동기화를 위해 특정 키를 memcached에 저장하고, 처리가 끝나면 키를 삭제해서 한번에 명령을 하나만 처리하는 식으로 동시성문제를 해결했다. lock되어 있는 상태에서 다른 유저가 해당 처리를 요청하면 “처리에 실패했습니다” 라는 메시지를 발생시키고 유저의 요청처리를 취소했기 때문에 매끄럽지 못했다. 이를 해결하기 위해서는 php의 while문을 이용하여 spin-lock형태로 memcached를 이용하면 된다. lock wait time을 너무 길게 잡으면 웹 브라우저가 웹서버 프로세스를 계속 물고 있게 되어 다른 유저들이 접속하지 못하는 상황이 발생할 있는 점은 주의해서 만들어야 한다.
[ edit ] Development design웹게임 개발을 위한 시스템 구성은 다음 세가지가 대표적이다.
1. Web server and game server(one thread)
2. Web server and game server(multi thread)
3. Only web server
첫번째 구성은 Web server는 게임을 보여주는 역할을 하고 게임 로직처리는 게임서버에서 수행하는 모델. 원스레드로 서버 하나로 유저 요청을 모두 처리하게 되면 MySQL 쿼리에 대한 동시성 문제가 일어 나지 않는다. 이 모델은 서버는 한가지 처리밖에 진행 못하기 때문에 조금이라도 처리가 길어지는 요청이 들어오게 되면 다른 요청을 처리하지 못하고 지연되는 현상이 일어나게 된다. 이런 병목현상이 일어나게 되면 필경 원스레드 서버를 자원갱신 서버, 유저요청처리 서버등의 역할별로 분리하게 될 것이다. 그렇게 되면 다시 외부 기능을 이용하여 동시성 문제를 해결해야 한다.
두번째 구성은 Web server는 게임을 보여주는 역할을 하고 게임 로직처리는 게임서버에서 수행하는 모델. Game server내에서 critical secion을 사용하여 외부 기능을 이용하지 않고 동기화 수행이 가능. Game server code 순서가 보장되면 MySQL 쿼리의문의 순서도 동기화 된다. 멀티스레드 방식이기 때문에 1번에서 제기 되었던 성능문제가 없다. 이 모델 역시 하나의 월드에 대해 게임서버를 여러대 운영할 경우 외부 기능을 이용하여 동시성 문제를 해결해야 한다.
세번째 구성은 Web server가 게임을 보여주는 역할과 로직처리를 모두 수행하는 모델. Web server가 설치된 머신에서는 PHP의 Semaphore를 이용하여 코드를 직렬화 할 수 있지만 여러 머신간의 동시성 문제는 외부 기능을 이용하여 동기화 해야 한다.
부족전쟁류 웹게임이라면 첫번째 모델인 Web server and game server(one thread)를 이용하는 것이 적절하겠다. game server를 운영하게 되면 memory에 게임상태를 저장할 수 있어 좀더 유연한 컨텐츠 기획이 가능해진다. 그리고 원스레드 서버이기 때문에 스레드를 썻을때 생기는 여러가지 개발 이슈에서 자유롭게 된다. 역할별로 분리하여 분산처리하면 확장성도 가능해지게 된다. 하지만 점점 더 웹게임은 온라인 게임과 같은 게임 콘텐츠를 원할 것이므로 일반적인 온라인 게임의 시스템 구성방식인 두번째 모델 사용이 많아 질 것으로 예상된다.
[ edit ] Performance웹게임 성능을 좌우하는 요소는 무엇인가? 스크립트만의 처리는 빠르지만 문제는 다른 모듈혹은 서버간의 통신속도이다.( MySQL, Memcached) 특히 다음 요소에 주의를 기울여야 한다.
페이지당 쿼리 개수 10개 이하로 유지
최대한 이미지 개수 줄이기(이미지 하나하나가 HTTP 요청이다). 캐싱이 된다고 하지만 갑자기 최초방자가 몰리는 상황이라면?
CDN으로 분리하자
필요한 모듈만 include한다. include명령어 자체는 eaccelerator로 캐싱하면 i/o부하는 일어나지 않으므로 큰 문제는 아니다. 하지만 스크립트 파싱도 의외로 속도가 들어갈 수 있다.
성능을 체크하기 위해서 JMeter등의 툴을 사용한다.
초당 몇 개의 요청을 처리할 수 있는가
많은 수의 js파일이 있으면 성능저하가 일어나는지도 확인이 필요한다. Nginx+php_cgi와 같이 여러클라이언트를 하나의 프로세스에서 처리하는 형태를 가진 웹서버에서 웹스크립트 에러는 hang을 일으켜 성능을 저하시키는 원인이 된다. 바이시티 테스트시에 Nginx의 경우 hang으로 인한 BadGateway 에러등을 내보내기도 했었다. Apache와 같이 클라이언트당 하나의 프로세스를 실행시키면 그 프로세스만 문제가 생기지만 nginx의 경우 여러 클라이언트를 하나의 프로세스에서 처리하기 때문에 오류가 발생하면 잠시 동안 프로세스가 제일을 처리 못하는 것으로 보인다.
siege,ab등의 툴을 이용해 초당 Transaction수를 파악하도록 한다.( Redorf rasmus의 문서참고: http://hardworker.tistory.com/102 ,http://talks.php.net/show/flux) yslow를 이용해서 페이지를 분석한다.
[ edit ] Web server웹서버는 nginx 사용(Nginx + fastcgi)한다. apache같은 웹서버보다 사용자 폭주시 안정적으로 버텨준다
[ edit ] Database하드웨어 개선을 통해 6000쿼리까지도 처리가능하다고 하지만 기본적으로 초당 3000이상 요청하면 안된다고 생각해야 한다. 웹게임의 성능은 Database최적화에 달려 있다고 해도 과언이 아닌다. 이때 Web server와 database사이에 game server나 memcached등의 미들웨어를 통해 database 접근을 줄여서 빠르게 처리할 수도 있다. GDC강연을 보면 FarmVill도 MySQL의 바로 접근하지 않고 memcached pool을 통해 성능 개선을 한것을 알 수 있다.
데이타베이스 설계시 중요한 것은 테이블 설계를 적절히 하는 것이다. 너무 많게 테이블을 나눠 구성하면 Transaction 코드가 많아질 수밖에 없다. 그러면 실행 순서 동기화 문제가 발생하면 lock을 통해 동기화 해야 되므로 어려움이 예상되기 때문이다. 기본적으로 웹게임이든 온라인 게임이든 단일문의 짧은 쿼리로 데이타 갱신을 처리하고 필요한 부분에만 조심스럽게 transaction lock을 걸어주는 것이 성능과 안정성 면에서 모두 좋은 전략이다.
[ edit ] Deadlock데드락은 트랙잭션이 무한히 기다리는 교착상태에 빠진것을 말한다. 혹은 lock wait time이 너무 길어져서 설정된 시간을 넘겨서 transaction이 실패나는 경우에도 데드락이라고 한다
예를 들면 다음과 같은 쿼리가 호출되는 상황에서는 dead lock이 발생한다.
1. client #1> BEGIN; SELECT name FROM table LOCK IN SHADE MODE;
2. client #2> BEGIN; SELECT name FROM table LOCK IN SHADE MODE;
3. client #1> UPDATE SET name= “test1”table; (lock wait .. )
4. client #2> UPDATE SET name= “test2”table; (lock wait .. dead lock!)
5. client #1> COMMIT;
1번과 2번 쿼리가 UPDATE를 제한하는 읽기락의 종류인 LOCK IN SHADE MODE를 사용하였다. 하지만 같은 row을 두고 두개의 클라이언트 모두 lock wait상황이 빠졌기 때문에 어느 클라이언트도 COMMIT을 통해 트랜잭션을 끝낼수가 없다. 그래서 client #2에서 dead lock이란 에러가 뜨고 트랜잭션이 종료된다. 그외 lockwait timeout이 있는데 이는 다른 트랜잭션에 의한 락이 오랫동안 풀리지않는 경우 발생하는 에러이다. 보통 10초가량 세팅해 놓는다. 이것도 dead lock상황의 하나라고 볼수 있다. 게임에서는 추천하지 않지만 일반 웹어플리케이션의 경우 dead lock 상황이 나오면 다시 요청해주는 코드를 추가해주는 것도 고려할만 한다.
게임 개발시 transaction 쿼리는 많지 않다. 많이 사용하는 것 자체가 문제지 많은 transaction에 의한 dead lock을 해결하고자 lock 코드를 변경하거나 외부 custom lock객체등을 이용해 쿼리 순서를 동기화 하는 것은 일을 더 크게 만드는 것이다. 테이블 구조와 게임 기획 변경을 통해 단일 쿼리로 처리할 수 있게 만들어 lock걸리는 상황이 아예 사라지도록 변경하는 것이 옳은 전략이다
[ edit ] Authentication쿠키인증은 빠르다. 세션인증은 상대적으로 느리다.(memcached를 이용해서 저장하여 최적화 가능) 쿠키인증이든 세션인증이든 결국 쿠키를 사용하기 때문에 XSS를 통해 쿠키를 훔쳐오는게 가능해진다. 로그인시마다 유효키를 발급받아 셰션에 저장하고 이를 모든 요청에 넣어서 보내주는 방식이 가장 무난할 것으로 보인다.
[ edit ] Security웹게임의 보안이슈는 다음과 같다.
입력값는 모두 XSS, SQL Injection을 대비해서체크
Parameter Query방식을 통해 Injection방어와 효율성 개선 -> 메모리사용률도 줄어든다.
URL입력에 ../을 통해 상위 path로 이동이 가능한 경우도 있따. 이를 통해 /etc/passwd파일을 열어 볼 수 있는 경우도 있었다
사용안하는 port는 블로킹 처리
DDOS 방어는? Nginx용 모듈을 찾아보자
Nginx는 기본적으로 많은요청에 대해 잘 방어한다. 처리 못하는 유저가 발생한지 아파치처럼 완전히 멈추지는 않는다
하드웨어적으로 상위에서 방어해줘야 한다. DDOS는 어쩔수가 없다. 특정 아이피차단 정도가 할 수 있는 방어의 전부
로그인시 POST 전송 패스워드 암호화 . 네이버 인증시스템을 보면 공개키암호화 시스템이 도입되어 있는 것을 볼 수 있다. 즉 자바스크립트를 딴에서 아이디/암호 문자열 자체를 공개키로 암호화해서 POST전송에 들어가는 내용까지 보호해준다. 이 처리까지 수행하기에는 현실적인 어려움이 따른다. 네트워크 스누핑에만 노출안된다면 별 문제가 없을 것으로 본다.
그외 BurpSuite등의 툴로 취약성 파악이 필수다. rasmuas의 security관련 문서도 읽어보자( http://talks.php.net/show/flux )
[자바스크립트/PHP/MYSQL] Hello World 웹 게임(두더지 잡기)
처음에는 sprite sheet를 간단히 연습만 하려고 만든 예제였는데.. 계속 이것 저것 추가하다보니 일단은 RPG같은것이 되었지만 RPG를 만들려면 스토리가 있어야 되기 때문에.. 대충 NPC하나랑 이것저것 넣어보다가.. 두더지 잡기 게임을 넣어서 결국 RPG같아 보이지만 사실은 두더지 잡기 게임이 되었습니다.
게임은 javascript를 사용해서 만들었고, 그림은 GIMP를 사용하여 직접 한 도트 한 도트 일일이 찍었습니다.
계정및 점수저장은 PHP, MYSQL를 사용하였습니다.
두더지 잡기 게임은 마우스로 하면 너무 힘들고, 폰이나 타블렛에서 터치로 하는 것이 고득점 내기에 좋습니다.
두더지 잡기 게임 외에 다른 게임도 추가하고 싶긴 한데요… 다음주부터는 드디어 학원을 다니기 때문에 시간이 있을려나 모르겠습니다.
게임개발자 입장에서 본 PHP : 클리앙
아래에 풀스택 개발자가 본 PHP라는 글이 있어서 저도 한번 써볼까 합니다.
게임엔진을 처음 배울때 존카멕이 만든 퀘이크2 공개 소스를 가지고서 공부했습니다.
당시 대세인 D3D와 C++/COM을 놔두고 존카멕은 왜 C로 만들었냐, OPENGL로 만들었냐?
아무도 욕하는 사람이 없었습니다.
그사람의 실력이 대단하고, 만든 결과물이 성공적이었기 때문입니다.
그리고 그 누구하나 D3D API에 비해서 OPENGL API는 쓰레기라는 사람이 없습니다.
단지 윈도우 환경에서 D3D가 좀더 편하고 나은 관리를 지원해 주기 때문이었습니다.
C# 언어에 대해서도 좋은 언어이긴 하나 아직은 성능이 부족하다 라면서 항상 팩트를 제시합니다.
그런데 유독 이상하게 웹개발언어 만큼은 언어의 대전이 심각한거 같더라구요.
PHP는 누가봐도 성공적인 언어입니다. 지금 현재는 아닐지 모르겠지만 ASP, JSP에 비해서 성능도 뛰어나고 관리 비용도 절감되고
현재 모바일 게임업계에서 웹개발 언어로는 PHP가 구인이 가장 많습니다.
이건 규모가 작고 빠르고 인력이나 구축 비용이 절감되기 때문에 그렇습니다.
그렇지만 JSP는 대규모 웹개발시에 유리한건 맞습니다만 PHP가 그렇게 못하는 언어는 아닙니다.
이곳에서 혐오하는 사이트지만 일베저장소라는 사이트는 2CPU에서도 인정받는 제로보드XE를 튜닝을 잘해서 포탈사이트를 제외하고는 정말 대용량 헤비트래픽 운영으로 칭찬받는 사이트입니다.
그리고 페이스북도 HACK으로 컴파일되긴 했지만 시초는 PHP이고, 제로보드XE나 워드프레스등도 PHP입니다.
거지같은 소스를 유지보수 하기 싫으신 개발자님들의 고초는 알겠으나 돈이나오고 잘돌아가는 소스가 최고의 소스입니다.
그리고 그러한 결과물을 내었다면 퀘이크 소스처럼 페이스북, 워드프레스 등등 인정을 해주어야 하는 거구요.
PHP언어의 타입 캐스팅 문제는 그당시 컴공전공생이라면 누구나 배웠을 C언어를 기반으로 타입캐스팅해서 당연한 것으로 받아들여지는 거고, 최근의 동적 타입언어는 JAVA와 C#을 제외하면 어느 것이나 모호함을 가지고 있습니다.
저도 JSP로 JEUS와 웹투비에서 실무를 경험해 보았으나 여러가지 저에게는 불편한 언어였다고 개인적으로 생각합니다. JSP를 처음으로 하신분들은 당연할수 있지만요.
여러가지 내장된 문제점은 방법론이나 테스트를 잘하는 것이 옳은 방법이라 생각 됩니다.
그리고 차세대 등 신규를 할때는 적절한 언어를 선택하면 되겠지만, PHP로 된 AS-IS소스들도 그당시의 나름의 기준이 있어서 선택하셨다고 생각하시고 즐겁게 일하셨으면 좋겠습니다.
추가:
개인적으로 PHP가 가장 좋은점은 에러가 있을때 해당 PHP파일만 다운되며, PHP파일의 컴파일 없이도 hotswap이 되는 것이 가장 맘에 듭니다. 빠른 게임 운영환경에서 그보다 더 좋은건 없더라구요.
JAVA는 Ant 컴파일 거쳐서 급할때는 class 파일 바꿔치기도 해야되는데 바로바로 안될 때가 있었어요.
이런 웹게임을 만드려면 뭘 배워야할까요?
(사진은 chuing.net 입니다.)
사진과 같은 웹게임을 xe에서 구현하고 싶은 꿈도 큰 초보자입니다.
아직 php나 html 같이 프로그래밍 쪽은 문외한입니다.
xe도 한달차고, 할 줄 아는 거라곤 css 파일 열어서 색깔이나 크기 바꾸는 것밖에 못합니다(…)
저런 기능을 직접 제작하려면 어떤 쪽을 어떻게 공부해야 하는지조차 몰라서 질문드립니다!
웹해킹 4주차 [ PHP 학습 & 워 게임~]
이전에 ‘지옥방 멘토링’에서 했던 PHP 학습
https://caputdraconis.tistory.com/10
지옥방 멘토링을 할때 미리 해놓은 덕분에 MAMP 가 노트북에 깔려있었기에 설치하기 강의는 건너뛸 수 있었다. 이런 소소한거에 행복을 느낀다,,ㅎㅎ
이 위치에 있어야 localhost에서 열 수 있어요오!!
위와 같이 작성된 php파일을 브라우저로 열면 어떻게 출력될까??
php 태그 안에 있지 않은 echo는 그냥 그대로 출력이 되고 php 태그 안에 있는 echo는 Hello World만 출력된걸 볼 수 있다.
이를 브라우저의 소스코드로 보면
는 Hello World로 바뀌어 들어간걸 볼 수 있따!! 개쩐다잉
var_dump(원하는 데이터형)은 입력한 수의 데이터형과 값을 아래처럼 보여준다.
6은 정수형이므로 int, 6.1은 실수형이므로 float이 출력된걸 볼 수 있다.
위의 코드는 그냥 1234와 “1234”를 비교할 수 있다.
1234는 정수이고, “1234”는 string, 즉 문자열로 인식되는 것을 볼 수 있다.
문자열은 점 . 으로 이어진다. 위의 코드를 실행하면 helloworld가 출력이 된당.
변수
변수는 앞에 달러표시를 붙여 $a와 같이 사용한다. $a에 1과 2를 차례대로 대입시켰다. 그 변수는 숫자처럼 사용할 수 있다.(문자열도 가능)
echo와 print는 비슷한 기능을 한당.
상수 변하지 않는 값;
위의 코드를 실행하면 ‘Title’이라는 이름에 ‘PHP Tutorial’이라는 값이 상수로 저장된다. 이 상태에서 echo Title을 하면 PHP Tutorial이 실행되는걸 알 수 있다. 이후에 Title에 다른 값인 ‘CSS Tutorial’을 대입하려하자 Constant 뭐시기 하면서 오류가 뜨는걸 볼 수 있다.
$a에는 “subject”가 저장되어있다. 그 밑에서 $$a??????이게 무엇일까
$a 는 subject다. 그럼 $$a는 $subject가 아니겠는가!!?? 그렇당ㅎㅎ
$a에 들어오는 값으로 변수이름을 정해서 사용할 수 있단게 쪼끔 매력적이다.
비교
“; var_dump($a!=1);// != echo “
“; var_dump($a>20); // > < <= >= echo “
“; var_dump($a==”1”); //==과 ===의 차이 echo “
“; var_dump($a===”1”); echo “
“; ?>== 약한 동등..? 이건 1과 “1”을 같다고 판단해!!! 아주 아량이 넓은 친구지
!= 이건 동등의 반대야! 1!=2는 true를 반환해. 신기한 아이지?
> ,< ,>= , <= 이거 다 학교 다니면서 배웠지요옹~ === 이건 진짜 처음 보는걸꺼야! 같다(=)가 3개나? 엄청나게 같다는거지. 이건 ==과 달리 1==="1"은 false를 반환한단다? 근데 왜 반말이지. <입출력 & form태그>
URL로 전송된 데이터를 받을 수 있다. 위의 코드는 localhost/~~/num.php?id=caputdraconis&pwd=1234라는 주소로 접속했을시
Welcome caputdraconisYour PW is 1234라고 출력이 된당.
물음표?와 &로 구성되는 것을 기억하자!
form
위와 같은 코드를 적고 실행하면
이와 같은 형태의 form 형식이 생성된다. id 칸에 적은 값, password 칸에 적은 값은 submit 버튼을 눌렀을때 1.php가 실행되며 주소 뒤에 < id=id칸에 적은 값&pwd=password칸에 적은 값 >의 형태로 서버로 전송된당.
GET vs. POST
위의 코드를 보면 form 태그에 method 라는 속성의 값으로 get이 주어졌다.
GET 방식과 POST 방식의 차이는 submit 버튼이 눌렸을때 바뀌는 url에서 드러난다.
위와 같이 값을 적고 제출을 눌렀을때
바뀌는 URL에 ? 뒤로 입력한 값들이 그대로 드러난다. 하지만 이렇게 되면 개인정보가 드러날 위험이 있다! 이를 막기 위해 사용하는 POST방식은 아래와 같은 URL로 변한다.
아까와 같은 값으로 전달했지만 POST 방식을 사용할때는 URL에 입력한 데이터가 드러나지 않는다. 비밀이 많은 친구다.
조건문
많은 언어에서 배워왔던 것과 같은 형태와 기능을 하기에 간단하게 보고자 한다.
첫번째 if문이 true이기 때문에 ‘result : true’가 출력되고, 아무리 else if의 조건문이 참이라고 해도 이미 if가 실행된 이상 밑의 else if와 else는 출력되지 않는다.
index.html
간단하게 아이디, 비밀번호 입력창을 만들고 제출버튼을 누르면 login.php로 정보가 id와 pwd라는 이름으로 전해진다.
login.php
$_GET[‘id’]와 $_GET[‘pwd’] 를 이용해 index.html 로부터 전달된 정보를 사용한다.
아이디와 비밀번호를 조건문 중첩을 통해 비교하고 상황에 맞는 문구를 출력한다.
<조건문>
조건문도 이미 다른 언어에서 다뤘던것과 기능이 같으니 간단하게..ㅎㅎ
AND 좌항과 우항이 모두 참(true)일때 참을 반환한다. &&도 가능
OR 좌항과 우항 중 하나만 참(true)라면 참을 반환한다. 2개의 항만 사용가능한거 아님. 여러개 가능
! !(not)는 부정의 의미, Boolean 값을 반전시킨다.
<반복문>
while(조건){ 코드 코드 }
while문. while은 ~하는 동안의 의미를 가지고 있다. 뜻 그대로 괄호() 안의 조건이 성립하는 동안 while문 안의 코드들은 실행된다.
while(true){} 는 무한 반복이니 하면 위험.
for(초기화; 반복 지속 여부; 반복 실행){ 코드; }
for문. 이전의 언어들과 같은 형태라 이해하기 쉬울듯 하다.
한 번 돌때마다 $i 값이 1씩 커지며 총 5번 반복하는 코드다.
break 하나의 반복문을 탈출, ‘이 반복문에 더이상 일 없다~’
continue 지금 반복하고 있는 턴을 패스! 위의 코드에서는 안의 코드를 실행하지 않고 1 더해진 $i로 반복문 in..
함수
function 함수명( [인자…[,인자]] ){ 코드 return 반환값; }
위와 같은 형식으로 함수를 선언한다.
return 값 반환과 동시에 함수 종료.
인자
function get_arguments($arg1, $arg2){ return $arg1+$arg2; }
함수를 선언할때 위와 같이 인자를 추가해놓으면, 함수를 호출할때 그에 맞는 개수의 인자를 주고 함수 내에서 그 인자를 사용할 수 있다.
위와 같이 복수개의 인자도 가능하다.
function put_serial($serial=1210){ $_serial = $serial; }
이 코드는 함수 선언을 하며 인자에 기본값을 부여했다. 만약 함수를 호출할때 인자를 넣었다면 저 1210 대신 입력한 값이 들어간다. 허나 인자 없이 호출을 했을시 선언 당시에 주어진 기본값을 가지고 함수가 호출된다.
배열
위는 같은 내용의 배열을 생성하는 방법 2가지를 모두 쓴것이다.
array( 배열에 넣을 값 )을 사용하거나 [배열에 넣을 값] 의 형태로 생성할 수 있다.
get_members()를 하면 egoing, k8805, sorialgi 가 들어있는 배열이 반환되는데 그것을 $tmp에 할당했다.
이로써 $tmp 뒤에 [] 를 붙여 이 안에 인덱스 값을 넣어준다면, 배열 속 각각의 값에 접근할 수 있게된다. ex) $tmp[2]
‘; } ?>
5번째 라인까지의 코드는 $members=[‘egoing’,’k8805′,’sorialgi’];와 같다.
그 밑에서 for문을 사용하여 $member 배열의 하나하나의 데이터에 접근해 그 값의 맨 첫 글자를 대문자화시켜 출력한다.
count()는 괄호 안에 배열을 넣으면 배열에 저장된 값이 몇 개인지 반환한다.
ucfirst()는 안에 들어온 문자열의 가장 앞 글자를 대문자화 시켜 반환한다.
ucfirst에 대해 : https://www.php.net/manual/en/function.ucfirst.php
배열의 조작
[추가]1.array_push
array_push()함수에 첫 인자로 추가받을 배열, 두번째 인자로 추가할 값을 넣어주면 들어간다잉~
2.array_merge
push랑 똑같은데 복수의 값을 넣을 수 있다는게 차이점^^
[제거]1.array_shift
배열의 첫번째 요소를 제거하는 방법이다. 위의 코드를 실행하면 ‘a’가 빠진 배열이 출력된다.
2.array_pop
배열의 마지막 요소를 제거하는 방법이다. 위의 코드를 실행하면 ‘z’가 빠진 배열이 출력된다.
[정렬]1.sort
내림차순? 순서?대로 정렬해줘. 깔끔한 친구야
2.rsort
역순으로 배열해준다잉. 청개구리야
연관배열
10, ‘k8805’=>6, ‘sorialgi’=>80); ?>
파이썬에서 배운 딕셔너리 같은 개념인것 같다.
key와 value가 존재한다. 위의 두 코드는 같은 연관배열을 정의하는 두가지 방법이다.
***디따 신기함*** 나중에 한 번 더 보기
10, ‘k8805’=>6, ‘sorialgi’=>80); foreach($grades as $key => $value){ echo “key: {$key} value:{$value}
“; } ?>foreach 문은 $grades 위치의 배열에 담긴 요소의 숫자만큼 반복문을 실행. 실행될 때마다 요소의 키 값을 $key, 그 키에 대한 요소의 값을 $value에 할당한다. 위의 방법을 통해서 배열 안에 담긴 모든 값을 가져올 수 있다고 한다!!!!!!
워 게 임… 두둥,,
1.webhacking.kr old 6 (hint: php online compiler를 사용!)
이제는 별로 놀랍지도 않다. 아이디와 패스워드를 알려준다.
소스코드를 봐보자!
소스코드의 밑부분에 위의 코드가 있다. 아까 처음 페이지에 들어왔을때 출력한 부분을 담당하는거 같은데,
그러므로 현재 $decode_id는 “guest”, $decode_pw는 “123qwe”가 저장되어 있음을 알 수 있다.
저 매력적으로 생긴 친구 solve(6)을 실행시키려면 $decode_id는 “guest”에서 “admin”으로, $decode_p는 “123qwe”에서 “nimda”로 바꿔놓아야한다.
id와 pw 모두 20번씩 디코딩 한게 각각 admin, nimda다!
노가다로 한 번 할려고 했는데 점점 길어지는게 너무 무섭다. 그냥 컴퓨터한테 시킬래여
주어진 소스파일과 반대로 인코딩을 하여 원래 값을 구해보고자 한다.
위의 코드를 실행하면
개길다. 이를 각각 user, password 쿠키값에 넣어준다. 가운데 길게 있는 str_replace 함수를 무시하는 이유는 20번 인코딩한 값에는 특수문자가 없기 때문에 될게 없당~
쿠키값을 각각 넣어주고 새로고침을 해주면 끄읕~
2.webhacking.kr old 33
이제 들어왔는데 틀렸대ㅡㅡ 소스코드를 봐주자
아까 문제보다 훨씬훨씬 짧다. 하 마음의 평화가 온다.
$_GET는 URL로 전해지는 정보를 받을때 사용하는 녀석이다. get이라는 이름으로 전해지는 데이터가 “hehe”면 Next 링크를 준다고 한다! 바로 실전에 옮긴다.
위와 같이 URL뒤에 ?를 붙여 데이터를 전해준다. get이라는 이름으로 “hehe”를 적고 엔따!!
하 Next가 활성화 되어있다…누른..다?
어쩐지 쉽다했다.. 다음 문제가 나온다,, 다시 view-source를 눌러본다.
오홍 아까는 GET 방식이더니 이번에는 POST 방식이다. 오늘 배운걸 그대로 써먹는다 후후
‘post’라는 이름으로 “hehe”가 주어져야하고, ‘post2’라는 이름으로 “hehe2″가 주어져야만 Next 링크가 활성화된다.
URL에 정보를 적어 넘겼던 방금 전과 달리 POST 방식은 URL 정보 전달로 해결되지 않는다. 그래서 어떻게 할지 고민중,,
Burpsuite도 써봤는데,, 잘 안된다. https://m.blog.naver.com/PostView.nhn?blogId=wwwkasa&logNo=221332141738&proxyReferer=https:%2F%2Fwww.google.com%2F
이거 보고 했는디,,,,
두번째 작전으로 돌입한다. 아까 GET 방식과 POST방식은 URL에 드러나고 안드러나고의 차이가 있었지만, 공통점이 있었다. html 코드에서 form 태그 안에서 text 타입의 input 태그에서 파파팍 전해졌었다!
그냥 form 태그를 만들면 안되나 시도해봤다..
현재 있는 주소가 level2.php이길래 실행도 저 php 파일로 실행해보았다.
form 태그를 만들어주었더니 이쁜 상자 2개가 생겼다. 첫번째가 post, 두번째가 post2이니 이에 맞는 값을 입력해보자.
submit 버튼을 안만들어서 급하게 추가했다.
완전체
맞게 입력하고 제출하였더니 404 not found 오류가 발생한다. 그 이유를 알아보니,,
post2를 posst2로 잘못 치는 짓을 저질렀다.
다시 간다..!
하 또 안되길래 너무 화가 나서 바람을 바깥 공기를 마시고 왔다. 후우우우우우우우우우우우우웅
왜일까!? method 속성을 input 태그에 넣은 것을 발견할 수 있을것이다,,
method 태그는 form태그다 건탁아,,?
바꿔주니 바로 통과인데,,왜 또 Next 냐
myip라는 이름으로 주어진 값과 $_SERVER[‘REMOTE_ADDR’]과 같아야하는데,, $_SERVER가 뭐지
https://unabated.tistory.com/entry/PHP-SERVER-%ED%95%A8%EC%88%98 을 찾아보니
라고 한다. 내 IP..? 내 IP를 공개해야 하는 순간이 온거같다.
스킵! GET 형식이였기 때문에 URL뒤에 myip=~~~~를 붙여주었다.
아 참고로! 자기 ip 주소 확인은 네이버에 “내 아이피 주소”검색하는게 젤 쉬워요!
hint도 주는 착한 아이가 되었다.
password라는 이름으로 주어진 값과 md5(time())가 같아야 하는거 같다,, md5(time())이 뭐지?
찾아보니 뭐 암호화,,? 시키는 느낌인디,,
와 진짜 눈물난다 이거. 저기 hint로 주어지는 값은 time()이였고 새로고침 할때마다 바꼈다. 근데 그 time()값을 md5화(?)를 시켜야하니깐
http://www.md5.cz/이 사이트를 이용하여 지금의 time()값보다 여유분을 더해서 변형하고 그걸 입력한채 계속 새로고침했다..ㅠㅠㅠㅠㅠㅠㅠㅠㅠ진짜 너무 어렵다 이거
또 있네? ㅎㅎㅎㅎㅎㅎㅎㅎㅎ나 자야되는데,,? 놔줘,,
view-source를 해보자,,
imget라는 이름으로 들어온 값, impost라는 이름으로 주어진 값, imcookie라는 이름의 쿠키값으로 주어진 값들이 모두 true면 된다!!!
아까처럼 html 코드를 변형해보자!
진짜 명작이라고 생각했다. 아까 썻던 모든 기술을 쓰면서 이 사이에 setcookie까지 딱 해주면서 나는 정말 이게 안되면 말이 안된다라고 생각을 했는데 안되는걸 보니 안되는것도 말이 되는구나를 느꼈다. 졸리다
다른 곳에 문제가 있는지 잘 모르겠지만 일단 위 캡처를 보면 php 부분이 주석처리 되었다. 왜지이이?
혹시 몰라서 head 부분에 php 문을 넣어봤는데 결과는 똑같다..
근데 생각해보니
이 친구가 있었다..!
html 코드는 이 상태로 가고!
editthiscookie에서 우리가 만들어야되는 쿠키 이름인 imcookie를 새로 설정해서 사용해야한다!! 이거땜에 한참 해맸다.
간다..
하ㅠㅠㅠ
근데 또 Next네?
나의 모든걸 벗은 느낌이다.내 컴퓨터가 서버에 접속할때의 정보를 힌트로 줬다.
view-source
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
힌트로 준게 이거같다.
test라는 이름의 쿠키값, md5화 한 내 ip가 서로 같아야 하고, post 형식으로 주어진 kk라는 이름의 값이 md5화 한 저 힌트값과 같아야 한다.
그럼 일단 저 힌트값을 md5화 해보자.아까 사용했던 사이트를 사용한다.
797d215496aa026dd2270218312a29c6
ip를 md5화 하는걸 여기서 보이면,, md5가 복원 가능한지 아닌지 잘 모르기 때문에 ,, 생략하도록 하겠당.
일단 우항은 준비완료 (###########저기 method=”post” 안적어서 틀렸음!!!)
test라는 이름의 쿠키를 건내줄 준비도 완료!
제발ㅠㅠㅠㅠ
짱짱해커가 조금 더 가까워졌다,,, 삭님 후욱후욱
아니 이거 안끝나요ㅡㅡ 버그 걸린거같아여
사용자의 ip에서 .을 모두 지우고 다 앞으로 땡겨서 저장했다.
그리고 내 아이피가 이름인 값을 get 방식으로 주고 그게 방금 .지워서 저장한 그것과 같으래여
이건 ip 주소 때문에 그냥 할게요오,,
자고싶다.
extract()?
https://bbolmin.tistory.com/53
첫번째 if 문이 실행이 되버리면 $addr에는 현재 나의 ip 주소값이 저장되므로 두번째 중요한 if문을 못탄다. 그러므로 $_GET[‘addr’]은 false여야한다. 그냥 addr이라는 이름으로 127.0.0.1을 주면 되지 않을까..?
쉬는 시간도 주나보다 ㅎㅎ
33-9 view-source
.= 은 문자열을 덧붙이는 연산자.
이건 그냥 저대로 복사해서 실행시켜보면 답이 나올거같은 기분?
bitnami 사용해서 돌려봤다. $answer 값
ans라는 이름으로 get 방식을 사용해 전달된 값이 $answer와 같다면 성공.
하,,,,,,또 Next야 야!!!!!!!!!!!!!1
이제 10이다,,,지친다.
$ip라는 변수에 내 아이피 주소를 저장했다.
내 아이피 주소의 길이만큼 반복하면서 $i값을 ord($i)로 교체한다 . 여기서 ord()는
https://kyoe.tistory.com/49
일단 여기까지 먼저 해볼까..? 이것도 공개 ㄴㄴ,, 그 다음으로 점도 다 없애준다
substr()은
근데 이것도 그냥,,,돌리면 되지 않을까
기술의 힘은 엄청나다.. 노가다로 하고 있던 내가 후회된다.
바로 나오넹
$ip는 ~~~ $answer는 ~~~~이다.
answerip/{$answer}_{$ip}.php이 주소로 가면 뭔가 될거같은 느낌? 일단 넣고 보는거다
그럼 주소는 “answerip/~~~~_~~~~~.php”
제 말 좀 들어주시겠습니까..? 진짜 제가 저거 딱 입력하니깐 “login plz”라는 문구가 출력이 되서,, 아 너무 오랫동안 접속해있어서 그런가 싶어서 ok를 누르고 로그인을 하고 다시 이 문제를 눌렀는데 아닛?? 이게 뭔가요
제 눈이 이상한거 아니죠..?
저거 -1 맞죠?????
하아아아아ㅏ아아아아아아ㅏ아아아아아ㅏ아아아ㅏ앙아ㅏ아아아아아아아ㅏ아아아아아아아아아아ㅏ아ㅏ아아아ㅏ아아아아아ㅏ아아아아아아ㅏ아아아아아아아ㅏ아아아아아아아아아아ㅏㅇ아아아아ㅏ아아ㅏㅇ아ㅏ아아아아
펄럭 펄럭
항복하겠습니당.
반응형
키워드에 대한 정보 php 웹 게임
다음은 Bing에서 php 웹 게임 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.
이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!
사람들이 주제에 대해 자주 검색하는 키워드 [NO.61] 파천일검 18년간 한 게임에 머문 72세 할머니 『돈벼락』 – 파천일검TMI,게임인물탐색,KBS안녕하세요
- 추억
- 게임잡지
- 파천일검
YouTube에서 php 웹 게임 주제의 다른 동영상 보기
주제에 대한 기사를 시청해 주셔서 감사합니다 [NO.61] 파천일검 18년간 한 게임에 머문 72세 할머니 『돈벼락』 – 파천일검TMI,게임인물탐색,KBS안녕하세요 | php 웹 게임, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.