Подтвердить что ты не робот

Вызывать функцию PHP из URL-адреса?

Если я хочу выполнить php script, я просто указываю браузеру на www.something.com/myscript.php

Но если я хочу выполнить определенную функцию внутри myscript.php, есть ли способ? что-то вроде www.something.com/myscript.php.specificFunction

Спасибо!

4b9b3361

Ответ 1

Один быстрый способ - делать что-то вроде

something.com/myscript.php?f=your_function_name

затем в myscript.php

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

Но, пожалуйста, ради любви ко всем котятам, не злоупотребляйте этим.

Ответ 2

То, что делает ваш script, полностью зависит от вас. URL-адреса не могут волшебным образом привести к тому, что Apache, PHP или любой другой серверный компонент предпримут определенное поведение, но если вы напишете свою программу таким образом, что конкретная функция может быть выполнена, это, безусловно, возможно. Возможно, что-то вроде:

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

Затем вы можете посетить myScript.php?function=specificFunction

Будьте предельно осторожны, чтобы указать каждую допустимую функцию. Вы не должны просто принимать параметр $_GET['function'] и слепо выполнять любую функцию, о которой он говорит, поскольку это может представлять огромный риск для безопасности.

Ответ 3

Вам придется разоблачить его каким-то образом. Это связано с тем, что публикация всех методов является угрозой безопасности.

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

Ответ 4

Попробуйте этот

$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

Ответ 5

Вы можете сделать что-то вроде этого (не рекомендуется по соображениям безопасности): 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';
}

Это также не позволит вызывать частные функции класса и т.д.

Ответ 6

Здесь вы идете. Это очень просто. Он вызывает только определенные функции и выполняет функцию по умолчанию.

    <?php 

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

switch($linkchoice){ 

case 's' : 
    firstfunc(); 
    break; 

case 'second' : 
    secondfunc(); 
    break; 

default : 
    echo 'no function'; 

} 

?> 

Ответ 7

вы можете поместить вызов функции в script.

туРипсЫоп();

функция myFunction() { .... }

Ответ 8

Вы не можете сделать это без добавления специального кода в файл PHP, чтобы захватить имя функции из URL и вызвать его.

Ответ 9

Существует несколько способов.

Один из способов - передать имя функции в качестве параметра GET, и в зависимости от ее существования вы можете вызвать функцию.

Ответ 10

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

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

function 2...
 }

}

Ответ 11

Вы также можете для безопасности, проверьте HTTP-ссылку. И выполняйте только функции, если реферер является тем же самым доменом, что и сам. Возможно, также сравните/проверьте достоверные другие вещи.

Но должно быть много способов проверить, что запрос поступает с того же веб-сайта, если функция должна быть выполнена.

Ответ 12

Используйте конструктор вашего класса PHP:

<?php
class YourClass {

    function __construct() {
        $functionName = myFunction;

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

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

Ответ 13

Я использую это на своем веб-сайте. Чтобы использовать это, просто отформатируйте свой URL-адрес следующим образом: www.something.com/myscript.php?function=myFunction&arg=foo&otherarg=bar Не имеет значения, что вы называете args в URL-адресе, и вы можете иметь столько аргументов, сколько хотите.

<?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;
        }
    ?>

Ответ 14

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