내 요구 사항은 다음과 같습니다. 요청 된 URL이아파치 mod_perl : URL 기반 다이나믹 핸들러
http://localhost/mod_perl/TopModule/ActualModule/method1
같은 경우
그럼 난 TopModule :: ActualModule-> 방법 항목()
가 어떻게 아파치가이 작업을 수행하도록 구성 할 수있는 전화를해야합니까?
내 요구 사항은 다음과 같습니다. 요청 된 URL이아파치 mod_perl : URL 기반 다이나믹 핸들러
http://localhost/mod_perl/TopModule/ActualModule/method1
같은 경우
그럼 난 TopModule :: ActualModule-> 방법 항목()
가 어떻게 아파치가이 작업을 수행하도록 구성 할 수있는 전화를해야합니까?
스크립트 이름 뒤에있는 URL 부분은 $ ENV {PATH_INFO}에서 펄 프로그램에 전달됩니다. 그래서 당신은 당신이 'http://whatever.host/modulerunner/Top/Actual/method'과 같은 URL로 호출 할 수 있습니다 당신이 modulerunner 전화 펄 스크립트, 만들 수 있습니다 그러나
my $arg=$ENV{PATH_INFO}; <-- contains Top/Actual/method
my @arg=split("/", $arg); <-- [ "Top", "Actual", "method" ]
my $method=pop @arg; <-- removes "method", "Top" and "Actual" remain in @arg
my $modules=join("::", @arg); <-- "Top::Actual"
my $call="$modules->$method()"; <-- "Top::Actual->method()"
eval $call; <-- actually execute the method
을, 나는 AT ALL이 권하고 싶지 않다 - 그것은, 너무 많은 보안 구멍을 열어 허용 귀하의 웹 사이트 방문자가 모든 모듈에서 펄 기능을 호출합니다. 그래서, 당신이 다른 어떤 것과도 연결되지 않은 자신의 서버에서 이것을하는 것을 제외하고는, 나는 아주 지루한 if-then-cascade에 가려고합니다.
$p=$ENV{PATH_INFO};
if ($p eq "Top/Actual/method") { Top::Actual->method(); }
elseif ($p eq "Other/Module/function" { Other::Module->function(); }
else {
print "<font color=red>Don't try to hack me this way, you can't.</font>\n";
}
아, 그리고 ONY < 글꼴 > 태그를 사용하지 않는 것도 생산 중)