2014-05-09 2 views
0

콘텐츠 관리 시스템에서 일하고 있는데 현재 BB 코드를 사용하여 특수 문자를 사용할 수 있습니다. 이것이 설정되는 방식은 2 개의 배열을 사용하는 것입니다. 하나는 BB 코드를 찾고, 다른 하나는 바꿀 필요가있는 것들입니다.PHP 코드를 배열에 삽입 할 때의 문제

지금 내가 가지고있는 문제는 요청할 때 약간의 PHP 코드를 실행해야 할 필요가 있다는 것입니다. 그 일을 어떻게 하죠? 어느 내 질문에 : 어떻게 배열에 일부 PHP 코드를 삽입합니까?

내 코드 : 내가 얻을

$replace = array(
    "@\[email protected]", 
    "/\[b\](.+?)\[\/b\]/is", 
    "/\[code\=(.+?)\](.+?)\[\/code\]/is" 
); 
$find = array(
    "<br />", 
    "<strong>$1</strong>", 
    "<?php include_once($_SERVER['DOCUMENT_ROOT'].'/source/geshi/geshi.php'); $source=file_get_contents('file.php'); $language='$1'; $geshi=new GeSHi($source, $language); echo'<code class=\"num\">', implode(range(1,count(file('file.php'))), '<br />'), '</code>'; echo $geshi->parse_code(); ?>" 
); 

오류 :

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or   T_VARIABLE or T_NUM_STRING in /testing/bbcode.php on line 26 

감사를 앞두고

편집 : 따옴표 반대를위한 하나의 스와핑이 속임수를 썼는지! 나는이있을 때

:

"<font color=\"$1\">$2</font>", 

그것은 잘 작동 : 내 $에 내 $ 찾기 배열에서

"/\[color\=(.+?)\](.+?)\[\/color\]/is", 

하고,이 배열 교체

는 지금은 또 다른 문제가 텍스트를 입력 된 색상으로 렌더링합니다. 예를 들어 [code = php] [/ code]를 사용하면 전혀 렌더링되지 않고 "[code = php] [/ code]"로 표시됩니다. 이 문제를 어떻게 해결합니까?

+6

? 너 제정신이야? –

+1

그렇다면 정확히이 방법을 사용하면 보안을 강화할 수 있으며, 약 10 억 가지 방법으로 생각할 수 있습니다. 함수에 변수를 사용하여 함수 이름을 만들기 위해 변수를 연결하는 것에서부터 변수 이름에 숫자를 사용하는 것에 이르기까지 ... 당신은 결코 이것을 확보 할 수 없을 것입니다. 그리고 당신의 PHP 스크립트가 할 수있는 일 (사용자의 서버에서 거의 모든 명령)은 사용자가 서버에서 할 수 있습니다. –

+0

@JonathanKuhn이, 아니, 나에 의해 accessable 한 단지이며, 필자는 그것을 배우고 만드는 고체 계정 시스템에 의해 확보가 늘 어디서든 웹 사이트 : – BananaMan

답변

0

이 코드는 도움이 될만한 것은 아니지만 코드를 솔루션에 적용 할 수있는 기회를 놓치지 않고 게시 할 것입니다. 나는 textarea에서 입력을 받아들이는 페이지를 만들었고 버튼을 클릭하면 페이지가 PHP 코드를 "실행"하고 textarea 아래의 div에 출력을 표시합니다. 브라우저에 있기 때문에 JavaScript (및 HTML/CSS)에서도 동일한 작업을 수행 할 수 있으므로 빠른 테스트를 수행하는 데 편리합니다.

그것은 다음과 같습니다

그것은 textarea에서 PHP 코드를 복용하고, 임시 파일에 작성하는 방식으로 작동합니다

enter image description here

. 파일이 작성된 후 include 문을 통해 오프 스크린 버퍼에 포함됩니다. 그런 다음 변수에 버퍼를 캡처하여 페이지에 침을 뱉어냅니다.

은 모두 실제로 모습입니다 :

$code = isset($_POST['code']) ? $_POST['code'] : ''; 

$filename = tempnam('.', '__'); 
file_put_contents($filename, $code); 

ob_start(); 

include $filename; 
$output = ob_get_clean(); 

unlink($filename); 

PHP 코드는 정말 그냥 텍스트, 당신은 당신처럼 배열에 할당 할 수 있기 때문에 것 데이터의 다른 조각 :

$array = array(); 
$array[] = $code; 

대신 디스크에가는, 당신은 eval()를 사용할 수있는 메모리의 변수에서 PHP 코드를 실행하려면,하지만 그 코드의 include 방법보다 약간 다르게 작동하는 경우에 "반환"뭔가가 . 나는이 방법의 팬이 아니지만 옵션은 거기에있다.

$code = isset($_POST['code']) ? $_POST['code'] : ''; 
$result = eval($code); 

참고 : 당신은 사용자가 입력 한 PHP 코드를 실행하는 데 필요한

+0

안녕하세요, 이것은 꽤 유용합니다.하지만 내 코드가 실행되지 않기 때문에 제 문제에 대해 정확히 도움이되지는 않지만 읽습니다. 강조 표시하고 스팬을 스타일과 함께 사용합니다. 고마워요, 이것은 확실히 유용합니다! – BananaMan

+0

@BananaMan 아, 그럼 당신의 질문을 잘못 해석했을 것입니다. 사용자가 입력 할 수있는 소스의 PHP 코드를 포함 시키려고 한 것 같습니다. :) – Cypher

+0

내 endgoal은 기본적으로 GeSHi (구문 형광펜 시스템)를 사용하여 [code = php] [/ code]를 텍스트 영역에 넣고 렌더링 한 다음 올바른 구문 구문으로 다시 표시합니다 (GeSHi의 기능). 이제 내가 가지고있는 문제는 BB 코드입니다 : – BananaMan

관련 문제