从url调用PHP函数?

时间:2010-12-05 17:38:06

标签: php

如果我想执行php脚本,我只需将浏览器指向www.something.com/myscript.php

即可

但如果我想在myscript.php内执行特定功能,有没有办法?像www.something.com/myscript.php.specificFunction

这样的东西

谢谢!

14 个答案:

答案 0 :(得分:45)

一个快捷方式是做

之类的事情
something.com/myscript.php?f=your_function_name

然后在myscript.php

if(function_exists($_GET['f'])) {
   $_GET['f']();
}

但是,为了所有小猫的爱,请不要滥用它。

答案 1 :(得分:25)

您的脚本完全取决于您。 URL不能神奇地导致Apache,PHP或任何其他服务器组件采取某种行为,但如果您编写程序以便可以执行特定的功能,那么它当然是可能的。也许是这样的事情:

switch($_GET['function']) {
case 'specificFunction':
    specificFunction();
}

然后你可以访问myScript.php?function=specificFunction

此处要非常小心 专门列出每个允许的功能 。您不能只使用$_GET['function']参数并盲目执行它所说的任何功能,因为这可能会带来巨大的安全风险。

答案 2 :(得分:10)

你必须以某种方式揭露它。这是因为公开所有方法都会带来安全风险。

使用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

答案 3 :(得分:9)

试试这个

$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];
}

并且网址可以如下所示 http://domain.com/url.php/func1
http://domain.com/url.php/func2/arg1/arg2

答案 4 :(得分:7)

你可以这样做(出于安全原因不推荐): www.exampe.com/myscript.php?run=getNames

然后:

<?php
if (isset($_GET['run']) && function_exists($_GET['run'])){
  echo $_GET['run']();
} else {
  echo 'Function not Found';
}

最好使用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';
}

这也不允许调用类的私有函数等。

答案 5 :(得分:5)

你走了。这个很简单。它只调用特定的函数并执行默认函数。

    <?php 

if (isset($_GET['p'])) $linkchoice=$_GET['p']; 
else $linkchoice=''; 

switch($linkchoice){ 

case 's' : 
    firstfunc(); 
    break; 

case 'second' : 
    secondfunc(); 
    break; 

default : 
    echo 'no function'; 

} 

?> 

答案 6 :(得分:2)

你可以把函数调用放在脚本中。

myFunction的();

function myFunction() { .... }

答案 7 :(得分:2)

我在我的网站上使用它。要使用它,只需格式化您的网址www.something.com/myscript.php?function=myFunction&arg=foo&otherarg=bar您在网址中调用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;
        }
    ?>

答案 8 :(得分:1)

//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

答案 9 :(得分:0)

如果不向PHP文件本身添加特殊代码以从URL中获取函数名称并调用它,则无法执行此操作。

答案 10 :(得分:0)

有几种方法。

一种方法是将函数名称作为GET参数传递,并且根据它的存在,您可以调用该函数。

答案 11 :(得分:0)

 if (isset($GET[param_name])){

  if($GET[param_name] === value)
   {
      function 1... 
    } else if 
 {

function 2...
 }

}

答案 12 :(得分:0)

您还可以获取安全性,请检查HTTP Referrer。并且只有在引用者与其自身相同的域时才执行函数。也许还可以比较/检查其他事情。

但是,如果需要执行该功能,应该有很多方法可以验证来自同一网站的请求。

答案 13 :(得分:0)

使用PHP类的构造函数:

<?php
class YourClass {

    function __construct() {
        $functionName = myFunction;

        if (isset($_GET['functionName']) 
                && $_GET['functionName'] == $functionName)){

            myFunction();
        }
        else {
            echo "Function not found";
        }
    }
}