내가 PHP 스크립트를 실행하려면, 난 그냥 www.something.com/myscript.php
URL에서 PHP 함수를 호출 하시겠습니까?
에 브라우저를하지만 myscript.php
내부에 특정 기능을 실행하려면, 방법이 있나요? 예 : www.something.com/myscript.php.specificFunction
고마워요!
내가 PHP 스크립트를 실행하려면, 난 그냥 www.something.com/myscript.php
URL에서 PHP 함수를 호출 하시겠습니까?
에 브라우저를하지만 myscript.php
내부에 특정 기능을 실행하려면, 방법이 있나요? 예 : www.something.com/myscript.php.specificFunction
고마워요!
한 빠른 방법은 인 myscript.php
if(function_exists($_GET['f'])) {
$_GET['f']();
}
에 다음
something.com/myscript.php?f=your_function_name
등의 작업을 수행하는 것입니다 하지만 제발, 모든 새끼 고양이의 사랑을 위해, 이것을 남용하지 마십시오.
PHP 파일 자체에 특수 코드를 추가하지 않고 URL에서 함수의 이름을 가져 와서 호출 할 수는 없습니다.
스크립트에 함수 호출을 넣을 수 있습니다.
myFunction();
myFunction 함수() { .... }
당신이 이런 식으로 할 경우, 스크립트가 그 기능을가 호출 될 때마다 실행됩니다. 특히 파일에 둘 이상의 기능이있는 경우에는 혼란 스러울 수 있습니다. OP는 여러 함수가있는 PHP 파일을 만드는 것에 대해 묻고 있으며 특히 하나만 호출한다고 생각합니다. – ShiningLight
여러 가지 방법이 있습니다.
함수 이름을 GET 매개 변수로 전달하는 것이 한 가지 방법이며 함수의 존재 여부에 따라 함수를 호출 할 수 있습니다.
스크립트의 기능은 전적으로 귀하에게 달려 있습니다. URL을 통해 마술처럼 아파치, PHP 또는 다른 서버 구성 요소가 특정 동작을 수행 할 수는 없지만 특정 기능을 실행할 수 있도록 프로그램을 작성하면 확실히 가능합니다. 아마도 같은 :
switch($_GET['function']) {
case 'specificFunction':
specificFunction();
}
그런 다음 당신은 특별히 각 허용 기능에게 목록을 myScript.php?function=specificFunction
이 여기에 특히주의를 방문 할 수있다. $_GET['function']
매개 변수를 가져 와서 말하는 기능을 맹목적으로 실행하면 안됩니다. 엄청난 보안 위험이 발생할 수 있기 때문입니다.
당신은 (보안상의 이유로 권장하지 않음) 같은 것을 할 수있는 : www.exampe.com/myscript.php?run=getNames 다음
:
<?php
if (isset($_GET['run']) && function_exists($_GET['run'])){
echo $_GET['run']();
} else {
echo 'Function not Found';
}
당신은 더 떨어져 것을 potenitally 위험한 함수를 호출하거나 결과를 볼 수 없기 때문에 결과를 볼 수 없기 때문에 전역 네임 스페이스에서 함수를 호출하는 대신 php 클래스를 사용합니다.
<?php
class PublicView {
function get_page(){ echo 'hey'; }
}
if (isset($_GET['run']) && method_exists('PublicView',$_GET['run'])){
$view = new PublicView();
$view->$_GET['run']();
} else {
echo 'Function not found';
}
이것은 또한 클래스의 private 함수가 호출되는 것을 허용하지 않습니다.
안녕하세요. 당신이 안드로이드에 익숙하다면 확실하지 않지만 안드로이드를 통해 webservice URL을 호출하면 사용자가 볼 수 없게됩니다.게시 한이 코드를 사용해도 보안 문제가 발생합니까? –
if (isset($GET[param_name])){
if($GET[param_name] === value)
{
function 1...
} else if
{
function 2...
}
}
안녕하십니까, StackOverflow에 오신 것을 환영합니다. 코드가 질문에 대답하는 데 도움이 될 수 있지만 답변에 몇 가지 설명을 포함하는 것이 좋습니다. 그렇게하면 OP와이 답변을 읽은 다른 사람이 문제를 해결하는 방법을 더 잘 이해할 수 있습니다. – dhh
어떤 방식 으로든 노출해야합니다. 이것은 모든 방법을 공개하는 것이 보안 위험이 있기 때문입니다.
Example.php 그럼 그냥 전화
<?php
function CalculateLength($source)
{
return strlen($source);
}
if(isset($_GET['calculate-length']) && isset($_GET['value']){
die(CalculateLength($_GET['value']));
}
?>
는 :
http://www.example.com/Example.php?calculate-length&value=My%20example
예, 알고 있습니다. 그러나 때로는 개발할 때 편리합니다. 프로덕션에 이것을 사용하는 것에 대해 생각하지 않았습니다. –
또한 보안를 들어, HTTP 리퍼러를 확인할 수 있습니다. 리퍼러가 자신과 동일한 도메인 인 경우에만 함수를 실행합니다. 아마도 verious 다른 것들도 비교/확인하십시오.
하지만 기능이 실행되어야하는 요청이 동일한 웹 사이트에서 왔는지 확인할 수있는 방법은 다양해야합니다.
Referer 헤더는 위조 될 수 있으므로 전혀 보안을 제공하지 않습니다. – lonesomeday
사용하여 PHP 클래스의 생성자 :
<?php
class YourClass {
function __construct() {
$functionName = myFunction;
if (isset($_GET['functionName'])
&& $_GET['functionName'] == $functionName)){
myFunction();
}
else {
echo "Function not found";
}
}
}
인스턴스를 빌드하지 않으면 시작되지 않습니다. – sics
이 하나
$urlParams = explode('/', $_SERVER['REQUEST_URI']);
$functionName = $urlParams[2];
$functionName($urlParams);
function func1 ($urlParams) {
echo "In func1";
}
function func2 ($urlParams) {
echo "In func2";
echo "<br/>Argument 1 -> ".$urlParams[3];
echo "<br/>Argument 2 -> ".$urlParams[4];
}
을 시도하고 URL은 다음과 같습니다 당신이 가서 여기
http://domain.com/url.php/func1
http://domain.com/url.php/func2/arg1/arg2
수 있습니다. 이건 정말 간단합니다. 특정 기능 만 호출하고 기본 기능을 수행합니다.
<?php
if (isset($_GET['p'])) $linkchoice=$_GET['p'];
else $linkchoice='';
switch($linkchoice){
case 's' :
firstfunc();
break;
case 'second' :
secondfunc();
break;
default :
echo 'no function';
}
?>
IMHO, 이것이 최선의 방법입니다. – ShiningLight
저는 이것을 내 웹 사이트에서 사용하고 있습니다. 이 형식을 간단하게 사용하려면 www.something.com/myscript.php?function=myFunction&arg=foo&otherarg=bar
URL에서 args를 호출하는 것이 중요하지 않으며 원하는만큼 많은 args를 가질 수 있습니다.
<?php
if(isset($_GET["function"])&&!empty($_GET)){
$function = $_GET["function"];
unset($_GET["function"]);
$canexec = array(
"function name that can be executed",
"function name that can be executed",
"function name that can be executed"
);
if(!in_array($function,$canexec)){
die("That function cannot be executed via url.");
}
$args = array();
if(count($_GET)>0){
//handle args
foreach($_GET as $arg){
array_push($args,$arg);
}
}
$result = call_user_func_array($function,$args);
//this part is only necessary if you want to send a response to a http request.
if(is_bool($result)){
die(($r)?'true':'false');
}
else if(is_array($result)){
die(json_encode($result));
}
else {
die($result);
}
}
myFunction($foo,$bar){
echo $foo." ".$bar;
}
?>
//Register Hooks
$hooks = ['lang','score'];
function parseHook() {
if (isset($_GET['_h'])) {
return $hook = explode('/', filter_var(rtrim($_GET['_h'], '/'), FILTER_SANITIZE_URL));
} else {
return false;
}
}
$hook = parseHook();
if ($hook && in_array($hook[0],$hooks) && function_exists($hook[0])) {
$callMe = $hook[0];
unset($hook[0]);
$params = $hook ? array_values($hook) : [];
$callMe($params);
}
function lang($params) {
$Lib = new Lib();
$Lib->printWithPreTag($params);
}
function score($params) {
$Lib = new Lib();
$Lib->printWithPreTag($params);
}
//&_h=hookname/par1/par2/par3
+1 이것이 최선의 방법입니다. –
아니, 아니, 아니, 아니, 아니, 아니, 아니, 아니! 방문자가 원하는 PHP 함수를 실행할 수있게되었습니다. 'purgeDatabase' 함수를 실행하기로 결정했다면 어떻게 될까요? 아니면 그냥'phpinfo'? – VoteyDisciple
많은 보안 문제를 방지 할 수있는 클래스 기반 대안에 대해서는 아래를 참조하십시오. – CodeJoust