2011-09-22 10 views
0

저는 서버 관리자를 만들고 있습니다. 기본적으로 shell_exec ('kill $ arrtext')를 실행하는 PHP 스크립트를 호출하는 "kill"명령을 추가하고 싶습니다. 프로세스를 종료하여 서버를 종료합니다. 여기에 결과를 반환하는 서버가 실행 여부를 확인 내 스크립트의 일부입니다 : 내가 적절한 $의 arrtext를 설정합니다 링크 또는 무언가를 [추가 할 방법을 몰라,다른 PHP 페이지로 변수 전달하기

<?php 
$COMMAND = shell_exec('ps -o command ax | grep skulltag | grep -v grep'); 
$old = array("skulltag-server", "-port", "-iwad", "-wad", "+exec"); 
$new = array("SKULLTAG", "Running on Port", "Using IWAD", "+ PWAD", "with Config"); 
$COMMAND = str_replace($old, $new, $COMMAND); 
$arr = explode("./",$COMMAND); 
$text = shell_exec('pgrep -u doom'); 
$arrtext = preg_split('/\s+/', $text); 
for($i = 1; $i < count($arr); $i++) { 
    echo '<div class = "serverborder">'; 
    echo '<div class = "servertextalign">'; 
    echo $i,'. PROCESS ID <span style="color: #f00;">',$arrtext[$i],'</span> with server parameters: <span style="color: #777;">',$arr[$i],'</span>'; 
    echo '</div>'; 
    echo '</div>'; 
    echo '<br>'; 
} 
?> 

을하지만은] 변수 (어떤 변수를 선택했는지에 따라 다름)를 가져 와서 서버를 죽일 PHP 스크립트에 전달하십시오.

라이브 데모

http://server.oblivionro.net/servers/

감사에서 확인하실 수 있습니다!

+1

오, 그거 위험한 물건입니다. –

+0

이것은 아이들이 교통에서 놀게하는 것과 같습니다. – horatio

+0

나는 위험하다는 것을 알고 있습니다. 그래서 나는 수표를 가지고있을 것입니다. 다른 공급자는 Ventrilo 및 다른 게임 서버에서 이와 비슷한 작업을 수행하지만 동일한 방법을 사용합니까? 그들은 어떻게 다르게합니까? – Ivan

답변

1

다른 작은 스크립트에서 shell_exec을 사용하여 명령 줄에서 kill 스크립트를 실행 해보실 수 있습니까? GET 변수를 사용하지 마십시오. 오히려 목록에있는 각 서버에 대해 작은 양식을 작성하여 POST를 통해 전달합니다. 같은 페이지에 양식 동작을 보내, 숨겨진 POST 변수를 취하는 작은 스크립트를 필요로하고, pid는 프로세스 ID입니다 매개 변수

// In form 
echo '<input type="hidden" name="pid" value="'.$arrtext[$i].'"/>'; 

// In script 
$pid = $_POST['pid']; 
shell_exec('php -f /location/of/kill_script.php -- -'. $pid) 

로 배열을 전달합니다. 분명히 pid가 유효한지 확인하기 위해 kill 스크립트를 설정해야합니다. 이것의 이점은 스크립트의 실제 위치가 숨겨져있을 수 있으며 www 루트에있을 필요조차 없다는 것입니다. 실제 스크립트를 직접 링크 할 필요는 없습니다.

0

더러운, 더러운 (권장하지 않음)는 링크처럼 명령을 스크립트로 이동하는 것입니다 할 수있는 방법은 다음 killScript에서 다음

<a href="killScript.php?p=<?php echo $arrtext[$i]; ?>">KILL</a> 

, 당신은 엄격하게을 확인 그들이 살인을 저지른 뭔가를 죽이고 있습니다.

누군가가 killScript.php로 이동하지 않도록 "kill"과 같이 강력한 명령을 사용하지 않는 것이 더 좋은 방법입니다. 1230은 Minecraft 게임의 프로세스 번호입니다.

0

필자는 PHP 스크립팅에 대한 이해를 갖고 있으며 적절한 데이터가있는 기간 등을 작성한 것으로 보이는 이유를 묻는 이유를 혼란 스럽습니다. 앵커 태그를 만드는 것은 간단합니다. 앵커 태그는 PID 일 수있는 GET 변수를 참조 할 수 있습니다. PID가 운명 서버 프로세스 (및 적절한 로그인 자격 증명)를 참조하는지 확인하는 것과 같은 적절한 유효성 검사가 끝나면 PID를 사용하여 kill 명령을 쉘링 할 수 있습니다.

전세계 서버가 서버의 프로세스를 종료 할 수 있도록 서버를 열 수 있습니다.

관련 문제