Archives for February of 2018
- iwinv에서 perl cgi 쓰기 (6th of February, 2018)
iwinv에서 perl CGI script를 어떻게 했나 궁금하신 분이 계셔서 정리 해 봅니다.
홈페이지를 옮기고 나서 perl CGI script가 동작하지 않는 것을 확인하고 게시판에 문의를 넣어봤습니다. 거기에 이런 답변을 받았습니다. 답변 받은 내용이니 아마 될 거 같은데 전 답변을 확인한 시점이 이미 아래 적을 PHP를 만든 뒤여서 확인은 안했습니다.
안녕하세요.
iwinv 입니다.
웹호스팅에서 perl과 cgi 기능을 이용 하실 수는 있으나, 웹방화벽을 사용 하고 계시면 정상적으로 이용 할 수 없을 수도 있습니다.
관리 콘솔 – 계정 – 웹방화벽 off 를 해보시기 바랍니다.
감사합니다.
php로 직접 perl cgi를 실행하고 그 결과를 HTML로 전달하는 방법입니다.
<?php echo "<!--".PHP_EOL; $num_get = count($_GET); $num_post = count($_POST); echo " # of _GET:".$num_get.PHP_EOL; echo " # of _POST:".$num_post.PHP_EOL; $param = ""; if($num_get > 0) { foreach($_GET as $key => $value) { echo $key.'='.$value.PHP_EOL; $param = $param."$key=$value&"; } } if($num_post > 0) { foreach($_POST as $key => $value) { echo $key.'='.$value.PHP_EOL; $param = $param."$key=$value&"; } } echo "-->".PHP_EOL; exec("QUERY_STRING=\"$param\" /usr/bin/perl ".dirname($_SERVER['SCRIPT_FILENAME'])."/pldbbs.cgi", $output); $header_found = 0; foreach($output as $line) { if($header_found == 0) { if(strlen($line) > 0) { continue; } else { $header_found = 1; } } $line = str_replace("pldbbs.cgi", "pldbbs.php", $line); echo $line.PHP_EOL; } ?>
GET 또는 POST 변수들을 만들어서 QUERY_STRING으로 전달하고 perl을 이용해 직접 스크립트를 실행합니다. 실행한 결과에서 http header 부분을 제거하고 html 부분에서 pldbbs.cgi를 pldbbs.php로 바꿨습니다. 저 같은 경우는 예전에 사용한 방명록을 읽기 전용으로 바꿨기 때문에 이 정도 수정으로 충분 했습니다. 쿠키를 쓰는 경우는 해당 코드를 추가로 구현해야 합니다.
덧붙여서 cgi 파일 소스가 그대로 나오기 때문에 다음과 같이 .htaccess 파일을 추가해서 소스가 나오지 않게 하는 것이 좋습니다.
<Files ~ "^.*\.([cC][gG][iI]|[lL][oO][gG])"> order allow,deny deny from all satisfy all </Files>